Hallo PHPHulpers,

Ik ben bezig om een zoekscript te maken alleen het volgende probleem is dat ik maar op 1 veld kan zoeken.


    $sql="SELECT * FROM klantenregister WHERE voornaam LIKE '%".$zoekwoord."%'";


dit is mijn sql query.

wat ik wil is dat ik op voornaam of achternaam of voornaam+achternaam kan zoeken.
ik heb geen idee meer hoe ik dit moet maken.
Heb al rond gezocht op het internet maar niet iets bruikbaars kunnen vinden.

Ik hoop dat jullie mij een duwtje in de goede richting kunnen geven.

Groet,
Nick
Hetzelfde doen als je al deed in je eigen query, maar dan met het veld achternaam erbij.


$sql="SELECT * FROM klantenregister WHERE voornaam LIKE '%".$zoekwoord."%' OR achternaam LIKE '%".$zoekwoord."%'";
Ja dat heb ik inderdaad ook al gedaan maar als je dan voornaam en achternaam invult dan krijg je geen result terug.

en als je dat achternaam doet wel en alleen voor naam ook inderdaad maar als je die 2 dingen samenvoegt doet ie het niet en dat wil ik weten hoe je dat op lost.

maar bedankt voor het mee denken !
De vragensteller loopt vast op logica.

Als $zoekwoord een voornaam EN achternaam bevat, vind je niks op voornaam en niks op achternaam.
@Adoptive dat is inderdaad waar ik word niet veel wijzer van die full text search.

dan zou het zo iets moeten worden.

 $sql="SELECT * FROM klantenregister WHERE MATCH(voornaam,achternaam) AGAINST($zoekwoord)";


maar dan krijg ik mysqli_num_rows error...
Dat is niet echt heel duidelijk. Kan je wat concreter zijn? Want ik zie geen mysqli_num_rows in je code.

ip: Voer je query eerst een droog uit in je MySQL-client zoals phpMyAdmin
dit is mijn hele code

<h1>Zoeken</h1>
            
            <form action="" method="POST">
            <span class="formInput">zoek:</span><input type="text" name="zoekwoord" />

            <input type="submit" name="searchBtn" value="zoek!" />
            </form>
<?php
error_reporting(E_ALL);
	ini_set('display_errors',1);
include('config.php');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
    // Als een zoekwoord wordt ingegeven:
 
    if($_SERVER['REQUEST_METHOD']=="POST") {
    
  
if($zoekwoord = mysqli_real_escape_string($db,$_POST['zoekwoord'])){
  
    
    print '<p style="float:right;">Resultaten voor <b>'.$zoekwoord.'</b></p><br />';
    print '<p style="float:left;"><h1>Resultaat:</h1></p>';
    
    // Zoekfunctie:
    $sql="SELECT * FROM klantenregister WHERE MATCH(voornaam,achternaam) AGAINST($zoekwoord)";
   $result=mysqli_query($db,$sql);
   
   
    // Resultaten weergeven:   
   if(mysqli_num_rows($result)>=1){
    while($res = mysqli_fetch_assoc($result))
    {
    echo"<p>";
    echo $res['voornaam'];
    echo" ";
    echo $res['tussenvoegsel'];
    echo" ";
    echo $res['achternaam'];
    echo"</p>";
    
    echo $res['adres']; echo" ";echo $res['huisnummer'];
    echo"<br>";
    echo"-----------------------------------------------------";

   
   }
     }
   else{
       echo"Nothing to find!!";
   }
   }



else{
    echo"Wat jammer nou er is niks gevonden, hoe kan dat?";
    }}

    
   
   
   
    

?>


Zorg voor goede foutafhandeling, dan had je die mysql_num-rows() melding nooit kunnen krijgen. En voer je query ook eens droog uit, zoals ik in mijn edit van net beschreef.


if($zoekwoord = mysqli_real_escape_string($db,$_POST['zoekwoord'])){

Dit klopt ook niet helemaal. mysqli_real_escape_string hoort in je query, en niet daarbuiten.
Ook raad ik aan je PHP-code bovenaan je HTML zetten. je wilt eerst de logisca uitvoeren, en dan pas de view.

Reageren