Seite 1 von 2
PHP: $nr=$nr+1
Verfasst: 21.04.2007 21:37
von leopittoni
Hallo
Ich gebe mit
eine Liste aus. Die Daten sind dabei die "value" von Textfeldern.
Nun muss aber der Wert "name" der Textfelder immer einen anderen Wert haben (um sie nachher weiterzugeben).
Das wollte ich so lösen:
Code: Alles auswählen
while ($row = mysql_fetch_array($miniliste))
{
$nr = $nr+1;
echo '<tr><td height="15" align="center"><input type="text" name="vorname' . $nr . '" size="15" maxlength="50"
value="'. $row['customers_firstname'] . '" /> <input type="text" name="nachname' . $nr . '" size="15" maxlength="50" value="' . $row['customers_lastname'] . '" /></td></tr>';
}
}
doch "name" ist immer "vorname2" bzw. "nachname2", die Nummern werden nicht grösser...
Wie könnte ich es sonst lösen?
Danke, Léo
Verfasst: 21.04.2007 21:49
von Pyramide
Wie sieht denn der ganze Code aus?
Verfasst: 21.04.2007 21:52
von leopittoni
Code: Alles auswählen
if(!$miniid3)
{
echo('');
}
else
{
$nr = "1";
while ($row = mysql_fetch_array($miniliste))
{
$nr = $nr+1;
echo '<tr><td height="15" align="center"><input type="text" name="vorname' . $nr . '" size="15" maxlength="50"
value="'. $row['customers_firstname'] . '" /> <input type="text" name="nachname' . $nr . '" size="15" maxlength="50" value="' . $row['customers_lastname'] . '" /></td></tr>';
}
}
}
Alles wird korrekt ausgegeben, nur $nr = $nr+1 bleibt bei der Ausgabe immer 2... Geht das den so nicht?
Léo
Verfasst: 21.04.2007 22:03
von Pyramide
Das bestätigt zwar die Vermutung meiner Glaskugel*, ist aber immer noch nicht der vollständige Code. Und da mich meine Glaskugel gerade darauf hinweist, hier noch der Link auf KB:datei.
*du hast zwei verschachtelte Schleifen, von denen die innere immer nur einmal ausgeführt wird und somit jedesmal wieder $nr=1 gesetzt wird
Verfasst: 21.04.2007 22:19
von leopittoni
Hier mal der PHP-Teil (Ausschnitt) im HTML:
Code: Alles auswählen
<?php
//db-abfrage
$db = mysql_connect("localhost","dbminiadmin","1karTe");
mysql_select_db("mini-shop");
$miniid = "SELECT customers_id
FROM einsatz WHERE datum = '$datum'";
$miniid2 = mysql_query($miniid) OR die(mysql_error());
while($rowsa = mysql_fetch_row($miniid2))
{
$miniid3 = $rowsa[0];
$einsatz = "SELECT customers_firstname, customers_lastname
FROM customers WHERE customers_id = $miniid3 ORDER BY customers_firstname ASC";
$miniliste = mysql_query($einsatz);
if(!$miniid3)
{
echo('');
}
else
{
$nr = "1";
while ($row = mysql_fetch_array($miniliste))
{
$nr = $nr+1;
echo '<tr><td height="15" align="center"><input type="text" name="vorname' . $nr . '" size="15" maxlength="50"
value="'. $row['customers_firstname'] . '" /> <input type="text" name="nachname' . $nr . '" size="15" maxlength="50" value="' . $row['customers_lastname'] . '" /></td></tr>';
}
}
}
?>
Stimmt. Da sins zwei verschachtelte while-schelfen... hmm, ob das korrekt ist... Léo
EDIT********
Es braucht wirklich zwei while-schleifen, da es in der ersten die user_id's abfragt und in der zweiten die Namen zur user_id's...
Eine andere Möglichkeit?
Danke, Léo!
Verfasst: 21.04.2007 22:47
von Miriam
Von hinten durch die Brust ins Auge...
Lies die IDs aus der Db aus, schreibe sie per WHILE Schleife in eine kommaseparierte Liste (oder String).
Frage mit Hilfe dieses Strings die Namen der User ab. Z.B. so:
select namen from table where ids in string
Die Rückgabe wertest Du wieder per WHILE aus, aber pass af, dass Du $nr nicht immer wieder mit 1 initialisierst. (wie eben geschehen)
Verfasst: 21.04.2007 22:52
von leopittoni
Ok, danke. Nur wie bring ich die Daten in einer "kommaseparierte" Liste?
Hab sowas noch nie gehört (und gemacht...)
Léo
Verfasst: 21.04.2007 23:01
von Ambience
mach mal aus $nr = $nr +1; einfach: $nr++; dann sollte es wie gewünscht funktionieren.
und bei $nr = "1"; machste die " weg, also $nr = 1;
Bin nun mal mein Rausch ausschlafen. Gute Nacht.
Ambience
Verfasst: 21.04.2007 23:08
von Miriam
Du hättest mal erst schlafen sollen....
$nr wird immer wieder 1 weil die WHILE Schleife immer wieder drüber rennt.
$nr sollte ganz oben initialisiert werden ... vor den Schleifen....
@Leo:
z.B. so:
$data = "start";
while ($rowsa = mysql_fetch_row($miniid2))
{
$data .= ",".$rowsa[0];
}
Nachher sieht $data so aus:
"start,id1,id2,id3"
Und dann sieht die Query so aus:
select namen from tabelle where id in ($data);
Verfasst: 22.04.2007 00:23
von Pyramide
Ähm, die doppelte Abfrage ist hier völlig überflüssig und der Code lässt sich um die hälfte kürzen.
Code: Alles auswählen
SELECT c.customers_firstname, c.customers_lastname
FROM einsatz e, customers c
WHERE c.customers_id = e.customers_id
e.datum='$datum'
ORDER BY customers_firstname ASC
Man prüft Daten übrigens normalerweise
bevor man sie in weiteren Abfragen verwendet. Gewöhn dir ausserdem endlich an, vernünftige Variablennamen zu verwenden und nicht einfach durchnumerierte. Als Quasi-Standard haben sich eingebürgert:
- $sql für den Query als String
- $result für das Ergebnis von mysql_query
- $row für das Ergebnis von mysql_fetch_assoc