auf eine variable hinweisen

Alles, was PHP betrifft, kann hier besprochen werden.

auf eine variable hinweisen

Postby Makconner » 14. February 2006 16:13

Ich habe von einer anderen Seite mehrere Variablen übergeben. Die Namen der Variablen setzen sich immer aus einem Stammwort und einer Zahlenendung zusammen.

Beispiel:
$vari_1
$vari_2
$vari_3
$vari_4

Je nach dem wie die Website vorher ausschaute gibt es mehr oder weniger dieser Variablen, also kann ich das nicht fest machen. Die Anzahl weiss ich… da diese mit einem Counter hochgezählt wurde.

Auf der Eigentlichen Seite hab ich jetzt das Problem das die Seite ja die Variablen kennt, ich auch, aber ich muss sie jetzt zu greifen bekommen. Ich könnte einen String zusammensetzen aus dem Stammwort und der Zahlenendung, da ich beides kenne…. Aber ich kann nicht über eine Variable auf eine Variable hinweisen.


$vari_1 = 'Text';
$Variable = '$vari_'.1; //Zusammensetzung
Print $Variable;

Das wird nicht funktionieren…. Er wird den Text nicht drucken.
Bitte um Hilfe…
User avatar
Makconner
 
Posts: 153
Joined: 14. February 2006 16:00

Postby KingCrunch » 14. February 2006 16:19

Richtig ;) Du benutzt auch Single-Quotes
Code: Select all
$i = 1;
$temp = "var_".$i;
while (isset ($$temp)) {
  $var_array[$i] = $$temp;
  unset($$temp);
  $i++;
  $temp = "var_".$i;
}
unset($temp,$i);

So, das testet alle Variablen "$var_1,...,$var_n" durch. Solange sie existieren, fügt er sie mit selbigen Index in das Array "$var_array". Danach wird alles entfernt, was nicht mehr gebraucht wird. Es funktioniert (sollte funktionieren ;)), solange es eine fortlaufende Reihe ist, als wenn die Variablen "var_1,var_2,var_4" übergeben werden, ignoriert er "$var_4".
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Makconner » 14. February 2006 16:44

Danke.... es geht ja doch wie ich es dachte...
Danke für die Hilfe... man kann also DOCH über eine Variable auf eine andere Variable hinweise....

THX ...
User avatar
Makconner
 
Posts: 153
Joined: 14. February 2006 16:00

Postby KingCrunch » 14. February 2006 16:45

Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Makconner » 14. February 2006 17:17

Aber nochmal so ne frage....

WARUM... löscht du die Wariable..

Code: Select all
unset($$temp);


Da wir ja mit dem verlauf gradlinig weitergehen kommen wir zu der Variable nicht mehr hin? Daher ist das doch hinfällig oder? Hat das eventuell einen anderen Grund?
User avatar
Makconner
 
Posts: 153
Joined: 14. February 2006 16:00

Postby Knight1 » 14. February 2006 17:41

Wieso gehst Du denn nicht hin und nennst alle Felder zum Beispiel $var[]
Dann setzt PHP die Array-Indexe automatisch von 0 (null) an aufwärts bis zum letzten Element. Das Array $var wird dann im nächsten Script per $_GET['var']['index_nr'] oder $_POST['var']['index_nr'] verfügbar sein.
Dann kannst Du auch diese hier nutzen:
Code: Select all
for ($x="0";$x<=count($_GET[var]);$x++)
{
Hier kannst Du dann das Array entsprechend nutzen
}


So hast Du dann auch die Möglichkeit in einem eventuellem Formular noch mehr Elemete hinzuzufügen ohne das Script großartig umschreiben zu müssen.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby KingCrunch » 14. February 2006 18:00

Makconner wrote:Aber nochmal so ne frage....

WARUM... löscht du die Wariable..

Code: Select all
unset($$temp);


Da wir ja mit dem verlauf gradlinig weitergehen kommen wir zu der Variable nicht mehr hin? Daher ist das doch hinfällig oder? Hat das eventuell einen anderen Grund?


Sache der Gewöhnung: Ich bin gründlich und halte meinen Variablenraum sauber :) Ich benutze $temp häufiger für Zwischenspeicherungen. Falls ma was nicht klappt, kann ich so ausschließen, dass es daran liegt, das noch irgendwas $temp zugewiesen war. Stimm schon, ist in dem Sinne nutzlos, schadet aber auch nich ;) Ich kann ja mal messen (lassen), wieviel Performance die Anweisung wirklich in Anspruch nimmt (da hab ich mr nie Gedanken drüber gemacht :?)
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby Makconner » 15. February 2006 09:14

Werden alle Variablen bei der Übergabe von einer Seite auf die andere grundsätzlich in diesem Array gespeichert?

Code: Select all
$_GET['var']['index_nr'] oder $_POST['var']['index_nr']


kann ich jetzt etwa IMMER auf das array zurückgreifen ohne die Namen zu kennen?

achja noch eins....
Kann ich eine Variable die mit ihrem Namen in einer anderen Variable hinterlegt ist eigentlich überhaupt global deklarieren?

Code: Select all
$tmp_name = variable1;
global $tmp_name;
Print $$tmp_name;


wie bekomme ich jetzt den Namen der in $tmp_name steckt Global?

Ich hoffe Ihr versteht was ich meine , es ist früh am Morgen :wink:
User avatar
Makconner
 
