Entwickler-Ecke

Programmiersprachen (Server) - Variable als Parameter


Dude566 - Di 12.04.11 20:51
Titel: Variable als Parameter
Hallo Leute,

ich arbeite an einem für meine Verhältnisse etwas größeren Projekt und habe ein Problem das ich nicht lösen kann.

Ich möchte in einer Tabelle alle Nutzer meiner Seite auflisten und dann natürlich auch einen Link zu ihrer Seite in der Tabelle anzeigen.
Gespeichert sind die Nutzerdaten in $user, was ein zweidimensionales Array ist, also z.B. den Namen des 5. Benutzers mit:
$user[4]['name']

Jetzt habe ich aber Probleme bei dem Link in meiner Tabelle, der Name des Links wird richtig angezeigt, jedoch der Teil wo die Variable (Benutzername) als Parameter für "action" greifen sollte bleibt leer. :gruebel:

Hier mal ein Schnipsel:

Quelltext
1:
2:
3:
for($i = 0; $i <= count($user) - 1; $i++) {
  echo('<tr><td>'.$user[$i]['id'].'</td><td><a href="gallery.php?action="'.$user[$i]['name'].'">'.$user[$i]['name'].'</a></td></tr>');
}


Ich hoffe es ist klar, was nicht funktioniert und ihr könnt mir helfen.

Schönen Gruß,
Dude566

Edit: Code abgeändert.


Moderiert von user profile iconChristian S.: Topic aus Delphi4PHP-Technologien verschoben am So 15.07.2012 um 13:10


Delete - Di 12.04.11 22:23

Hast du denn eine Ausgabe bei
echo $user[0]['name'].


Dude566 - Di 12.04.11 22:46

Ja, denn hinten beim Linktext, also dem Text zwischen den Link-Tags funktioniert es ja.


ub60 - Di 12.04.11 22:53

Liegt es daran?

Quelltext
1:
for($i = 0; $i <= count($user) - 1; $i++)                    

ub60


Dude566 - Di 12.04.11 23:07

Ändert leider auch nichts an dem Fehler. :nixweiss:


Bergmann89 - Di 12.04.11 23:55

Hey,

versuch mal das ganze in einer Variable zwischen zu speichern. Un schreibt man die Hochkommas nicht normalerweiße mit \"?
€: da is auch eins zu viel drin, oder:

Quelltext
1:
<a href=\"gallery.php?action="'.$user[$i]['name'].'\">                    



MfG Bergmann.


Dude566 - Mi 13.04.11 08:31

Ich glaube das " hinter dem Action ist falsch, bin unterwegs und kann es nicht direkt testen. \ muss ich nicht verwenden da mein String ja mit ' begrenzt wird.


buster - Mi 13.04.11 10:35

Variablen innerhalb von Hochkommata werden nicht durch ihren Wert ersetzt... kuck mal hier [http://www.php-faq.de/q-stil-anfuehrungszeichen.html]

besser wäre also

Quelltext
1:
echo "<tr><td>" . $user[$i]['id'] . "</td><td><a href=\"gallery.php?action=" . $user[$i]['name'] . "\">" . $user[$i]['name'] . "</a></td></tr>";                    

oder gleich

Quelltext
1:
 ?><tr><td><?php echo $user[$i]['id']; ?></td><td><a href="gallery.php?action=<?php echo $user[$i]['name']; ?>"><?php echo $user[$i]['name']; ?></a></td></tr><?php                    

da kommen solche Probleme mit dem Interpreter gar nicht erst auf ;)

noch zwei kleine Tipps: bei $i sollte es doch reichen, wenn es kleiner als count($user) ist (spart das -1);
und das count($user) sollte man bereits vorher bestimmen und dann nur noch auf die Variable prüfen, da es ansonsten bei jedem Schleifendurchlauf neu ermittelt wird, was bei großen Datenmengen durchaus die Performance beeinflusst


jfheins - Mi 13.04.11 12:44

user profile iconub60 hat folgendes geschrieben Zum zitierten Posting springen:
Liegt es daran?

Quelltext
1:
for($i = 0; $i <= count($user) - 1; $i++)                    

ub60

Nein. das erste ist die Zuweisung, dann kommt der Vergleich und am Ende das Inkrement. Das ist schon richtig so. Zuweisung mit =

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube das " hinter dem Action ist falsch, bin unterwegs und kann es nicht direkt testen. \ muss ich nicht verwenden da mein String ja mit ' begrenzt wird.

Richtige Lösung ;) Das eine " ist zu viel, heraus kommt vermutlich ungültiger HTML Quelltext. Nächstes mal vielleicht auch da mal rein gucken ;)

user profile iconbuster hat folgendes geschrieben Zum zitierten Posting springen:
Variablen innerhalb von Hochkommata werden nicht durch ihren Wert ersetzt... kuck mal [url=http://www.php-faq.de/q-stil-anfuehrungszeichen.html]hier[/url]

Das stimmt zwar, hat aber mit dem Problem nichts zu tun. Die Variablen sind ja nicht in Hochkommata(') eingeschlossen. Das HTML Zeug ist in Hochkommata, damit man im HTML Code noch das " verwenden kann ohne escapen zu müssen.
user profile iconbuster hat folgendes geschrieben Zum zitierten Posting springen:
besser wäre also

Quelltext
1:
echo "<tr><td>" . $user[$i]['id'] . "</td><td><a href=\"gallery.php?action=" . $user[$i]['name'] . "\">" . $user[$i]['name'] . "</a></td></tr>";                    

oder gleich

Quelltext
1:
 ?><tr><td><?php echo $user[$i]['id']; ?></td><td><a href="gallery.php?action=<?php echo $user[$i]['name']; ?>"><?php echo $user[$i]['name']; ?></a></td></tr><?php                    

da kommen solche Probleme mit dem Interpreter gar nicht erst auf ;)

Zugegeben, "besser" ist subjektiv. Aber DAS DA fällt ganz bestimmt nicht in die Kategorie. Die erste Version verwendet " statt den ' was zur Folge hat, dass man im HTMl Code die " escapen muss. Der "Vorteil" dass in den " Variablen ersetzt werden, wird nicht genutzt. Stattdessen wird der String wieder zertrennt. Also im Grunde nur ein paar ' weggelassen und dafür gleich viele " und ein paar \ hinzugefügt.
Die zweite Variante ist bei viel HTML Code das Mittel der Wahl, aber hier imho nicht angebracht weil ebenfalls unübersichtlich.


buster - Mi 13.04.11 15:30

user profile iconjfheins hat folgendes geschrieben Zum zitierten Posting springen:
Zugegeben, "besser" ist subjektiv.

Stimmt... andersherum musst du ja das Hochkomma escapen ;) Ist sicher auch eine Frage der Gewohnheit, ich persönlich hab mit dem Escapen kein Problem. Da werden wohl beide Varianten Vor- und Nachteile haben, mir fallen bloß gerade keine ein.
Wobei double quoted strings ja noch mehr Escapesequenzen bieten. Hier [http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing] noch etwas mehr dazu...


Dude566 - Mi 13.04.11 16:05

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube das " hinter dem Action ist falsch, bin unterwegs und kann es nicht direkt testen. \ muss ich nicht verwenden da mein String ja mit ' begrenzt wird.


Habe es so korrigiert und jetzt funktioniert es, ich habe ja bewusst die Hochkommata verwendet um die Anführungszeichen für den Link verwenden zu können.

Das mit der Schleife werde ich auch noch abändern, danke! ;)