MySQLi + Zoekformulier
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?
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 -
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.
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
Code (php)
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
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";
}
?>
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";
}
?>
Je hebt het over MySQLi en je gebruikt de oude mysql_real_escape_string()?
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.
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 -
Code (php)
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
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";
}
?>
$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";
}
?>
Hoe voer je je query uit?
Code (php)
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
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
}
}
?>
$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
}
}
?>
Echo eens $sql, dan weet je wat er uitgevoerd wordt.
select * from oc_product where 1 = 1 AND width='0' AND height='0' AND length='0'
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 -
Code (php)
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
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>
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>
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.
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.
Het probleem is dus opgelost, lijkt me?
Ja klopt, heel erg bedankt voor alle hulp en moeite. Het formulier werkt nu.