zoeken in database
Ik heb 3 opties waarop gezocht kan worden.
optie 1: naam
optie 2: leeftijd
optie 3: plaats
We noemen ze even n/l/p
Als ik zoek in de database gebruik ik de $_GET value, zodat de link zoek.php?n=&l=&p=&action=Zoeken word.
Hoe krijg ik de mysql lijn nu goed? Dit heb ik nu:
Code (php)
1
$result = mysql_query(" SELECT * FROM profielen WHERE naam LIKE %n% && leeftijd LIKE %l% && plaats LIKE %p% ORDER BY id DESC LIMIT 5" );
AND en OR en && lijken niet te werken:S
Ik moet dus kunnen zoeken op een van de drie, 2 van de 3 of alle drie de opties, maar vreemd genoeg blijft de pagina leeg:(
Iemand een optie???
Owja, volgend probleempje: Hoe strip ik nu de leeftijd?? Want ze kunnen zoeken als 18-25/26-30/31-35 etc etc. Gewoon een $string = htmlspecialchars ($string, ENT_QUOTES);??
Voorbeeldje van hoe het zou kunnen. Je voegt als het ware filters toe naarmate er meer waarden ingevuld zijn. Verder kan dit ook zoeken op leeftijden 24-36 (waar hij BETWEEN 24 AND 36 van maakt)
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
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
<?php
$sql_atoms = array();
if(!empty($_GET['n']))
$sql_atoms[] = "naam LIKE '%" . mysql_real_escape_string($_GET['n']) . "%'";
if(!empty($_GET['l']))
if(preg_match('{^(\d+)\-(\d+)$}', $_GET['l'], $match))
$sql_atoms[] = "leeftijd BETWEEN " . $match[1] . " AND " . $match[2];
else
$sql_atoms[] = "leeftijd = " . intval($_GET['l']);
if(!empty($_GET['p']))
$sql_atoms[] = "plaats LIKE '%" . mysql_real_escape_string($_GET['p']) . "%'";
if(count($sql_atoms) == 0)
$sql_condition = '';
else
$sql_condition = 'WHERE ' . implode(' AND ', $sql_atoms);
$sql_query = "
SELECT
*
FROM
profielen
$sql_condition
ORDER BY
id DESC
LIMIT 5";
echo $sql_query;
?>
$sql_atoms = array();
if(!empty($_GET['n']))
$sql_atoms[] = "naam LIKE '%" . mysql_real_escape_string($_GET['n']) . "%'";
if(!empty($_GET['l']))
if(preg_match('{^(\d+)\-(\d+)$}', $_GET['l'], $match))
$sql_atoms[] = "leeftijd BETWEEN " . $match[1] . " AND " . $match[2];
else
$sql_atoms[] = "leeftijd = " . intval($_GET['l']);
if(!empty($_GET['p']))
$sql_atoms[] = "plaats LIKE '%" . mysql_real_escape_string($_GET['p']) . "%'";
if(count($sql_atoms) == 0)
$sql_condition = '';
else
$sql_condition = 'WHERE ' . implode(' AND ', $sql_atoms);
$sql_query = "
SELECT
*
FROM
profielen
$sql_condition
ORDER BY
id DESC
LIMIT 5";
echo $sql_query;
?>
Ik doe dat scheiden van leeftijd nu met preg_match omdat het dan met één regeltje code kan, maar je zou dat ook met explode kunnen doen.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Code (php)
1
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIKE '%rotterdam%'' at line 1
Code (php)
1
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN 18 AND 25' at line 1
Dit is nu de volledige code nu:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?
$sql_atoms = array();
if(!empty($_GET['naam']))
$sql_atoms[] = "naam LIKE '%" . mysql_real_escape_string($_GET['naam']) . "%'";
if(!empty($_GET['leeftijd']))
if(preg_match('{^(\d+)\-(\d+)$}', $_GET['leeftijd'], $match))
$sql_atoms[] = "leeftijd BETWEEN " . $match[1] . " AND " . $match[2];
else
$sql_atoms[] = "leeftijd = " . intval($_GET['leeftijd']);
if(!empty($_GET['plaats']))
$sql_atoms[] = "plaats LIKE '%" . mysql_real_escape_string($_GET['plaats']) . "%'";
if(count($sql_atoms) == 0)
$sql_condition = '';
else
$sql_condition = implode(' AND ', $sql_atoms);
if (isset($_GET['p'])) {
$allpageno = $_GET['p'];
} else {
$allpageno = 1;
} // if
$query = mysql_query("SELECT count(*) FROM profielen $sql_condition") or die(mysql_error());
$query_data = mysql_fetch_row($query);
$numrows = $query_data[0];
$rows_per_page = 24;
$column = 4;
$lastpage = ceil($numrows/$rows_per_page);
$allpageno = (int)$allpageno;
if ($allpageno > $lastpage) {
$allpageno = $lastpage;
} // if
if ($allpageno < 1) {
$allpageno = 1;
} // if
$limit = 'LIMIT ' .($allpageno - 1) * $rows_per_page .',' .$rows_per_page;
$query = "SELECT * FROM profielen $sql_condition";
$result = mysql_query($query);
//de teller op 0 zetten
$i=0;
?>
<div class="nav">
<?
if ($allpageno == 1) {
echo "<b> « ‹ </b>";
} else {
echo "<a href='1.htm' rel='countrycontainer'><b>«</b></a>";
$prevpage = $allpageno-1;
echo "<a href='$prevpage.htm' rel='countrycontainer'><b>‹</b></a>";
} // if
echo "<b> (Pagina $allpageno van de $lastpage ) </b>";
if ($allpageno == $lastpage) {
echo "<b> › » </b>";
} else {
$nextpage = $allpageno+1;
echo "<a href='$nextpage.htm' rel='countrycontainer'><b>›</b></a>";
echo "<a href='$lastpage.htm' rel='countrycontainer'><b>»</b></a>";
} // if
?></div>
<?
echo '<table>';
echo ' <tr>';
while($rij = mysql_fetch_assoc($result))
{
?>
<? $big = formatText1($rij["naam"]);?>
<td><a href="<?php echo $siteadres; ?>model/<? echo "$big"; ?>"><img src="<? echo "$big"; ?>/pictures/01.jpg" alt="klik voor mijn profiel" class="combi_image" /><br /><center><font color="black"><? echo "$big"; ?></font></center></a></td>
<?
$i++;
if ( $i % $column == 0 )
{
echo '</tr>';
echo '<tr>';
}
}
echo '</tr></table>';
?>
<div class="nav">
<?
if ($allpageno == 1) {
echo "<b> « ‹ </b>";
} else {
echo "<a href='1.htm' rel='countrycontainer'><b>«</b></a>";
$prevpage = $allpageno-1;
echo "<a href='$prevpage.htm' rel='countrycontainer'><b>‹</b></a>";
} // if
echo "<b> (Pagina $allpageno van de $lastpage ) </b>";
if ($allpageno == $lastpage) {
echo "<b> › » </b>";
} else {
$nextpage = $allpageno+1;
echo "<a href='$nextpage.htm' rel='countrycontainer'><b>›</b></a>";
echo "<a href='$lastpage.htm' rel='countrycontainer'><b>»</b></a>";
} // if
?></div>
$sql_atoms = array();
if(!empty($_GET['naam']))
$sql_atoms[] = "naam LIKE '%" . mysql_real_escape_string($_GET['naam']) . "%'";
if(!empty($_GET['leeftijd']))
if(preg_match('{^(\d+)\-(\d+)$}', $_GET['leeftijd'], $match))
$sql_atoms[] = "leeftijd BETWEEN " . $match[1] . " AND " . $match[2];
else
$sql_atoms[] = "leeftijd = " . intval($_GET['leeftijd']);
if(!empty($_GET['plaats']))
$sql_atoms[] = "plaats LIKE '%" . mysql_real_escape_string($_GET['plaats']) . "%'";
if(count($sql_atoms) == 0)
$sql_condition = '';
else
$sql_condition = implode(' AND ', $sql_atoms);
if (isset($_GET['p'])) {
$allpageno = $_GET['p'];
} else {
$allpageno = 1;
} // if
$query = mysql_query("SELECT count(*) FROM profielen $sql_condition") or die(mysql_error());
$query_data = mysql_fetch_row($query);
$numrows = $query_data[0];
$rows_per_page = 24;
$column = 4;
$lastpage = ceil($numrows/$rows_per_page);
$allpageno = (int)$allpageno;
if ($allpageno > $lastpage) {
$allpageno = $lastpage;
} // if
if ($allpageno < 1) {
$allpageno = 1;
} // if
$limit = 'LIMIT ' .($allpageno - 1) * $rows_per_page .',' .$rows_per_page;
$query = "SELECT * FROM profielen $sql_condition";
$result = mysql_query($query);
//de teller op 0 zetten
$i=0;
?>
<div class="nav">
<?
if ($allpageno == 1) {
echo "<b> « ‹ </b>";
} else {
echo "<a href='1.htm' rel='countrycontainer'><b>«</b></a>";
$prevpage = $allpageno-1;
echo "<a href='$prevpage.htm' rel='countrycontainer'><b>‹</b></a>";
} // if
echo "<b> (Pagina $allpageno van de $lastpage ) </b>";
if ($allpageno == $lastpage) {
echo "<b> › » </b>";
} else {
$nextpage = $allpageno+1;
echo "<a href='$nextpage.htm' rel='countrycontainer'><b>›</b></a>";
echo "<a href='$lastpage.htm' rel='countrycontainer'><b>»</b></a>";
} // if
?></div>
<?
echo '<table>';
echo ' <tr>';
while($rij = mysql_fetch_assoc($result))
{
?>
<? $big = formatText1($rij["naam"]);?>
<td><a href="<?php echo $siteadres; ?>model/<? echo "$big"; ?>"><img src="<? echo "$big"; ?>/pictures/01.jpg" alt="klik voor mijn profiel" class="combi_image" /><br /><center><font color="black"><? echo "$big"; ?></font></center></a></td>
<?
$i++;
if ( $i % $column == 0 )
{
echo '</tr>';
echo '<tr>';
}
}
echo '</tr></table>';
?>
<div class="nav">
<?
if ($allpageno == 1) {
echo "<b> « ‹ </b>";
} else {
echo "<a href='1.htm' rel='countrycontainer'><b>«</b></a>";
$prevpage = $allpageno-1;
echo "<a href='$prevpage.htm' rel='countrycontainer'><b>‹</b></a>";
} // if
echo "<b> (Pagina $allpageno van de $lastpage ) </b>";
if ($allpageno == $lastpage) {
echo "<b> › » </b>";
} else {
$nextpage = $allpageno+1;
echo "<a href='$nextpage.htm' rel='countrycontainer'><b>›</b></a>";
echo "<a href='$lastpage.htm' rel='countrycontainer'><b>»</b></a>";
} // if
?></div>
via de .htaccess is de ?p= veranderd in *.htm en $big word uit een functie gehaald (via string replace).
Sorry voor de groote lap scripttext maar ziet iemand wat ik fout doe??:S
Je mist (ik ook trouwens) "WHERE" in de query. Ik zal m'n script hierboven even fixen, het enige wat zou moeten gebeuren is WHERE voor de implode-aanroep zetten.
Thnx, probleem zelf ook geglijk even gefixed en het werkt:).. nu nog even seo klaar maken, en het is weer in orde:).. thnx voor de hulp:)