search bar geen geen juiste resultaten
ALs beginnent programmeur ben ik op een klein probleempje gesteut omdat mijn zoekfunctie niet goed werkt.
Mijn zoekfunctie bestaat uit twee pagina's één is de zoekpage en twee is de resultpage.
Na testen maakt het niets uit wat ik intype in mijn zoekveld. Krijg de volgende resultaten.
name="q" Geeft alle resutaten uit de database
Sleutelend aan de '%%' kom ik er ook niet uit.
Wat doe ik fout?
Hieronder mijn code
Invulpage:
Quote:
<form name="reactie_formulier" method="GET" action="html/zoekresultaten.php">
<table class="table">
<tr>
<td><p>Voornaam:</p></td>
<td><input type="text" name="q" placeholder="Zoeken..." class="form-control" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Zoeken" /></td>
</tr>
</table>
</form>
<table class="table">
<tr>
<td><p>Voornaam:</p></td>
<td><input type="text" name="q" placeholder="Zoeken..." class="form-control" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Zoeken" /></td>
</tr>
</table>
</form>
resultpage
Quote:
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
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
<?php
if($_GET['q'] == 'Zoeken...') {
header('Location: zoeken.php');
}
if (isset($_GET['q']) && $_GET['q'] !== '') {
$con = mysqli_connect("localhost","root","");
mysqli_select_db($con, "manuela")or die(mysqli_error("$connection"));
$search = mysqli_query( $con, "SELECT * FROM klantenbestand WHERE voornaam LIKE '%$q%'");
$num_rows = mysqli_num_rows($search);
while ($row = mysqli_fetch_array($search)){
$voornaam = $row['voornaam'];
$achternaam = $row['achternaam'];
$telefoon = $row['telefoon'];
$opmerking = $row['opmerking'];
$adres = $row['adres'];
echo '<h3>' . $voornaam. ' ' . $achternaam . '</h3><p>' . $adres . ' ' . '<br />' . $telefoon . ' ' . '<br />' . $opmerking . '</p><br />';
}
} else {
echo 'Er zijn geen klanten gevonden.';
}
?>
if($_GET['q'] == 'Zoeken...') {
header('Location: zoeken.php');
}
if (isset($_GET['q']) && $_GET['q'] !== '') {
$con = mysqli_connect("localhost","root","");
mysqli_select_db($con, "manuela")or die(mysqli_error("$connection"));
$search = mysqli_query( $con, "SELECT * FROM klantenbestand WHERE voornaam LIKE '%$q%'");
$num_rows = mysqli_num_rows($search);
while ($row = mysqli_fetch_array($search)){
$voornaam = $row['voornaam'];
$achternaam = $row['achternaam'];
$telefoon = $row['telefoon'];
$opmerking = $row['opmerking'];
$adres = $row['adres'];
echo '<h3>' . $voornaam. ' ' . $achternaam . '</h3><p>' . $adres . ' ' . '<br />' . $telefoon . ' ' . '<br />' . $opmerking . '</p><br />';
}
} else {
echo 'Er zijn geen klanten gevonden.';
}
?>
Verder doe je nog niets aan foutcontrole, dus zelfs als de query hopeloos faalt, dan kom jij dat nooit te weten. De handleiding van mysqli legt uit hoe je kunt controleren of de query gelukt is, maar, wederom, PDO doet dat net even wat netter.
Had je de query al handmatig uitgeprobeerd via iets als phpmyadmin?
Bedankt voor je reactie. Wellicht dat ik nu de verkeerde manier hanteer, daar moet ik nog een gevoel bij creeren. de SQL infectie wil ik op later moment gaan toevoegen. Hier heb ik nog wat oefening voor nodig.
Bedankt voor deze feedback.
De query $search daarentegen doet het in de MySQL database gewoon.
Aangezien ik voor mijn gevoel de juiste linken aanmaak snap ik niet wat er verkeerd gaat.
Als ik '%$q%' gebruik krijg ik een 'unknown varibale q in ....' warning.
Gewijzigd op 21/10/2016 10:42:08 door Frank Thijssen
En dat klopt, want $q komt uit de lucht vallen. Je maakt hem nergens aan.
Dat moet je niet doen. Begin meteen met de juiste manier van werken, want nu leer je jezelf allerlei dingen aan die je straks weer moet afleren.
bv. met PDO komt jouw query er zo uit te zien; volledig veilig tegen injectie:
Code (php)
1
2
3
2
3
$sth = $dbh->prepare('SELECT * FROM klantenbestand WHERE voornaam LIKE :q');
$sth->execute(array(':q' => '%' . $_GET['q'] . '%'));
$red = $sth->fetchAll();
$sth->execute(array(':q' => '%' . $_GET['q'] . '%'));
$red = $sth->fetchAll();
Simpel; overzichtelijk en veilig.
In de searchpage schrijf ik de 'q' weg. Deze pak ik op op de resultpage. Maar gaat het dan daar fout?
Quote:
Correct!In de searchpage schrijf ik de 'q' weg. Deze pak ik op op de resultpage. Maar gaat het dan daar fout?
Wat je in je formulier in <input name="q"> in vult, komt niet standaard in $q naar in $_POST['q'] of $_GET['q'], afhankelijk van of je method post of get is.
Ik ga er vanuit dat als ik iets invul deze waarde de 'q' vertegenwoordigd en wordt doorgegeven naar mijn tweede page resultpage.
Ik ben nu even bezig geweest met de tips van boven.
Toegevoegd heb ik de code $sth van Pg Vincent. hieruit kom ik voor de volgende uitdaging, namelijk:
Quote:
. Deze warning gaf als antwoord dat ik de "Notice: Undefined variable: dbh in"
Quote:
moest veranderen in $sth = $dbh->prepare('SELECT
Quote:
. Maar dat hielp ook niet.$this->dbh
Het tweede punt: wat Vincent gaf was een voorbeeld, welke je zelf moet uitwerken dmv het maken van een databaseverbinding met PDO etc. Een vraag die ik wel heb, is dat je aangeeft dat "Notice: undefined variable: dbh" in zou houden dat je $this->dbh moet gebruiken. Waarom zou dat zo zijn/wie heeft je dat wijsgemaakt?
Puntje twee, zie link
http://stackoverflow.com/questions/21758055/undefined-variable-dbh-what-is-wrong-with-the-code-in-my-application.
Voor meer informatie over hoe je met PDO werkt kun je beter een tutorial doornemen. zie b.v. http://www.phptuts.nl/view/27/5/
maar ook de PHP handleiding, waar mijn stukje uit komt, bevat alle informatie die je nodig hebt (zij het in een wat minder hapklare-brokken formaat).
ga even aan de slag.
Frank Thijssen op 21/10/2016 13:25:51:
Dat gaat toch niet over jouw code? Dus is de aangedragen oplossing daar niet relevant.