Zoekfunctie werkt niet
Had eerst een enkele submitfield en dat werkte prima maar wilde het ombouwen naar meerdere zoekopties.
wilde met array_key_exists kijken welke submit precies was gebruikt op basis van een uniek ID, en vervolgens bijbehorende query injection doen. Er komen geen resultaten naar boven, geen errors en ook niet $output
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
require ("test2.php");
require ("header.php");
require ("footer.php");
?>
<form method="post"> Zoek op:
<input type ="text" name="searchName" id="s_id_Name">
<input type ="submit" name="submit" value="Naam" id="id_name">      
<input type ="text" name="searchPlace" id="s_id_Place">
<input type ="submit" name="submitP" value="Plaats" id="id_place">      
<input type ="text" name="searchPhone" id="s_id_Phone">
<input type ="submit" name="submitT" value="Telefoonnummer" id="id_phone">     
<input type ="text" name="searchEmail" id="s_id_Email">
<input type ="submit" name="submitT" value="Email">
</form>
<table>
<thead>
<tr>
<th>
Voornaam
</th>
<th>
Achternaam
</th>
<th>
Straat
</th>
<th>
Plaats
</th>
<th>
Email
</th>
<th>
Telefoon
</th>
<th>
Bijlage
</th>
</tr>
</thead>
<?php
$output = NULL;
// zodra zoek op een zoekknop wordt gesubmit, maak connectie en stop input in variabelen voor injection
if(isset($_POST['submit'])){
$mysqli = $connection->db_connection;
$searchName = $_POST['searchName'];
$searchPlace = $_POST['searchPlace'];
$searchPhone = $_POST['searchPhone'];
// querys in variabelen stoppen
$searchResultName = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE p.voornaam LIKE '%".$searchName."%' && p.user_id = a.user_id AND p.user_id = c.user_id OR p.achternaam LIKE '%".$searchName."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
$searchResultPlace = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE a.plaats LIKE '%".$searchPlace."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
$searchResultPhone = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE c.telefoon LIKE '%".$searchPhone."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
$searchResultPhone = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE c.telefoon LIKE '%".$searchPhone."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
// controleer welke submit wordt gebruikt, inject de bijbehorende query, geef resultaat weer of error
if(array_key_exists('s_id_name',$_POST)){
if($searchResultName->num_rows > 0){
while($row = $searchResultName->fetch_assoc()) {
echo '<tr>
<td>'.$row['voornaam'].'</td>
<td>'.$row['achternaam'].'</td>
<td>'.$row['straat'].'</td>
<td>'.$row['plaats'].'</td>
<td>'.$row['email'].'</td>
<td>'.$row['telefoon'].'</td>
<td></td>
<td><a href="bewerken.php?user_id='.$row['user_id'].'">Bewerken</td>
<td><a href="verwijderen.php?user_id='.$row['user_id'].'">Verwijderen</td>
</tr>';
}
}else{
$output = "Geen resultaten gevonden";
}
}
if(array_key_exists('s_id_place',$_POST)){
if ($searchResultPlace->num_rows > 0){
while($row = $searchResultPlace->fetch_assoc()) {
echo '<tr>
<td>'.$row['voornaam'].'</td>
<td>'.$row['achternaam'].'</td>
<td>'.$row['straat'].'</td>
<td>'.$row['plaats'].'</td>
<td>'.$row['email'].'</td>
<td>'.$row['telefoon'].'</td>
<td></td>
<td><a href="bewerken.php?user_id='.$row['user_id'].'">Bewerken</td>
<td><a href="verwijderen.php?user_id='.$row['user_id'].'">Verwijderen</td>
</tr>';
}
}else{
$output = "Geen resultaten gevonden";
}
}
if(array_key_exists('s_id_phone',$_POST)){
if ($searchResultPhone->num_rows > 0){
while($row = $searchResultPhone->fetch_assoc()) {
echo '<tr>
<td>'.$row['voornaam'].'</td>
<td>'.$row['achternaam'].'</td>
<td>'.$row['straat'].'</td>
<td>'.$row['plaats'].'</td>
<td>'.$row['email'].'</td>
<td>'.$row['telefoon'].'</td>
<td></td>
<td><a href="bewerken.php?user_id='.$row['user_id'].'">Bewerken</td>
<td><a href="verwijderen.php?user_id='.$row['user_id'].'">Verwijderen</td>
</tr>';
}
}else{
$output = "Geen resultaten gevonden";
}
}
} else {
exit;
}
?>
</table>
<?php echo $output ?>
require ("test2.php");
require ("header.php");
require ("footer.php");
?>
<form method="post"> Zoek op:
<input type ="text" name="searchName" id="s_id_Name">
<input type ="submit" name="submit" value="Naam" id="id_name">      
<input type ="text" name="searchPlace" id="s_id_Place">
<input type ="submit" name="submitP" value="Plaats" id="id_place">      
<input type ="text" name="searchPhone" id="s_id_Phone">
<input type ="submit" name="submitT" value="Telefoonnummer" id="id_phone">     
<input type ="text" name="searchEmail" id="s_id_Email">
<input type ="submit" name="submitT" value="Email">
</form>
<table>
<thead>
<tr>
<th>
Voornaam
</th>
<th>
Achternaam
</th>
<th>
Straat
</th>
<th>
Plaats
</th>
<th>
</th>
<th>
Telefoon
</th>
<th>
Bijlage
</th>
</tr>
</thead>
<?php
$output = NULL;
// zodra zoek op een zoekknop wordt gesubmit, maak connectie en stop input in variabelen voor injection
if(isset($_POST['submit'])){
$mysqli = $connection->db_connection;
$searchName = $_POST['searchName'];
$searchPlace = $_POST['searchPlace'];
$searchPhone = $_POST['searchPhone'];
// querys in variabelen stoppen
$searchResultName = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE p.voornaam LIKE '%".$searchName."%' && p.user_id = a.user_id AND p.user_id = c.user_id OR p.achternaam LIKE '%".$searchName."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
$searchResultPlace = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE a.plaats LIKE '%".$searchPlace."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
$searchResultPhone = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE c.telefoon LIKE '%".$searchPhone."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
$searchResultPhone = $mysqli->query("SELECT p.user_id, p.voornaam, p.achternaam, a.straat, a.plaats, c.email, c.telefoon FROM contactgegevens c, adresgegevens a, persoonsgegevens p WHERE c.telefoon LIKE '%".$searchPhone."%' && p.user_id = a.user_id AND p.user_id = c.user_id");
// controleer welke submit wordt gebruikt, inject de bijbehorende query, geef resultaat weer of error
if(array_key_exists('s_id_name',$_POST)){
if($searchResultName->num_rows > 0){
while($row = $searchResultName->fetch_assoc()) {
echo '<tr>
<td>'.$row['voornaam'].'</td>
<td>'.$row['achternaam'].'</td>
<td>'.$row['straat'].'</td>
<td>'.$row['plaats'].'</td>
<td>'.$row['email'].'</td>
<td>'.$row['telefoon'].'</td>
<td></td>
<td><a href="bewerken.php?user_id='.$row['user_id'].'">Bewerken</td>
<td><a href="verwijderen.php?user_id='.$row['user_id'].'">Verwijderen</td>
</tr>';
}
}else{
$output = "Geen resultaten gevonden";
}
}
if(array_key_exists('s_id_place',$_POST)){
if ($searchResultPlace->num_rows > 0){
while($row = $searchResultPlace->fetch_assoc()) {
echo '<tr>
<td>'.$row['voornaam'].'</td>
<td>'.$row['achternaam'].'</td>
<td>'.$row['straat'].'</td>
<td>'.$row['plaats'].'</td>
<td>'.$row['email'].'</td>
<td>'.$row['telefoon'].'</td>
<td></td>
<td><a href="bewerken.php?user_id='.$row['user_id'].'">Bewerken</td>
<td><a href="verwijderen.php?user_id='.$row['user_id'].'">Verwijderen</td>
</tr>';
}
}else{
$output = "Geen resultaten gevonden";
}
}
if(array_key_exists('s_id_phone',$_POST)){
if ($searchResultPhone->num_rows > 0){
while($row = $searchResultPhone->fetch_assoc()) {
echo '<tr>
<td>'.$row['voornaam'].'</td>
<td>'.$row['achternaam'].'</td>
<td>'.$row['straat'].'</td>
<td>'.$row['plaats'].'</td>
<td>'.$row['email'].'</td>
<td>'.$row['telefoon'].'</td>
<td></td>
<td><a href="bewerken.php?user_id='.$row['user_id'].'">Bewerken</td>
<td><a href="verwijderen.php?user_id='.$row['user_id'].'">Verwijderen</td>
</tr>';
}
}else{
$output = "Geen resultaten gevonden";
}
}
} else {
exit;
}
?>
</table>
<?php echo $output ?>
id="s_id_Name"
en vervolgens controleer je op
array_key_exists('s_id_name',$_POST)
Zie het verschil in hoofdletter.
if(isset($_POST['submit'])){
dus als een andere knop gebruikt is, dan kom je al niet verder....
Daarnaast: je voert wel 4x een query uit. Terwijl je de resultaten alleen maar van 1 wilt laten zien?
Ik zou ofwel gewoon 1 zoekterm pakken en die loslaten in 1 query op verschillende velden:
.. WHERE email like '%ivo%' or voornaam like '%ivo%' or telefoon like '%ivo%'
ofwel alles wat hetzelfde is in de query eenmalig noteren en dan dynamisch een WHERE erachter plakken.
Zelfde geldt voor je weergave van de resultaten: daar bouw je nu ook 3 of 3x dezelfde html-output: kies daar voor een resultset en geef dat weer.
dus $result = $resultNaam en dan de daarvoor eenmalig een blok html.
Als je nu de query aanpast omdat je ook de geslachten wilt ophalen, dan moet dat in 4voud. en daarna nog in 4voud voor het weergeven.
alternatief zou ook nog kunnen zijn dat je kijkt of iemand het zoekveld Email heeft ingevuld en dan daarop handelt
Dus iemand vult Email deels in en telefoon deels.
Dus wordt de query ... WHERE email like '%ivo%' OR/AND telefoon like '%0611%'
Denk dat je gewoon 1 submitknop moet maken en dat dat een hoop oplost
gebruik
Je wilt weten of er ge-POST is, en niet of er op een knop gedrukt is.
zoek eens op de naam "Jeannne d'Arc"
Keywords: Esacaping en SQL-injection
.