nummer van for loop in attribuut zetten via while

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hoi
zie code
PHP: filename
1
2
3
4
5
6
7
8
9
10
11
$res= mysql_query("SELECT * FROM artikelen");
    while ($row = mysql_fetch_array($res))
    {
        for ($i = 1; $i <= 30; $i ++)
        $blaat = $blaat .$i;
        $foo = $foo .$i;
        echo '<tr>';
        echo "<td><input type='text' value='".$row{"blaat "}."' name='".$blaat ."' size='45' /></td>";
        echo "<td><input type='text' value='".$row{"foo"}."' name='".$foo."' size='2' /></td>";
        echo '</tr>';
    }


ik heb 30 velden in een database
nu wil ik deze er allemaal uithalen en in een input veld zetten
maar dan wil ik een nummer toevoegen achter de name attribuut van de input
maar het lukt niet met bovenstaande

elk ding haal ik er wel mee uit de database
maar het nummer toevoegen achter de $blaat en $prijs bij de name attribuut gaat niet goed

wat doe ik fout?

:X

bvd

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20:34
Het is me niet helemaal duidelijk wat je met die for-loop op regel 4 wil bereiken; die zorgt ervoor dat regel 5 dertig keer per rij wordt uitgevoerd. Verder worden $blaat en $foo nooit geïnitialiseerd. Het geheel gaat dus nooit op een zinnige manier werken.

Ik vermoed dat iets als dit de bedoeling was:
PHP:
1
2
3
4
5
6
7
8
for ($i = 1; $row = mysql_fetch_array($res); $i++)
{
    echo '<tr>';
    echo "<td><input type='text' value='$row{foo}' name='foo$i' /></td>"; 
    echo "<td><input type='text' value='$row{bar}' name='bar$i' /></td>"; 
    echo "<td><input type='text' value='$row{baz}' name='baz$i' /></td>"; 
    echo '</tr>';
}

Maar in plaats van unieke namen te generen voor de form-fields, kan je ook een naam die eindigt op [] gebruiken, dan bouwt PHP er zelf een array van. Dan wordt de code simpelweg zoiets:
PHP:
1
2
3
4
5
6
7
8
while ($row = mysql_fetch_array($res))
{
    echo '<tr>';
    echo "<td><input type='text' value='$row{foo}' name='foo[]' /></td>"; 
    echo "<td><input type='text' value='$row{bar}' name='bar[]' /></td>"; 
    echo "<td><input type='text' value='$row{baz}' name='baz[]' /></td>"; 
    echo '</tr>';
}

Voordeel is niet alleen dat het genereren van de form inputs simpeler wordt, maar ook het processen van de form data is simpeler, omdat je simpelweg een array in $_REQUEST['foo'] krijgt, in plaats van dat je zelf de data uit $_REQUEST['foo1'], $_REQUEST['foo2'] et cetera moet gaan halen.

Verder is het waarschijnlijk verstandig om de input values te escapen met htmlentities of htmlspecialchars tenzij je zeker weet dat je formvelden geen rare karakters bevatten.

En tenslotte wil ik je nog aanraden om niet om 4 uur 's nachts te gaan coden, want dat is (zoals nu ook blijkt) bepaald geen recept voor succes. ;)

Acties:
  • 0 Henk 'm!

  • mtsr
  • Registratie: December 2008
  • Laatst online: 25-07 11:13
Verwijderd schreef op donderdag 15 april 2010 @ 03:57:
PHP: filename
1
2
        for ($i = 1; $i <= 30; $i ++)
        $blaat = $blaat .$i;

wat doe ik fout?
twee dingen:
- een loop in een loop, dus voor elke regel uit je resultaat wordt de for loop een keer doorlopen;
- for loop zonder scope ({}), oftewel, alleen de volgende regel wordt 30 keer uitgevoerd.

Als je een loop met een index nodig hebt zijn er twee opties (wel meer, natuurlijk, maar even simpel):
- zelfs een index bijhouden (int ii = 0 voor je loop en ii++ in je loop);
- een for-loop gebruiken zoals in bovenstaande post.

Overigens een algemene tip:
Probeer voor iterators (de 'i' variabele) altijd meer dan 1 teken te gebruiken. Als je dan later een keer moet zoeken en vervangen, dan kan dat zonder dat je alle i's in een blok code vervangt, inclusief die in keywords.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ga eerst eens hier kijken Tips bij het debuggen!

Je zegt nu alleen ik probeer dit, maar het doet niet, maar geeft daarbij veel te weinig informatie. Print je variabelen eerst eens naar het scherm, en kijk dan of dat klopt met wat je verwacht. Is dat niet het geval, dan ga je kijken hoe het kan dat ze een andere waarde bevatten.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”