Search script
Ik ben bezig met een zoek functie en de bedoeling is er meerderen velden zijn waarop ik kan zoeken in de database. Een hiervan is auteur en de 2de is titel. Als ik alleen op auteur zoek (zie script hier onder) gaat het perfect.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
if(isset($_GET['zoekauteur'])) {
$veld = mysql_real_escape_string($_GET['auteur_search']);
}
$veld = quote_smart($_POST["auteur_search"]);
$result = mysql_query("SELECT * FROM bestanden WHERE auteur LIKE '".$veld."'");
$num_rows = mysql_num_rows($result);
$veld = mysql_real_escape_string($_GET['auteur_search']);
}
$veld = quote_smart($_POST["auteur_search"]);
$result = mysql_query("SELECT * FROM bestanden WHERE auteur LIKE '".$veld."'");
$num_rows = mysql_num_rows($result);
Maar als ik meerderen opties inzet dan doe ik iets verkeerd alleen ik weet niet wat... (zie script hier onder).
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
if(isset($_GET['zoekauteur'])) {
$veld = mysql_real_escape_string($_GET['auteur_search']);
}
if(isset($_GET['zoektitel'])) {
$veld2 = mysql_real_escape_string($_GET['titel_search']);
}
$veld = quote_smart($_POST["auteur_search"]);
$veld2 = quote_smart($_POST["titel_search"]);
$result = mysql_query("SELECT * FROM bestanden WHERE (auteur LIKE '".$veld."' AND titel LIKE '".$veld2."')");
$num_rows = mysql_num_rows($result);
$veld = mysql_real_escape_string($_GET['auteur_search']);
}
if(isset($_GET['zoektitel'])) {
$veld2 = mysql_real_escape_string($_GET['titel_search']);
}
$veld = quote_smart($_POST["auteur_search"]);
$veld2 = quote_smart($_POST["titel_search"]);
$result = mysql_query("SELECT * FROM bestanden WHERE (auteur LIKE '".$veld."' AND titel LIKE '".$veld2."')");
$num_rows = mysql_num_rows($result);
Wat doe ik verkeerd al vast bedankt.
Gewijzigd op 29/04/2013 10:04:55 door Marco Hendriks
Het moet of in de titel staan, of in de auteur. Of in het Engels is OR, niet AND.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(isset($_GET['zoekauteur'])) {
$veld = mysql_real_escape_string($_GET['auteur_search']);
}
if(isset($_GET['zoektitel'])) {
$veld2 = mysql_real_escape_string($_GET['titel_search']);
}
$veld = quote_smart($_POST["auteur_search"]);
$veld2 = quote_smart($_POST["titel_search"]);
$result = mysql_query("SELECT * FROM bestanden WHERE (auteur LIKE '".$veld."' OR titel LIKE '".$veld2."')");
$num_rows = mysql_num_rows($result);
[\code]
$veld = mysql_real_escape_string($_GET['auteur_search']);
}
if(isset($_GET['zoektitel'])) {
$veld2 = mysql_real_escape_string($_GET['titel_search']);
}
$veld = quote_smart($_POST["auteur_search"]);
$veld2 = quote_smart($_POST["titel_search"]);
$result = mysql_query("SELECT * FROM bestanden WHERE (auteur LIKE '".$veld."' OR titel LIKE '".$veld2."')");
$num_rows = mysql_num_rows($result);
[\code]
Bestaat $_GET['zoekauteur']? Zo ja, gebruik dan $_GET['auteur_search']....?
Dat is dus al een andere variabele.
Je controleert ['zoektitel'] en ['zoekauteur'] om daarna $veld en $veld2 met iets geheel anders (een $_POST) te vullen.
Ik zou het zo doen, maar je variabelen kloppen waarschijnlijk niet. Jij hebt er 3.. en welke je nou wilt gebruiken...
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
34
35
36
37
38
39
40
41
42
43
44
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
34
35
36
37
38
39
40
41
42
43
44
<?php
// is er een auteur opgegeven?
if(isset($_GET['zoekauteur']))
{
$zoek['auteur'] = quote_smart($_GET['zoekauteur']);
}
// is er een titel opgegeven?
if(isset($_GET['zoektitel']))
{
$zoek['titel'] = quote_smart($_GET['zoektitel']);
}
// bouw query dynamisch op
foreach($zoek as $veld => $waarde)
{
$where[] = $veld . " LIKE '%" . $waarde . "%' ";
}
// stel query samen
$query = "SELECT auteur, titel, ..., ...
FROM bestanden
WHERE
" . implode(" OR ", $where) . "
ORDER BY auteur DESC
LIMIT 0, 30";
// toont de query. Is die goed? Comment. Zo niet, uncomment...
//echo $query;
// voer query uit, controleer etc
$result = mysql_query($query);
if($result !== false)
{
// query gelukt...
$num_rows = mysql_num_rows($result);
// kijk of er resultaten zijn
if($num_rows == 0)
{
// er zijn geen resultaten
}
}
?>
// is er een auteur opgegeven?
if(isset($_GET['zoekauteur']))
{
$zoek['auteur'] = quote_smart($_GET['zoekauteur']);
}
// is er een titel opgegeven?
if(isset($_GET['zoektitel']))
{
$zoek['titel'] = quote_smart($_GET['zoektitel']);
}
// bouw query dynamisch op
foreach($zoek as $veld => $waarde)
{
$where[] = $veld . " LIKE '%" . $waarde . "%' ";
}
// stel query samen
$query = "SELECT auteur, titel, ..., ...
FROM bestanden
WHERE
" . implode(" OR ", $where) . "
ORDER BY auteur DESC
LIMIT 0, 30";
// toont de query. Is die goed? Comment. Zo niet, uncomment...
//echo $query;
// voer query uit, controleer etc
$result = mysql_query($query);
if($result !== false)
{
// query gelukt...
$num_rows = mysql_num_rows($result);
// kijk of er resultaten zijn
if($num_rows == 0)
{
// er zijn geen resultaten
}
}
?>
Gewijzigd op 29/04/2013 10:20:11 door Eddy E
Je had gelijk er zaten een aantal dingen niet goed ik heb het veranderd en nu werkt het wel dank je.