Ik heb een invoerpagina, waarin in een aantal velden invul.
ordernummer, klantnaam en aantal en een dropdown (machine_naam) met daarin een tiental keuze's

Deze worden vervolgens opgeslagen in de database.

Op een zoekpagina, wil ik die dropdown terug laten komen.
Je maakt dan een keuze in de dropdown, drukt op een knop zoeken en vervolgens laat hij alle record uit de database zien, die die keuze bevatten.

Het is gelukt om een dropdown te maken die de alle unieke waarden uit machine_naam laat zien.

Ik weet alleen niet zo goed hoe ik nu verder moet. Hoe kan ik er voor zorgen dat als ik op de zoek button druk, hij alleen die records (ordernummer, klantnaam, aantal en machine_naam) die de dropdown keuze bevatten laat zien.


Dit is het scriptje dat de db uitleest en in de dropdown stopt
 <?php
        require_once 'login.php';
        $conn = new mysqli($hn, $un, $pw, $db);
        if ($conn->connect_error) {
            die($conn->connect_error);
        }


        $db_select = mysqli_select_db($conn, "testdb");

        $result = mysqli_query($conn, "SELECT DISTINCT machine_naam FROM orders");
        ?>

                     <select name="name" class="form-control">
                    <option value= 0 >Selecteer machine</option>
                    <?php
                    while ($row = mysqli_fetch_array($result)) {
                        $machineselect = $row["machine_naam"];
                        echo "<option value=\"$machineselect\">" . $machineselect . '</option>';
                    }
                    
                    
                    ?>
</select>

Hallo Mario,

Je kunt in een SELECT query een WHERE gebruiken. Daarmee geef je de 'voorwaarden' aan waaraan de rij(en) moeten voldoen die de query als resultaat geef.

Dus als voorbeeld:

SELECT
naam
FROM
personen

Laat alle namen uit de tabel personen zien. Maar:

SELECT
naam
FROM
personen
WHERE geboortedatum = '1980-01-01'

Laat alleen de namen uit de tabel personen zien waarbij de persoon de geboortedatum 01-01-1980 moet hebben.

Uiteraard kun je dit ook met een $_POST (of $_GET) variabele doen vanuit je formulier. Door

SELECT
wat dan ook
FROM
tabelnaam
WHERE 
machine_naam = '".mysqli_real_escape_string($conn, $_POST['name'])."'
Bij dit soort zoek-/filterfunctionaliteit zou ik sterk de voorkeur geven aan de GET methode boven de POST methode. Een van de voordelen is dat je zoekopdrachten kunt bookmarken. Daarnaast kun je pagina's ongestraft verversen of door je historie heenbladeren zonder vervelende "page has expired" meldingen die je doorgaans bij POST hebt.

Zoals Ramon hierboven aangeeft zul je je zoek/filterquery handmatig moeten opbouwen op grond van $_GET (of $_POST) parameters. Mogelijk heb je iets aan dit eerder geplaatse voorbeeld.

Nog wel enkele (andere) kanttekeningen bij je code:
- je gebruik nu de object georiënteerde en procedurele notatie van MySQLi-functies, gebruik een van de twee (waarbij de OOP variant waarschijnlijk de voorkeur verdient)
- je gebruikt in je query concrete machinenamen, is je database wel goed opgezet / uitgenormaliseerd dan? ik zou in een dropdown eigenlijk een machine-id verwachten, geen machinenaam; indien je je database opzet met verbanden tussen tabellen (een echte relationele database dus) kun je veel efficiëntere (zoek)queries schrijven en kun je de kloppendheid van de data in je database veel betere garanderen
Bedankt voor jullie reacties!
Het is me gelukt!

@ thomas
Kan je me misschien uitleggen wat je bedoeld met object georiënteerde en procedurele notatie?
En welke gebruik je waarvoor?

En wat betreft je opmerkingen over de database, hierin ben ik echt een absolute beginner. Weet je misschien een site of documentatie waarin dit uitgelegd wordt? ik zou hier graag meer over willen leren.
In PHP zijn er twee programmeer smaken: object georiënteerd en procedureel. Dit uit zich in verschillen in de syntax (de vorm) van code. Bij OOP (Object Oriented Programming) gebruik je klassen, objecten en methoden en is je applicatie anders gestructureerd dan bij een procedurele variant, waarbij alle code doorgaans op één plek achter elkaar staat. In het gebruik ziet OOP er onder andere uit als $object->methode().

Dat is wat je doet bij de creatie van je database connectie: je creëert een MySQLi object ($conn = new mysqli()) en vervolgens controleer je of de connectie is geslaagd door na te gaan of er fouten zijn opgetreden ($conn->connect_error).

Maar daarna roep je weer een trits mysqli_ functies aan, je maakt geen gebruik meer van $conn voor het aanroepen van methoden.

"Welke gebruik je waarvoor" is niet op voorhand te beantwoorden, dit hangt af van de organisatie van (de rest van) je code, het doel en de omvang hiervan etc.. Eenvoudige applicaties hoeven niet per se OOP opgezet te zijn, maar om meerdere redenen is het waarschijnlijk verstandiger om in ieder geval voor alle MySQLi-gerelateerde functionaliteit de object georiënteerde aanpak te gebruiken. PHP staat zo'n mengvorm van procedureel en OOP ook toe.

Verder klinkt het ook een beetje alsof je midden in een boek bent gaat lezen, maar de vraag is dan of je het verhaal nog begrijpt, als je begrijpt wat ik bedoel.

Reageren