MySQLi + Zoekformulier

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

P R

P R

14/10/2014 20:20:53
Quote Anchor link
Helaas heb ik weinig verstand van MySQLi maar mijn OC website maakt hier gebruik van. Ik heb een zoekformulier via HTML met 4 dropdown menu’s en deze zijn alle 4 standaard ingevuld met diverse waardes. Nu is het de bedoeling dat wanneer ik op ‘zoek’ druk dat hij mijn data gaat op zoeken in mijn database en dan de resultaten weergeeft. Iemand die mij een duwtje in de goede richting kan geven?
 
PHP hulp

PHP hulp

28/12/2024 16:58:56
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 20:51:15
Quote Anchor link
Kijk eens naar LIKE en WHERE voor in de SQL:
http://www.w3schools.com/sql/sql_like.asp
http://www.w3schools.com/sql/sql_where.asp

Beide kan je goed gebruiken om in data te zoeken.
Gewijzigd op 14/10/2014 20:58:20 door - Ariën -
 
Aad B

Aad B

14/10/2014 21:01:52
Quote Anchor link
Je vangt de gekozen waarden op in een php script, het script dat in de HTML vermeld staat bij action="scriptnaam". In het php script bouw je SQL zoals Aar adviseert en vervolgens toon (echo) je de resultaten ook via datzelfde php script.
 
P R

P R

14/10/2014 21:17:53
Quote Anchor link
Bedankt voor je snelle reactie! Ik heb het even uitgeprobeerd maar dat is geloof ik niet helemaal waar ik naar op zoek ben. Graag zou ik willen dat wanneer ik op zoek druk dat er resultaten worden weergegeven die overeen komen met alle 4 de input velden. Dus stel ik selecteer uit mijn dropdown menu's:

Piet | Klaassen | 30 | Goes

Dan zouden er alleen resultaten moeten worden weergeven van alle Piet Klaassen die 30 jaar zijn uit Goes. Dat is een beetje het idee zeg maar.

/Edit:
Mijn excuus als ik niet alles begrijp maar ik ben helaas niet zo goed thuis hier in. Ik ga het nogmaals proberen!
Gewijzigd op 14/10/2014 21:21:50 door P R
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 21:26:19
Quote Anchor link
Deze query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT id, naam, achternaam, leeftijd, woonplaats FROM gebruikers WHERE naam='Piet' AND achternaam='Klaassen' AND leeftijd = 30 AND woonplaats='Goes'
 
P R

P R

14/10/2014 22:27:15
Quote Anchor link
Deze query werkt inderdaad goed wanneer ik hem uitvoer in mijn database. Nu is het zo dat ik dit wil implementeren in mij zoekfunctie. Ik had al een voorbeeld gevonden op internet maar wanneer ik die code uitvoer geeft hij geen resultaten weer. De code heb ik bijgesloten onderaan deze post.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
if (isset($_POST['search'])) {
    echo 'Search Result :<br />';

    $width = $_POST['width'];
    $height = $_POST['height'];
    $length = $_POST['length'];

    $width = mysql_real_escape_string($width);
    $height = mysql_real_escape_string($height);
    $length = mysql_real_escape_string($length);

    $where = "1=1";
    if ($width != "") {
        $where.=" AND width='$width'";
    }

    if ($height != "") {
        $where.=" AND height='$height'";
    }

    if ($length != "") {
        $where.=" AND length='$length'";
    }


    $sql = "select * from oc_product where $where";
}

?>
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 22:29:41
Quote Anchor link
Je hebt het over MySQLi en je gebruikt de oude mysql_real_escape_string()?
 
P R

P R

14/10/2014 22:33:38
Quote Anchor link
Dat klopt, maar deze code had ik gevonden. Nu wou ik dit aanpassen maar wanneer ik mysql_real_escape_string() naar mysqli_real_escape_string() aanpas vraagt hij om 2 parameters, vandaar dat ik weer aangepast heb. Om die reden heb ik mijzelf ook aangemeld om meer informatie en tips op te doen. Maar ik ben echt een leek op dit gebied, ik probeer door middel van google een hoop te achterhalen en uiteraard via dit forum.
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 22:47:33
Quote Anchor link
P R op 14/10/2014 22:33:38:
Dat klopt, maar deze code had ik gevonden. Nu wou ik dit aanpassen maar wanneer ik mysql_real_escape_string() naar mysqli_real_escape_string() aanpas vraagt hij om 2 parameters, vandaar dat ik weer aangepast heb.

Je kan de functies van MySQLi en het oude MySQL niet mixen met elkaar. je zult mysqli_real_escape_string() moeten gebruiken. In tegenstelling tot de oude functie gebruikt deze een extra parameter met de connectie die er gebruikt wordt.
Gewijzigd op 14/10/2014 22:48:08 door - Ariën -
 
P R

P R

14/10/2014 23:02:59
Quote Anchor link
Duidelijk. Als ik mijn $con erbij zet, dan is de error weg. Maar dan krijg ik nog geen resultaten wanneer ik op 'zoek' druk. Nu weet ik niet of de rest van de code wel in orde is?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$con
= mysqli_connect("localhost", "root", "", "opencart");

