zoekresultaten uit database
Ik heb jullie hulp nodig bij het volgende.
Onderstaande script kan ik gegevns uit mijn database tonen. De zoekformulier bestaat uit de volgende 3 citreria:
Type, regio en plaats.
Wat wil ik:
- als alleen $type een waarde heeft en de rest niet dan moet hij alles tonen.
- al $type een waarde heeft en $regio ook een waarde , maar plaats niet dan moet hij alleen de rijen tonen die voldoen aan de waarde $type en $regio.
- en als alle 3 een waarde hebben dan slechts de rijen/gevens die voldoen aan alle drie waarden.
Ik heb met de AND en de OR functie gesprobeerd, maar het werkt niet.
bij de and toont hij niets tenzij alle $waarden ingevuld zijn en bij OR toont hij alles ook al geef een specifieke waarde aan $regio.
Wat kan/moet ik veranderen ana de onderstaande code?
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
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
<?php
$server = 'localhost';
$user = 'user';
$pass = 'pass';
$dbname = 'vacaturebronnen';
$type = $_POST['type'];
$regio = $_POST['regio'];
$plaats = $_POST['plaats'];
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' AND plaats='$plaats' ORDER BY 'naam'";
if($db = mysql_connect($server, $user, $pass))
{
$message = "";
if(mysql_select_db($dbname, $db))
{
$message .= "";
if($result = mysql_query($query, $db))
{
$message .= "";
}
else
{
$message .= "tabel kan niet geselecteerd worden.<\br>\n";
}
}
else
{
$message .= " Database $dbname niet gevonden.<\br>\n";
}
}
else
{
$message = "Verbinden met database is mislukt.<\br>\n";
}
echo "<table width='715' border='0' cellspacing='0' cellpadding='2' bgcolor='#ffffff' >\n";
echo "<tr>\n";
echo "<td width='90'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='60'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='110'></td>\n";//echo "<td widht='140'>Adres</td>\n"; dit zou adres weergeven in de kolom
echo "<td width='90'></td>\n";
echo "</tr>\n";
// alle cellen tussen <tr> (tabelrij) plaatsen zodat ze op een rij zijn
while(list($id, $type, $naam, $website, $regio, $postcode, $plaats, $adres, $telefoonnummer) = mysql_fetch_row($result))
{ echo "<table width='715' border='0' cellspacing='0' cellpadding='2' bgcolor='#Ffffff' style='table-layout:fixed' \n";
echo "<tr>\n";
echo "<td width='169'><FONT size='-2' color='#FE4D1B'/>$naam</FONT></td>\n";
echo "<td width='150'><FONT size='-2' color='#666666'/>$adres</FONT></td>\n";
echo "<td width='55'><FONT size='-2' color='#666666'/>$postcode</FONT></td>\n";
echo "<td width='74'><FONT size='-2' color='#666666'/>$plaats</FONT></td>\n";
echo "<td width='90'><FONT size='-2' color='#666666'/>$telefoonnummer</FONT></td>\n";
echo "<td width='178'><FONT size='-2' color='#666666'/>$website</FONT></td>\n";
echo "</td>\n";
echo "</tr>\n";
}
echo "</table>\n";
mysql_close($db);
?>
$server = 'localhost';
$user = 'user';
$pass = 'pass';
$dbname = 'vacaturebronnen';
$type = $_POST['type'];
$regio = $_POST['regio'];
$plaats = $_POST['plaats'];
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' AND plaats='$plaats' ORDER BY 'naam'";
if($db = mysql_connect($server, $user, $pass))
{
$message = "";
if(mysql_select_db($dbname, $db))
{
$message .= "";
if($result = mysql_query($query, $db))
{
$message .= "";
}
else
{
$message .= "tabel kan niet geselecteerd worden.<\br>\n";
}
}
else
{
$message .= " Database $dbname niet gevonden.<\br>\n";
}
}
else
{
$message = "Verbinden met database is mislukt.<\br>\n";
}
echo "<table width='715' border='0' cellspacing='0' cellpadding='2' bgcolor='#ffffff' >\n";
echo "<tr>\n";
echo "<td width='90'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='60'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='110'></td>\n";//echo "<td widht='140'>Adres</td>\n"; dit zou adres weergeven in de kolom
echo "<td width='90'></td>\n";
echo "</tr>\n";
// alle cellen tussen <tr> (tabelrij) plaatsen zodat ze op een rij zijn
while(list($id, $type, $naam, $website, $regio, $postcode, $plaats, $adres, $telefoonnummer) = mysql_fetch_row($result))
{ echo "<table width='715' border='0' cellspacing='0' cellpadding='2' bgcolor='#Ffffff' style='table-layout:fixed' \n";
echo "<tr>\n";
echo "<td width='169'><FONT size='-2' color='#FE4D1B'/>$naam</FONT></td>\n";
echo "<td width='150'><FONT size='-2' color='#666666'/>$adres</FONT></td>\n";
echo "<td width='55'><FONT size='-2' color='#666666'/>$postcode</FONT></td>\n";
echo "<td width='74'><FONT size='-2' color='#666666'/>$plaats</FONT></td>\n";
echo "<td width='90'><FONT size='-2' color='#666666'/>$telefoonnummer</FONT></td>\n";
echo "<td width='178'><FONT size='-2' color='#666666'/>$website</FONT></td>\n";
echo "</td>\n";
echo "</tr>\n";
}
echo "</table>\n";
mysql_close($db);
?>
Wachtwoord verwijderd[/modedit]
Gewijzigd op 08/06/2010 20:48:11 door Tom Beuckelaere
Ik zou beginnen met je wachtwoord eruit te halen. ;)
Verder is ook aan te raden om foutafhandeling in de bouwen, inputgegevens te controleren en sql-injection te voorkomen. Dit script is lek.
Het is aangeraden om eerst uw waarden te controleren tegen uw business rules. Dus op de vooropgestelde eisen die u zelf stelt:
Code (php)
1
2
3
2
3
- als alleen $type een waarde heeft en de rest niet dan moet hij alles tonen.
- al $type een waarde heeft en $regio ook een waarde , maar plaats niet dan moet hij alleen de rijen tonen die voldoen aan de waarde $type en $regio.
- en als alle 3 een waarde hebben dan slechts de rijen/gevens die voldoen aan alle drie waarden.
- al $type een waarde heeft en $regio ook een waarde , maar plaats niet dan moet hij alleen de rijen tonen die voldoen aan de waarde $type en $regio.
- en als alle 3 een waarde hebben dan slechts de rijen/gevens die voldoen aan alle drie waarden.
Dat doet u met behulp van verschillende if-statements. Op basis van het resultaat van deze statements kunt u een aangepaste query opbouwen.
Onderstaand nog een codevoorbeeld met het geen ik bedoel.
Opgelet: de controles zijn als voorbeeld en zijn zeker niet voldoende om alle waarden die ingevuld zijn veilig door te loodsen naar uw mysql query.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
//...
if($type != "" && ($regio == "" && $plaats == ""))
{
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' ORDER BY 'naam'";
}
elseif($type != "" && $regio != "" && $plaats == "")
{
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' ORDER BY 'naam'";
}
elseif($type != "" && $regio != "" && $plaats != "")
{
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' AND plaats='$plaats' ORDER BY 'naam'";
}
else
{
//wat moet er in dit geval gebeuren?
}
//...
?>
//...
if($type != "" && ($regio == "" && $plaats == ""))
{
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' ORDER BY 'naam'";
}
elseif($type != "" && $regio != "" && $plaats == "")
{
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' ORDER BY 'naam'";
}
elseif($type != "" && $regio != "" && $plaats != "")
{
$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' AND plaats='$plaats' ORDER BY 'naam'";
}
else
{
//wat moet er in dit geval gebeuren?
}
//...
?>
Gewijzigd op 08/06/2010 20:58:10 door Tom Beuckelaere
@Tom: Waarom ORDER BY 'naam'? Dat is tekst.
SanThe Nvt op 08/06/2010 21:06:28:
@Tom: Waarom ORDER BY 'naam'? Dat is tekst.
Ik heb de query gewoon overgenomen. Eerlijk gezegd niet verder gekeken wat er achteraan nog stond. Sorteren op tekst is inderdaad niet goed. Het is aan de topicstarter om ook hier even over na te denken ;).
ik zal inderdaad wat veiligheid moeten inbouwen. maar nu ging het in ieder geval om het werkend te krijgen. Ik ga de wijzgingen doorvoeren en testen.
wat betreft ORDER BY 'naam' is om de resultaten op alfabetische volgorde te sorteren.
tot dusver bedankt. Nu is de set aan mij om het uit te testen.
de volgende stap zal het inbouwen van veiligheid. ik zal eerst moetn uitzoeken hoe en wat ik daarvoor moet doen.
thnx