[php / mysql] een while in een loop uitvoeren

Pagina: 1
Acties:

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 22-08 10:29
Een beetje vage titel maar goed;

ik heb de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$query = mysql_query("SELECT * FROM drivers WHERE raceyear = '$year'") or die (mysql_error());
$rows = mysql_num_rows($query);
$i= "1";
echo "<table class=\"table\">";
while ($i <= $rows) {
echo"<tr><td>$i</td><td><td><select size=\"1\" name=\"$i\">";
while ($driver = mysql_fetch_object($query)) {
echo "<option>$driver->name</option>";
}
echo "</select></td></tr>";
++$i;
}
echo "</table>";


Hij laat netjes 22 cijfertjes zien(22 records in tabel),
maar tijdens de while loop
(while ($driver = mysql_fetch_object($query)) {
echo "<option>$driver->name</option>";
} )
laat hij het goede dropdown menu maar 1x zien:
http://robinaartsma.endoria.net/1.jpg

hoe kan ik ervoor zorgen dat hij het goede drop-down menu laat zien elke keer?

[ Voor 0% gewijzigd door codeweb op 20-10-2002 16:15 . Reden: ff wat weggehaald ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

:? :? Je doet 2x een fetch op dezelfde result-pointer. Natuurlijk gaat dat niet goed!

Kortom, wat ben je van plan met $var :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

En dit is ook lekker coden:

$i= "1";

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 22-08 10:29
@ drm : de $var = mysql_fetch_array($query); heb ik eruit gegooid...
maar dan doet hij ut nog maar 1 x

@bosmonster: wat maakt het uit, ben nog niet al te lang bezig met php, en het zal vanzelf wel beter worden....

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

codeweb schreef op 20 oktober 2002 @ 16:15:
@ drm : de $var = mysql_fetch_array($query); heb ik eruit gegooid...
maar dan doet hij ut nog maar 1 x

@bosmonster: wat maakt het uit, ben nog niet al te lang bezig met php, en het zal vanzelf wel beter worden....


Het maakt uit in de zin: Je hebt mazzel dat het werkt ;) Het onderscheid tussen verschillende datatypen is een van de eerste dingen die je je goed eigen moet maken imho. Al is het voor PHP als weak-typed taal weer wat minder belangrijk (ik vind het eerlijk gezegd nogal fout dat PHP dit blijkbaar gewoon goedkeurt en een soort van auto-cast doet.).

Maar wat betreft je probleem.. Na de eerste while is je resultset al doorlopen. Handiger is om in een losse variable de listbox samen te stellen en die gewoon te herhalen. :)

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

fouten mbt programeerstijl
Geen indenting.
$i= "1";
while met ($i) en $i++. Dit moet een for zijn.
als we een while met een variabele doen, behoor je te beginnen met $i=0, niet $i=1.

fouten in je code
je voert je while dubbel genest uit...

Localhost, sweet localhost


  • Knoetje
  • Registratie: Februari 2001
  • Laatst online: 16-01 13:39
???
while ($driver = mysql_fetch_object($query)) {
echo "<option>$driver->name</option>";
}

Wat wil je hier, ga je in een while voorwaarde $driver setten????
Dat moet een voorwaarde zijn. doe (de de rest van de while lus) tot een bepaalde waarde bereikt wordt.

($driver = mysql_fetch_object($query)) deze voldoet altijd, en dan gaat ie een keer de lus door. Dat is tenmminste wat je daar opgeeft ;)

Alles is najagen van wind...


  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 22-08 10:29
kvdveer schreef op 20 oktober 2002 @ 16:23:
als we een while met een variabele doen, behoor je te beginnen met $i=0, niet $i=1.
k vonnut wel handig; tijdens een f1 race start je van plaats 1 niet vanaf 0, dus ik d8 dat dit wel handig zou zijn (8>

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Knoetje schreef op 20 oktober 2002 @ 16:26:
???
while ($driver = mysql_fetch_object($query)) {
echo "<option>$driver->name</option>";
}

Wat wil je hier, ga je in een while voorwaarde $driver setten????
Dat moet een voorwaarde zijn. doe (de de rest van de while lus) tot een bepaalde waarde bereikt wordt.

($driver = mysql_fetch_object($query)) deze voldoet altijd, en dan gaat ie een keer de lus door. Dat is tenmminste wat je daar opgeeft ;)


while ($row = mysql_fetch_whatever ($rs))

is een hele gebruikelijke constructie hoor ;) Returnt namelijk false als je rows op zijn en dan houdt je while ook op.

Probleem i zoals ik al eerder zei dat deze je resultset maar 1x doorloopt. Iedere volgende while krijgt gelijk false terug en wordt dus niet eens doorlopen.