if (isset($_POST['search'])) {
    echo 'Search Result :<br />';

    $width = $_POST['width'];
    $height = $_POST['height'];
    $length = $_POST['length'];

    $width = mysqli_real_escape_string($con, $width);
    $height = mysqli_real_escape_string($con, $height);
    $length = mysqli_real_escape_string($con, $length);

    $where = "1=1";
    if ($width != "") {
        $where.=" AND width='$width'";
    }

    if ($height != "") {
        $where.=" AND height='$height'";
    }

    if ($length != "") {
        $where.=" AND length='$length'";
    }


    $sql = "select * from oc_product where $where";
}

?>
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 23:04:03
Quote Anchor link
Hoe voer je je query uit?
 
P R

P R

14/10/2014 23:08:22
Quote Anchor link
Heb nog even wat op google gezocht en krijg nu de product_id's weergegeven wanneer ik zoek. Dit is in ieder geval al meer als wat ik had. Dit is niet helemaal wat ik weergegeven wou hebben, maar het is een begin.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$con
= mysqli_connect("localhost", "root", "", "opencart");

if (isset($_POST['search'])) { //If the form's "Submit" button was clicked...
    echo 'Search Result :<br />';
    //Set variables to info posted from the form
    $width = $_POST['width'];
    $height = $_POST['height'];
    $length = $_POST['length'];
    //Escape the strings so they're safe to use in a MySQL query
    $width = mysqli_real_escape_string($con, $width);
    $height = mysqli_real_escape_string($con, $height);
    $length = mysqli_real_escape_string($con, $length);
    //Start building the query
    $where = " 1 = 1 ";
    if ($width != "") {  //If the user selected a width
        $where.=" AND width='$width'";  //Add a width specification to the query
    }
    if ($height != "") {  //If the user selected a height
        $where.=" AND height='$height'"; //Add a height specification to the query
    }
    if ($length != "") { //If the user selected a length
        $where.=" AND length='$length'"; //Add a length specification to the query
    }
    //If the user made all three selections, your query (essentially) would be like this example:
    //$sql = "select * from oc_product where 1=1 AND width='$width' AND height='$height' AND length='$length'";

    $sql = "select * from oc_product where $where";
    $rs = mysqli_query($con, $sql);
    while ($sar = mysqli_fetch_assoc($rs)) {  //For each 'mobile_name' in the database that matches the query
        echo '<br />' . $sar['product_id']; //Print a new line along with the value from 'mobile_name' field
    }
}

?>
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 23:10:02
Quote Anchor link
Echo eens $sql, dan weet je wat er uitgevoerd wordt.
 
P R

P R

14/10/2014 23:20:06
Quote Anchor link
Dan krijg ik de volgende uitkomst.

select * from oc_product where 1 = 1 AND width='0' AND height='0' AND length='0'
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 23:23:17
Quote Anchor link
vanwaar die 1 = 1? Je kan toch direct WHERE width=0 AND height=0 gebruiken?
Verder zijn single-quotes niet nodig voor getallen (integers) in een voorwaarde. Zie mijn cursieve deel.

Wat vul je in je POST-formulier in? Komen deze ook overeen?
Gewijzigd op 14/10/2014 23:25:05 door - Ariën -
 
P R

P R

14/10/2014 23:31:52
Quote Anchor link
De quotes zijn aangepast. Onderstaand mijn formulier.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<form name="frm" method="post">
    WIDTH
    <select name="width">
        <option value="">- - Select Width - -</option>
        <option value="0">0</option>
        <option value="200">200</option>
        <option value="250">250</option>
        <option value="300">300</option>
    </select>
    HEIGHT
    <select name="height">
        <option value="">- - Select Height - -</option>
        <option value="0">0</option>
        <option value="50">50</option>
        <option value="100">100</option>
        <option value="150">150</option>
    </select>
    LENGHT
    <select name="length">
        <option value="">- - Select Length - -</option>
        <option value="0">0</option>
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="30">30</option>
    </select>
    <input name="search" value="Search" type="submit" />
</form>
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 23:35:45
Quote Anchor link
Als ik deze query zie:
select * from oc_product where 1 = 1 AND width='0' AND height='0' AND length='0'

Dan vermoed ik gewoon dat er geen enkele record is met zowel lengte, width als height een waarde van 0.
Controleer dat eens in je database via phpMyAdmin of o.i.d.
 
P R

P R

14/10/2014 23:37:27
Quote Anchor link
Deze query geeft wel de resultaten weer. Als ik bijvoorbeeld mijn product_id laat weergeven laat hij wel diverse id's zien. Ik krijg, wanneer ik op zoeken druk, wel resultaten op mijn scherm.
 
- Ariën  -
Beheerder

- Ariën -

14/10/2014 23:39:37
Quote Anchor link
Het probleem is dus opgelost, lijkt me?
 
P R

P R

14/10/2014 23:41:00
Quote Anchor link
Ja klopt, heel erg bedankt voor alle hulp en moeite. Het formulier werkt nu.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.