search bar geen geen juiste resultaten
Hallo allemaal,
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:
resultpage
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.';
}
?>
Begin met lezen over "prepared statements" want je huidige script is bijzonder gevoelig voor SQL injectie en dat is echt gevaarlijk. Als je toch nog aan het leren bent dan zou ik ook meteen overstappen op PDO, dat is een wat meer gestandaardizeerde manier van werken met databases.
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?
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?
Hallo Pg Vincent,
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.
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
>> Als ik '%$q%' gebruik krijg ik een 'unknown varibale q in ....' warning.
En dat klopt, want $q komt uit de lucht vallen. Je maakt hem nergens aan.
En dat klopt, want $q komt uit de lucht vallen. Je maakt hem nergens aan.
"de SQL infectie wil ik op later moment gaan toevoegen. Hier heb ik nog wat oefening voor nodig."
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:
Simpel; overzichtelijk en veilig.
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.
>> <td><input type="text" name="q" placeholder="Zoeken..." class="form-control" /></td>
In de searchpage schrijf ik de 'q' weg. Deze pak ik op op de resultpage. Maar gaat het dan daar fout?
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.
Oke! die begrijp ik niet helemaal Ramon. nu gebruik ik de GET method met de input name='q'
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:
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 eerste punt is eenvoudig: eerder op de pagina controleer je netjes $_GET['q'], die moet je ook in je query gebruiken. $q bestaat niet.
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?
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?
Bedankt, ik ga er even naar kijken.
Puntje twee, zie link
http://stackoverflow.com/questions/21758055/undefined-variable-dbh-what-is-wrong-with-the-code-in-my-application.
Puntje twee, zie link
http://stackoverflow.com/questions/21758055/undefined-variable-dbh-what-is-wrong-with-the-code-in-my-application.
Wat ik postte was inderdaad alleen een voorbeeldje van hoe het er uit zou zien met PDO, geen copy/paste oplossing.
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).
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).
Mijn excuus, ik las het wellicht te letterlijk ;-p.
ga even aan de slag.
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.




