HTML 5 form met PHP while loop

    ICTscripters maakt gebruik van cookies. Door het gebruiken en browsen naar onze site gaat je automatisch akkoord met het gebruik van cookies. Klik hier voor meer informatie

    • HTML 5 form met PHP while loop

      Goedemiddag heren & Dames,

      ik ben bezig om voor mijn werkgever een form te maken om dakdragers, voetensets en dak koffers voor de juiste auto te tonen. Nu ben ik een concurrent tegen gekomen die daar een gebruiksvriendelijk systeem heeft ontwikkelt om op auto merk, model, type & jaartal en soort dak de juiste producten te tonen. (concurrent: dakdragerstore.com)

      Nu wil ik graag voor mijn werkgever dit systeem maken echter kom ik er niet uit hoe ik nu meerdere selectie velden kan voorzien van de juiste informatie. Zo wil ik bijvoorbeeld dat wanneer er bij merk:"BMW" er bij model:"" alleen de modellen van BMW worden getoond en dat wanneer er bij model"3-serie Touring"wordt geselecteerd erbij het selectie veld type en jaar alleen de mogelijkheden die daar bij horen worden getoond.

      Nu heb ik een getracht een begin te maken maar alle eerlijkheid gebied dat ondanks mijn zoektocht naar tutorials ik er niet uit kom en vandaar dat ik dit forum benader voor iemand die mij hierbij wilt helpen.

      Op dit moment bestaat mijn database uit meerdere tabellen:
      - dakdragers
      - dakkoffers
      - autos (hier staan alle merken, mogelijke modellen, types jaartallen en soort daken in)
      - Voetensets

      Waar loop ik op vast?
      - Database structuur voor deze producten
      - Meerdere select velden vullen met 1 while loop: merk, model, type_jaar, soort dak,
      - Hoe ik database data uit verschillende tabellen kan combineren in één html form



      PHP Source Code

      1. <?php include 'db-connect.php'; ?>
      2. <html lang = "en">
      3. <head>
      4. <title>website.nl - Dakdragers & Koffers</title>
      5. <meta charset = "UTF-8" />
      6. </head>
      7. <body>
      8. <div class="container_dakdrager_select">
      9. <div class="row">
      10. <div class="dakdrager_titel col-xs-12 col-sm-12 col-md-12 col-lg-12">
      11. <h3>Vind de juiste dakdragers voor uw auto</h3>
      12. </div>
      13. </div>
      14. <div class="row">
      15. <div class="snow-col-1 col-xs-6 col-sm-3 col-md-3 col-lg-3">
      16. <div class="informatie">
      17. <span class="filter_label">Automerk<br class="hidden-xs hidden-md"/></span>
      18. </div>
      19. <form id="form-dakdrager-select" name="form-dakdrager-select" method="post" action="">
      20. <select id="brand" class="">
      21. <?php
      22. $result = $conn->query("select * from cars where id = '$id'");
      23. echo "<select name='id'>";
      24. while ($row = $result->fetch_assoc()) {
      25. unset($id, $parent_id, $car_brand, $model, $type_year, $roof);
      26. $id = $row['id'];
      27. $parent_id = $row['parent_id'];
      28. $car_brand = $row['car_brand'];
      29. $model = $row['model'];
      30. $type_year = $row['type_year'];
      31. $roof = $row['roof'];
      32. echo '<option value="'.$id.'">'.$car_brand.'</option>';
      33. }
      34. echo "</select>";
      35. }?>
      36. <select id="model" class="model">
      37. <?php echo '<option value="'.$id.'">'.$model.'</option>';?>
      38. </select>
      39. <select id="type_and_year" class="">
      40. <option value="">- Selecteer -</option>
      41. <option value=""></option>
      42. </select>
      43. <select id="roof" class="">
      44. <option value="">- Selecteer -</option>
      45. <option value=""></option>
      46. </select>
      47. </form>
      48. </div>
      49. </div>
      50. </body>
      51. </html>
      Laat alles zien
    • Hoi Marijn,

      Allereerst welkom op het forum! ;)

      Om te doen wat jij wil doen zul je er meer dan alleen php bij moeten trekken. PHP is serverside en kan dus op zichzelf niet live je selectformulieren aanpassen. Dit kun je doen door Ajax te gebruiken.

      Een aantal relevante links hiervoor:

      Intro: w3schools.com/php/php_ajax_intro.asp

      Database: w3schools.com/php/php_ajax_database.asp

      Wat betreft je database structuur zul je een manier moeten verzinnen waarbij je makkelijk aan kan geven welke dragers bij welke auto's passen. Er vanuit gaande dat een drager op meerder auto's past zul je dat dus op een manier moeten opslaan in je database. Wellicht een derde tabel producten die JOINS met de rest van je tabellen om maar wat te roepen.

      Deze vraag snap ik even niet, maar dan kan aan mij liggen:

      Marijn wrote:


      - Meerdere select velden vullen met 1 while loop: merk, model, type_jaar, soort dak

      Je mag me ook altijd op Skype toevoegen. In dit soort specifieke gevallen is dat altijd makkelijker meekijken. Mijn skype is te vinden op mijn profiel.
      Met vriendelijke groet,

      Victor
      Beheerder ICTscripters
    • Beste Victor,

      bedankt voor uw reactie, ik zal in eerste instantie de links die u heeft gepost bekijken, maar ik heb een vermoeden dat dit een stuk gecompliceerder is dan ik op voorhand had gedacht.

      Uw aanname dat dak dragers op meerdere modellen en merken passen is correct. Ik dacht er in eerste instantie aan om met een parent_id te werken om zo dakdragers aan meerdere auto merken en modellen te kunnen koppelen.

      U geeft aan dat u mijn vraag niet begreep omtrent de while loop. Ik maakte een denk fout dat het mogelijk was om met een while loop meerdere dropdowns van informatie te voorzien, maar nu ik uw reactie lees werkt dat niet op die manier.

      Nogmaals bedankt voor uw reactie en ik ga er mee aan de slag.
    • Op een sidenote, het is wel te doen in PHP. Enkel een stuk minder gebruiksvriendelijk.
      Met behulp van Ajax kan je de forms automatisch laten updaten, wat zorgt voor een betere ervaring.

      Als je enkel in PHP wil blijven zul je een update knop moeten toepassen die elke keer de informatie die je al hebt pakt, dat vergelijkt met de database en vervolgens weer data teruggeeft die je kunt gebruiken om een nieuw formulier te maken. Deze stappen volg je net zo lang tot het einde van het formulier is bereikt, maar zoals je ziet moet je daarvoor een aantal keer de pagina herladen wat de userfriendliness negatief beïnvloed.

      Ik hoor wel of je eruit komt, succes! ;)

      Je mag overigens gewoon je zeggen!


      -Edit-

      Zie T.Nijborg's opmerking. Het gaat hier om een veel op veel relatie door middel van een relatietabel. Je hebt meerdere auto's en meerdere dakdragers die op verschillende auto's passen. (Oftewel meerdere auto's passen op meerdere dakdragers en andersom.)
      Met vriendelijke groet,

      Victor
      Beheerder ICTscripters

      Post werd 1x aangepast, het laatst door Victor ().

    • Martijn,

      Mijn advies voor het koppelen van dakdragers bij auto's zou zijn een extra relatie tabel te maken. Waarin je aangeeft per row, welke dakdrager op welke auto past. Die tabel qua velden ziet er dan ongeveer zo uit.

      Source Code

      1. id
      2. dakdrager_id
      3. auto_id
      Betreft Victor's antwoord zou het ook iets makkelijker door met javascript gewoon een http request te sturen naar een stukje php om de data op te halen. Ajax gaat meteen een stapje verder.
      PHP, JAVA, C#, JAVASCRIPT, HTML(5), CSS(3) developer.
      Vragen?! Stuur me gerust een prive bericht :) !
    • blog.chapagain.com.np/using-jq…-populate-selection-list/

      Nog een voorbeeld waarin een lijst met steden word weergeven op basis van het gekozen land.
      In het voorbeeld gebruiken ze een array, maar dit kan natuurlijk ook iets uit de dabase zijn.

      Verder kun je op in het idee van het voorbeeld te blijven, na het kiezen van een land de stad kiezen, die vervolgens weer een lijst kan tonen met wijken, gevolgd door straatnamen.

      Land > Stad > Wijk > Straatnaam.
      En dat kan natuurlijk ook zijn zoals je het nodig bent met:
      Merk > Model > Type & Jaartal > Dak
    • Bedankt voor jullie reacties, ik ben met een aantal voorbeelden die jullie hebben gegeven aan de slag gegaan.

      Ik ben nog niet echt bekend met het programmeer werk, dus vandaar dat ik zoveel vragen stel. Uiteraard probeer ik wel zoveel mogelijk zelf te zoeken voordat ik vragen stel.

      Nu gebruik ik voor de auto's op dit moment 1 tabel met volgende structuur:

      id - parent_id - brand - model - type_year - roof_1 - roof_2 - roof_3

      Er staan 1650 regels in waar van 39 verschillende auto merken.

      Nu had ik ergens gelezen dat ik met DISTINCT er voor kan zorgen dat er bij de dropdown voor Merken alleen unieke waarde worden getoond, echter toont hij nu alle regels in de database en staat er dus voor iedere regel een merk.

      Mijn doelstelling is dus dat er maar 39 merken getoond worden. Maar ik kom er niet helemaal uit met de DISTINCT functie.

      PHP Source Code

      1. Automerk:
      2. <select name="brand">
      3. <option value="">Selecteer uw merk</option>
      4. <?php
      5. $conn = new mysqli('localhost', 'localhost', 'password', 'db')
      6. or die ('Cannot connect to db');
      7. $result = $conn->query("select (DISTINCT brand), id, parent_id, model, type_year, roof from automerken");
      8. while ($row = $result->fetch_assoc()) {
      9. unset($id, $brand);
      10. $id = $row['id'];
      11. $parent_id = $row['parent_id'];
      12. $brand = $row['brand'];
      13. $model = $row['model'];
      14. $type_year = $row['type_year'];
      15. $roof = $row['roof'];
      16. echo '<option value="'.$id.'">'.$brand.'</option>';
      17. }
      18. ?>
      19. </select>
      Laat alles zien