PHP: $nr=$nr+1

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

PHP: $nr=$nr+1

Beitrag von leopittoni »

Hallo

Ich gebe mit

Code: Alles auswählen

while ($row = mysql_fetch_array($miniliste)){
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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wie sieht denn der ganze Code aus?
KB:knigge
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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
KB:knigge
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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!
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Von hinten durch die Brust ins Auge... :P


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)
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

Ok, danke. Nur wie bring ich die Daten in einer "kommaseparierte" Liste?

Hab sowas noch nie gehört (und gemacht...)

Léo
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Du hättest mal erst schlafen sollen.... :P

$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);
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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
KB:knigge
Antworten

Zurück zu „Coding & Technik“