login  Naam:   Wachtwoord: 
Registreer je!
 Forum

While loop in For loop?

Offline DRW - 26/10/2008 20:44 (laatste wijziging 26/10/2008 20:48)
Avatar van DRWNieuw lid Hoi,

Ik heb een FOR loop waarin ik een aantal vooraf gespecifieerde input velden toon (formulier). Als je op de voorgaande pagina dus 2 hebt ingevoerd, zal ie 2 SELECTS tonen met ieder een ander eindcijfer (bvb: name="Pop4" waarin 4 veranderd). De inhoud van deze SELECT word uitgelezen uit een MySQL DB en is bij elk SELECT veld hetzelfde, je hebt dus als het ware 2 SELECT velden, waar je dan 2 items kan kiezen, MAAR die mogen NIET hetzelfde zijn! Dit dacht ik te doen door een INPUT veld mee te geven als 'hidden' (met als naam bvb: 'name=itemid_1' zo tot 2 of meer) en value het eigelijk ITEM_ID uit de DB. Echter moet ik, om alle info juist uit de DB te halen, gebruik maken van een WHILE loop en dit IN een FOR loop.. Wat klaarblijkelijk toch wel wat problemen met zich meebrengt; het aantal SELECT velden word hierdoor verdubbelt en de waarden (options) zijn leeg. Ook maakt hij meerdere input velden aan dan mag, deze hebben dezelfde(!) naam maar verschillende value's. Om het te verduidelijken hieronder de code en de output code.

  1. <?
  2. for ($i=1; $i<=$item_amount; $i++)
  3. {
  4. $items = MySQL_Query("SELECT id, name, level FROM items WHERE level >='70' ORDER BY name ASC ") or die(mysql_error());
  5. $item_id = MySQL_Query("SELECT id, name, level FROM items WHERE level >='70' ORDER BY name ASC ") or die(mysql_error());
  6. ?>
  7. <tr height="20">
  8. <td align="center">
  9. <?
  10. while ($id = mysql_fetch_assoc($item_id)) {
  11. ?>
  12. <input type="hidden" name="item_id<? echo $i; ?>" value="<? echo $id['id']; ?>" />
  13. <?
  14. }
  15. ?>
  16. <input type="hidden" name="items_amount" value="<? echo $item_amount; ?>" />
  17. <SELECT class="input2" name="<? echo "item" .$i; ?>">
  18. <?
  19. while ($item = mysql_fetch_assoc($items)) {
  20. ?>
  21. <option value="<? echo $item['id']; ?>"><? echo $item['name']; ?></option>
  22. <?
  23. }
  24. ?>
  25. </SELECT>
  26. </td>
  27. </tr>
  28. <?
  29. }
  30. ?>


HTML Output:

  1. <tr height="20">
  2. <td align="center">
  3. <input type="hidden" name="item_id1" value="2" />
  4. <input type="hidden" name="item_id1" value="1" />
  5. <input type="hidden" name="items_amount" value="2" />
  6. <SELECT class="input2" name="item1">
  7. <option value="2">Tandeborstel</option>
  8. <option value="1">Schoendoos</option>
  9. </td>
  10.  
  11. </tr>
  12. <tr height="20">
  13. <td align="center">
  14. <input type="hidden" name="item_id2" value="2" />
  15. <input type="hidden" name="item_id2" value="1" />
  16. <input type="hidden" name="items_amount" value="2" />
  17. <SELECT class="input2" name="item2">
  18. <option value="2">Tandeborstel</option>
  19. <option value="1">Schoendoos</option>
  20. </td>
  21. </tr>


Zoals je kan zien in de laatste code toont ie 2x 3 Hidden fields, 1 teveel dus. Item_id1 en item_id2 dienen achteraf met elkaar vergeleken te worden.


Tgoh.. Ik ben blijkbaar slecht in iets uit te leggen als ik het zo terug lees..  

5 antwoorden

Gesponsorde links
Offline Kr4nKz1n - 27/10/2008 08:54 (laatste wijziging 27/10/2008 08:57)
Avatar van Kr4nKz1n Onbekend Het is 1 brok tekst. Maak wat meer gebruiker van enters, leest veel fijner.

Ik snap niet veel van je verhaal wat ik wel zie is dat je namen van de input velden erg irritant zijn.

  1. name="item_id[<? echo $i; ?>]"
Maak er zeg maar een array van.

Aanroepen met
  1. echo $_POST['item_id'][$???];

[/code]
Offline MiST - 27/10/2008 13:01
Avatar van MiST Lid Tip: Analyseer eens wat je juist doet. Je kan er ook geraken met maar 1 query uit te voeren. Nu voer je tweemaal dezelfde query uit. met welk doel? 
Offline DRW - 27/10/2008 22:37 (laatste wijziging 27/10/2008 22:38)
Avatar van DRW Nieuw lid Misschien dat jullie dit dat kunnen zeggen, en ik zo al een stukje verder raak.

  1. <?
  2. for ($i=1; $i<=$item_amount; $i++)
  3. {
  4. $item_id = MySQL_Query("SELECT id, item, level FROM items WHERE level >='70' ORDER BY name ASC ") or die(mysql_error());
  5.  
  6. $item = array();
  7. while ($id = mysql_fetch_assoc($item_id)) {
  8. $item[] = $id['id'];
  9. }
  10. ?>
  11. <input type="hidden" name="item_id<? echo $i; ?>" value="<? echo $item[$i]; ?>" />
  12. <?
  13. }
  14.  
  15. /*
  16.  
  17. Wat ik hier wil doen is alle gegevens van het item uit de DB
  18. halen (dmv while loop) en deze in een array stoppen.
  19. Daarna wil ik de inhoud van de array
  20. echo'en als hidden field. Elk hidden field heeft een unieke
  21. naam en de waarde van het hidden field zou de waarde van
  22. de overeenkomstige array moeten zijn.
  23. PHP neemt echter telkens de laatste waarde (van 1,2,3 neemt
  24. die 3) aan en toont enkel die waarde.
  25.  
  26. Ik krijg het wel voor elkaar met een foreach loop, maar
  27. dan toont die alle waarden.. Wat ik dus niet wil; $item[1]
  28. moet overeenkomen met item_id[1] enz..
  29.  
  30. */
  31. ?>
Offline Kr4nKz1n - 28/10/2008 08:40
Avatar van Kr4nKz1n Onbekend De comment leest veel minder makkelijk dan een gewone post. Dus voor de volgende keer. Alleen commenten wat bij het script hoort, dank u.

Er is geen variabele $item_id[1]. Dit is een query. Dus ik snap het nog niet helemaal.

De variabele $item[1] is het id van $item_id.
Offline DRW - 28/10/2008 14:49
Avatar van DRW Nieuw lid Excuseer, ik bedoel name="item_id<? echo $i; ?>" wat dan achteraf wel $_POST['item_id1'] o.i.d. zou moeten worden
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.258s