Posts: 153
Joined: 14. February 2006 16:00

Postby Makconner » 15. February 2006 09:31

Mit anderen Worten wenn alle Variablen den selben Namen haben erstellt php dieses array $_POST['var']['index_nr'] in der Funktion.

Geht das auch wenn nur 50% der Variablen den selben Namen haben, können dann die 50% in diesem Array abgerufen werden?, also, ordnet der dann diese , sagen wir 10 Variablen von 0-9 in das ayyar? obwohl noch andere Variablen mit völlig anderen Namen übergeben wurden?
User avatar
Makconner
 
Posts: 153
Joined: 14. February 2006 16:00

Postby Knight1 » 15. February 2006 09:58

Makconner wrote:Werden alle Variablen bei der Übergabe von einer Seite auf die andere grundsätzlich in diesem Array gespeichert?

Code: Select all
$_GET['var']['index_nr'] oder $_POST['var']['index_nr']


kann ich jetzt etwa IMMER auf das array zurückgreifen ohne die Namen zu kennen?


Ich gehe jetzt mal davon aus dass Du die Variablen von einem Formular bekommst.

Je nachdem welche Methode Du in dem Attribut method="" im einleitenden form-Tag angibst, also GET oder POST, werden dann die Namen der Formularelemte als Elemente der Arrays $_GET oder $_POST in PHP nutzbar.

Wenn Du also Formular wie folgendes Beispiel hast

Code: Select all
<html>
<body>
<form action="formularverarbeitung.php" method="GET">
<input type="text" name="eingabefeld1"><br>
<input type="text" name="eingabefeld2">
</form>
</body>
</html>


werden Dir in der PHP-Datei "formularverarbeitung.php" zwei $_GET-Elemente zur Verfügung stehen.
Und zwar einmal
Code: Select all
$_GET['eingabefeld1']

und
Code: Select all
$_GET['eingabefeld2']


Hast Du ein Formluar wie folgendes:

Code: Select all
<html>
<body>
<form action="formularverarbeitung.php" method="POST">
<input type="text" name="eingabefeld1"><br>
<input type="text" name="eingabefeld2">
</form>
</body>
</html>


Dann werden die Werte der beiden Eingabefelder in folgendem Array zur Vefügung stehen:

Code: Select all
$_POST['eingabefeld1']

und
Code: Select all
$_POST['eingabefeld2']


Wenn Du jetzt allerdings hingehst und nennst die Eingabefelder folgendermaßen:

Code: Select all
<html>
<body>
<form action="formularverarbeitung.php" method="POST">
<input type="text" name="eingabefeld[]"><br>
<input type="text" name="eingabefeld[]">
</form>
</body>
</html>


Dann hast in diesem Beispiel erstmal das Array $_POST['eingabefeld'].
Was sich aber unterscheidet ist die nummerische Hochzählung durch PHP.
Das Eingabefeld mit dem <br> hintendran wird dann über $_POST['eingabefeld']['0'] und das darunter wird über $_POST['eingabefeld']['1'] verfügbar sein.

Ich hoffe dass diese Erklärung hilfreich ist.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby Makconner » 15. February 2006 10:35

sehr gut.... ist das jetzt zur Sessionvariable geworden?

Code: Select all
$_GET['eingabefeld1']
User avatar
Makconner
 
Posts: 153
Joined: 14. February 2006 16:00

Postby M3g4Star » 15. February 2006 10:38

Neeeee .. 's is ne GET Variable wie der Name schon sagt ... geht also nach der Methode "get"

Sessions sehen so aus $_SESSION['bla']

dafür musst du aber ne Session starten .. etc.
User avatar
M3g4Star
 
Posts: 145
Joined: 25. January 2006 07:46
Location: München

Postby Makconner » 15. February 2006 10:42

Gut gut.. aber ich muss die variablen die ich übergeben habe nicht mehr global setzen da sie durch diese metode bekannt sind, richtig?
User avatar
Makconner
 
Posts: 153
Joined: 14. February 2006 16:00

Postby M3g4Star » 15. February 2006 11:00

Gut gut.. aber ich muss die variablen die ich übergeben habe nicht mehr global setzen da sie durch diese metode bekannt sind, richtig?


Hm ich glaub dir sind die Grundlagen nicht so bekannt.

Eine Get Variable wir durch ein Formular übergeben und ist somit nach absenden des Formulars auf der Seite formularverarbeitung.php unter dem Namen $_GET['Variablenname'] bekannt.
Sobald du diese Seite wieder verlässt udn kein Formular mehr abschickst gibt es sie nicht mehr.

Code: Select all
<form action="formularverarbeitung.php" method="GET">
<input type="text" name="eingabefeld[]"><br>
<input type="text" name="eingabefeld[]">
</form>


Bei einer Session schaut das anders aus. Die Session Variable ist solang bekannt wie die Session aktiv ist.

*hm*

nicht mehr global setzen
was wie wo willst du wieso "global setzen" :?:
User avatar
M3g4Star
 
Posts: 145
Joined: 25. January 2006 07:46
Location: München

Postby Knight1 » 15. February 2006 11:00

Makconner wrote:Gut gut.. aber ich muss die variablen die ich übergeben habe nicht mehr global setzen da sie durch diese metode bekannt sind, richtig?


Richtig.
Bei den Arrays $_GET und $_POST handelt es sich um sogenannte Superglobale Variablen.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests