login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Dropdown menu vanuit database: waarde onthouden

Offline Ruultje - 02/10/2009 01:31 (laatste wijziging 02/10/2009 01:33)
Avatar van RuultjeNieuw lid Ik heb in een formulier script diverse dropdownmenu's staan. Eentje die ik gewoon zelf heb ingevuld en een ander die toevoegt vanuit de database. Nu wordt dit formulier eerst bekeken voordat het verzonden wordt. Men ziet dan de resultaten op de pagina staan. Het formulier zelf is dan verborgen (resultaten staan als tekst). Nu onthoudt hij echter niet de waarde van het dropdown menu dat de resultaten haalt uit de database. Hoe krijg ik deze onthouden? Met een gewone dropdown lukt het mij dus wel. Maar niet die vanuit de database.

Bij deze moet dus ook onthouden worden wat verzonden is.
  1. echo "<option value=''>--- Select a product ---</option>";
  2.  
  3. $sql = "SELECT * FROM
  4. producten
  5. LEFT JOIN
  6. categorieen
  7. ON
  8. producten.categorie_id = categorieen.id";
  9.  
  10. $result = mysql_query($sql);
  11. $group = array();
  12. while ($row = mysql_fetch_assoc($result))
  13. {
  14. $group[$row['productgroep']][] = $row;
  15. }
  16. foreach ($group as $key => $values)
  17. {
  18. echo '<optgroup label="'.$key.'">';
  19. foreach ($values as $value)
  20. {
  21. echo '<option value="'.$value[$_POST['itemcode']].'selected="selected"">'.$value['configuratie'].'</option>';
  22. }
  23. echo '</optgroup>';
  24. }


De select:
  1. <select id="product_id" name="product_id" class="product" value="<?php echo isset($_POST['product_id']) ? htmlspecialchars($_POST['product_id']) : '' ?>">

Hij wordt dus in een andere database tabel (uiteindelijk toegevoegd) product_id is dan gekoppeld aan itemcode.

Maar dit werkt dus niet. Wanneer ik het formulier definitief verzend dan moet ik het product namelijk opnieuw invoeren.

Deze werkt wel:
  1. <select id="dienst" name="dienst" class="production" value="<?php echo isset($_POST['dienst']) ? htmlspecialchars($_POST['dienst']) : '' ?>">
  2. <option value="">--- Select shift ---</option>
  3. <option value="DD" <?php echo ( isset($_POST['dienst']) and $_POST['dienst'] == 'DD' ) ? ' selected="selected"' : '' ?>>DD</option>
  4. <option value="MD" <?php echo ( isset($_POST['dienst']) and $_POST['dienst'] == 'MD' ) ? ' selected="selected"' : '' ?>>MD</option>
  5. <option value="ND" <?php echo ( isset($_POST['dienst']) and $_POST['dienst'] == 'ND' ) ? ' selected="selected"' : '' ?>>ND</option>
  6. </select>


Wat moet ik anders doen in de bovenste dropdown?

10 antwoorden

Gesponsorde links
Offline ArieMedia - 02/10/2009 09:40
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Ik wil je graag helpen maar snap je vraag niet helemaal 
En je bent er bewust van dat je op regel 14 een array in je array gooit? (neem aan dat dit niet de bedoeling is?)
Offline jaronneke - 02/10/2009 11:39 (laatste wijziging 02/10/2009 11:47)
Avatar van jaronneke MySQL interesse
  1. <?php
  2.  
  3. $query = mysql_query("");
  4. $array = mysql_fetch_array($query);
  5.  
  6.  
  7. echo '<select name="keuze[]">';
  8. foreach ($array AS $key=>$value)
  9. {
  10. if ($value == $row['jeveldnaam'])
  11. {
  12. echo '<option selected="selected"></option>';
  13. }
  14. else
  15. {
  16. echo '<option></option>';
  17. }
  18. }
  19. echo '</select>';
  20. ?>
Offline Dani - 02/10/2009 13:49 (laatste wijziging 02/10/2009 13:57)
Avatar van Dani PHP gevorderde Waarom schrijven jullie selected="selected" ???
Het is gewoon selected en niet meer.

<option value="waarde" selected>waarde</option>

PS : hmm, hebben ze dat ook al aangepast, de nieuwe aanpassingen worden wel een beetje belachelijk.

Offline Ruultje - 02/10/2009 16:10
Avatar van Ruultje Nieuw lid
Arie2Zero schreef:
Ik wil je graag helpen maar snap je vraag niet helemaal 
En je bent er bewust van dat je op regel 14 een array in je array gooit? (neem aan dat dit niet de bedoeling is?)


Met de array, dit is inderdaad niet de bedoeling. Ga dit aanpassen.

Wat ik precies bedoel.. Iemand vult een formulier in. Wanneer men op verzenden klikt dan krijgt men te zien wat men heeft ingevuld. In tekst geschreven (via een table). Men kan deze dan goedkeuren (Toevoegen) of men kan terug naar het formulier (vorige pagina). In die table zelf is wel het juiste product te zien. Maar hij neemt hem niet mee in de dropdown. (formulier is op die pagina onzichtbaar).

Wanneer men dan daarna het formulier definitief verzendt dan is de dropdownbox leeg en moet opnieuw de waarde worden ingevuld.

Ik zou dus graag zien dat die waarde gewoon wordt meegenomen. Zonder dat men het opnieuw hoeft te selecteren. Het werkt wel wanneer ik handmatig een dropdownmenu maak maar niet wanneer de waarden uit de database komen.


Dus:
Formulier wordt ingevuld en men kan een keuze maken via een dropdown. Wanneer het formulier wordt verzonden dan moet deze keuze onthouden worden in die dropdown. De waarden (productnamen) zijn afkomstig van de database. Deze geselecteerde waarde wil hij dus niet onthouden wanneer ik het formulier verzend. De dropdown staan dan weer op de eerste keus. Dit geldt alleen voor het dropdown menu vanuit de database.

Ik hoop dat het duidelijk is. Anders zal ik het op een andere manier laten zien.

Het script van Jaronneke wil (nog) niet werken. Al ben ik daar nu wel mee aan het testen.

@Dani, wanneer ik selected pak dan selecteert hij ook automatisch de eerste waarde in de dropdown (dus na verzending).
Offline ArieMedia - 02/10/2009 16:26
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Je zou het product tijdelijk op kunnen slaan in een sessie. Daarna kan je gemakkelijk kunnen controleren welk product er geselecteerd is.

Ik neem aan dat je er dan wel uit kan komen... Maar voor de zekerheid
PHP.net: session

  1. // query ect al gedaan
  2. while($rij = mysql_fetch_assoc($res)) {
  3. if(isset($_SESSION['pid']) && $_SESSION['pid'] == $rij['id']) {
  4. // echo de optie met "selected"
  5. } else {
  6. // echo de optie zonder "selected"
  7. }
  8. }
Offline Ruultje - 02/10/2009 20:25 (laatste wijziging 02/10/2009 20:34)
Avatar van Ruultje Nieuw lid Het wil nog altijd niet werken. Misschien dat ik iets vergeten ben?

Ik heb nu dit:

  1. <select name="product_id[]" class="product">
  2. <?php
  3.  
  4. $sql = "SELECT * FROM
  5. producten
  6. LEFT JOIN
  7. categorieen
  8. ON
  9. producten.categorie_id = categorieen.id
  10. LEFT JOIN
  11. diensten
  12. ON
  13. producten.itemcode = diensten.product_id";
  14.  
  15. $res = mysql_query($sql);
  16. // query ect al gedaan
  17. while($rij = mysql_fetch_assoc($res)) {
  18. if(isset($_SESSION['product_id']) && $_SESSION['product_id'] == $rij['itemcode']) {
  19. // echo de optie met "selected"
  20. echo '<option '. $row['product_id'] .' selected>'. $rij['configuratie'] .'</option>';
  21. } else {
  22. // echo de optie zonder "selected"
  23. echo '<option '.$rij['itemcode'].'>'. $rij['configuratie'] .'</option>';
  24. }
  25. }
  26.  
  27.  
  28. ?>
  29. </select>
Offline Raze - 02/10/2009 20:29
Avatar van Raze PHP beginner
Dani schreef:
Waarom schrijven jullie selected="selected" ???
Het is gewoon selected en niet meer.


in xhtml worden de attributen niet geminimaliseerd

is gewoon valid ;)
Offline Ruultje - 03/10/2009 18:55 (laatste wijziging 03/10/2009 18:58)
Avatar van Ruultje Nieuw lid Ik heb van $_SESSION toch weer $_POST gemaakt en nu werkt het wel. Tenminste naar de eerste pagina toe (de controle pagina waarin men de resultaten eerst in tekst ziet). Je kent ze wel de formulieren die je doet invullen wanneer je eerst alles in tekst ziet staan voordat je ze definitief verstuurt.

Nou zit hier dus nog het probleem. Heb die dezelfde code gegeven. Maar hierin neemt hij het ingevoerde dus niet mee en vraagt hij om een product in te voeren.

Moet ik iets anders doen wanneer ik hem naar een tweede pagina verstuur zodat hij het herkent?

Ik heb de $_POST een echo meegegeven bovenaan de pagina. Voor product_id geeft hij dan de hele productnaam weer (die wel klopt) maar hij moet dus de product_id herkennen want dat is de waarde die verstuurd wordt.
Offline ArieMedia - 03/10/2009 20:41
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
heb je wel session_start(); gebruikt op beide pagina's anders doet hij het niet nee.
Offline Ruultje - 04/10/2009 03:43
Avatar van Ruultje Nieuw lid Ja heb ik gedaan.

Ik had deze zo staan:
echo '<option '.$rij['itemcode'].'>'. $rij['configuratie'] .'</option>';

Van configuratie heb ik itemcode gemaakt (itemcode wordt gelinkt aan product_id) en dat bleek de oplossing.

Het werkt verder ook wanneer ik de gegevens wil wijzigen (wanneer het in de database staat).

Heb ik alleen een volgend probleem. Ik heb een dropdown (ergens anders) die meerdere keren voorkomen. Dus in hetzelfde formulier kan dat zelfde dropdown menu vier keer voorkomen bijvoorbeeld. Hoe krijg ik hiervan de waarde onthouden? Werkt dat alleen met een array? Of is er een andere manier voor?
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.286s