search bar geen geen juiste resultaten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frank Thijssen

Frank Thijssen

21/10/2016 10:12:41
Quote Anchor link
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:
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>


resultpage
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.';
      }

?>
 
PHP hulp

PHP hulp

06/11/2024 00:07:54
 
Pg Vincent

Pg Vincent

21/10/2016 10:17:29
Quote Anchor link
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?
 
Frank Thijssen

Frank Thijssen

21/10/2016 10:40:05
Quote Anchor link
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.
Gewijzigd op 21/10/2016 10:42:08 door Frank Thijssen
 
Ben van Velzen

Ben van Velzen

21/10/2016 10:46:44
Quote Anchor link
>> 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.
 
Pg Vincent

Pg Vincent

21/10/2016 10:59:03
Quote Anchor link
"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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$sth = $dbh->prepare('SELECT * FROM klantenbestand WHERE voornaam LIKE :q');
$sth->execute(array(':q' => '%' . $_GET['q'] . '%'));
$red = $sth->fetchAll();


Simpel; overzichtelijk en veilig.
 
Frank Thijssen

Frank Thijssen

21/10/2016 11:00:35
Quote Anchor link
>> <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?
 
Ramon van Dongen

Ramon van Dongen

21/10/2016 11:18:03
Quote Anchor link
Quote:
In de searchpage schrijf ik de 'q' weg. Deze pak ik op op de resultpage. Maar gaat het dan daar fout?
Correct!

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.
 
Frank Thijssen

Frank Thijssen

21/10/2016 13:08:38
Quote Anchor link
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:
Quote:
"Notice: Undefined variable: dbh in"
. Deze warning gaf als antwoord dat ik de
Quote:
$sth = $dbh->prepare('SELECT
moest veranderen in
Quote:
$this->dbh
. Maar dat hielp ook niet.
 
Ben van Velzen

Ben van Velzen

21/10/2016 13:21:03
Quote Anchor link
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?
 
Frank Thijssen

Frank Thijssen

21/10/2016 13:25:51
 
Pg Vincent

Pg Vincent

21/10/2016 13:27:09
Quote Anchor link
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).
 
Frank Thijssen

Frank Thijssen

21/10/2016 13:32:23
Quote Anchor link
Mijn excuus, ik las het wellicht te letterlijk ;-p.

ga even aan de slag.
 
Ben van Velzen

Ben van Velzen

21/10/2016 13:41:46
Quote Anchor link


Dat gaat toch niet over jouw code? Dus is de aangedragen oplossing daar niet relevant.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.