Maak dus de select-box met options van te voren en plak die in tabel-loop iedere keer in je code.

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 30-08 17:07
Wat je ook kan doen is eerst alle coureurs in een array te zetten. En deze array kun je dan in jouw 2e while lus printen.
Zo heb ik het ooit us opgelost.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//standaard db queries enzo
while($driver = mysql_fetch_object) {
  $driverArray[$driver->id] = $driver->name;
}
//even later
//en nu zoals ik uitlegde:

$i = (int) 1;
while ($i <= $rows) {
  echo "<SELECT NAME=\"driver[]\">\n";
  foreach($driverArray as $key => $value) {
    echo "<OPTION VALUE=\"$key\">$value</OPTION>\n";
  }
  echo "</SELECT>\n";
}
?>

  • codeweb
  • Registratie: Juni 2002
  • Laatst online: 22-08 10:29
ik heb

PHP:
1
2
3
4
5
6
$query = mysql_query("SELECT * FROM drivers WHERE raceyear = '$year'") or die (mysql_error()); 
echo "<select class=\"forminput\" size=\"1\" name=\"race\">";
while ($driver = mysql_fetch_object($query)) { 
echo "<option>$driver->name</option>"; 
} 
echo "</select>";

in een functie gezet, en die later aangeroepen, het werkt ook nog.

Allen bedankt :)

  • smaij
  • Registratie: November 2000
  • Laatst online: 11:26
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$query = mysql_query("SELECT * FROM drivers WHERE raceyear = '$year'") or die (mysql_error());

$aantalstartplaatsen = mysql_num_rows($query);

$i = 1; //maarja 0 is beter
while ($driver = mysql_fetch_array($query)) {
 $array_drivers[$i][veldnaam1] = $driver[veldnaam1];
 $array_drivers[$i][veldnaam2] = $driver[veldnaam2];
}

$i = 1;
echo "<table class=\"table\">";
while ($i <= $aantalstartplaatsen ) {
echo"<tr><td>$i</td><td><td><select size=\"1\" name=\"$i\">";
 $x = 1
 while ($x <= $aantalstartplaatsen) {
  echo "<option value=\"$x\">$array_drivers[$x][veldnaam1]</option>";
  $x++;
 }
echo "</select></td></tr>";
$i++;
}
echo "</table>";


NIET getest, maar zoiets.. en misschien for loopjes ipv while. neem het niet zomaar over maar kijk er ook is na!

[ edit ] WAAROM BEN IK ALTIJD TE LAAT :'( [ /edit ]

[ Voor 0% gewijzigd door smaij op 20-10-2002 17:10 . Reden: tja... GRRRRRRR ]


  • smaij
  • Registratie: November 2000
  • Laatst online: 11:26
codeweb schreef op 20 oktober 2002 @ 17:08:
ik heb

PHP:
1
2
3
4
5
6
$query = mysql_query("SELECT * FROM drivers WHERE raceyear = '$year'") or die (mysql_error()); 
echo "<select class=\"forminput\" size=\"1\" name=\"race\">";
while ($driver = mysql_fetch_object($query)) { 
echo "<option>$driver->name</option>"; 
} 
echo "</select>";

in een functie gezet, en die later aangeroepen, het werkt ook nog.

Allen bedankt :)
dit is dus wel het stomste wat je kan doen. dat betekent namelijk dat je zoveel queries laat aanroepen/uitvoeren dat er drivers zijn.. lijkt me geen oplossing!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Precies.. en zelfs het eerst in een array zetten en daar elke keer doorheen lopen is nog zonde van de tijd..

Maar elke keer de query uitvoeren en de resultset doorlopen voor iedere box is helemaal niet handig ;)

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 30-08 17:07
Bosmonster schreef op 20 oktober 2002 @ 17:17:
Precies.. en zelfs het eerst in een array zetten en daar elke keer doorheen lopen is nog zonde van de tijd..
Hoe wil je anders 22x het zelfde dropdown menutje op je scherm krijgen.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Sybr_E-N schreef op 20 oktober 2002 @ 17:27:
[...]

Hoe wil je anders 22x het zelfde dropdown menutje op je scherm krijgen.


Eerst de html genereren en die gewoon in de loop plakken ;)

Dat scheelt je 21x de array doorlopen ;)

  • smaij
  • Registratie: November 2000
  • Laatst online: 11:26
Bosmonster schreef op 20 oktober 2002 @ 17:30:

[...]


Eerst de html genereren en die gewoon in de loop plakken ;)

Dat scheelt je 21x de array doorlopen ;)
Waar ook. :P ach ja, baas boven baas :D
Pagina: 1