*Bijgewerkt*

Volgens mij heb ik het terug kunnen brengen tot de variabelen.
Zo'n 10 jaar terug gebruikte ik b.v. '%$ZAchternaam%'
Het formulier bevat 5 categorieën waar je op kan zoeken.
Nummer
achternaam
voornamen
geboortedatum
overlijdensdatum

In de zoekfunctie hoef je niet op alles te zoeken, maar op delen.

Als je alleen geboortedatum 1927 in vult, zou hij alle documenten moeten vinden van personen die in 1927 zijn geboren. Daarom gebruikte ik % als wildcards. Net als vroeger een * in MSDOS (voor de oudjes)

De onderstaande code werkt wel voor achternaam, mits ik die volledig invul.


<?php

session_start();

//Om foutmeldingen in beeld te krijgen  - alleen tijdens debuggen!:
ini_set('display_errors',true);
error_reporting(E_ALL);

include('config.php');

//         uitlezen gegevens uit formulier
if(isset($_POST["SUBMIT"])) {
 echo "formulier verzonden <br>";
$Zidnr = $_POST['Zidnr'];
$ZAchternaam = $_POST['ZAchternaam'];
$ZVoornamen = $_POST['ZVoornamen'];
$Zgeboortedatum =$_POST['Zgeboortedatum'];
$Zoverlijdensdatum =$_POST['Zoverlijdensdatum'];


//    hier wilde ik zoeken op een deel van de invoer
//$Zidnr ='%$Zidnr%';
//$ZAchternaam ='%'.$ZAchternaam.'%';     werkt ook niet
//$ZVoornamen ='%$ZVoornamen%';
//$Zgeboortedatum ='%$Zgeboortedatum%';
//$Zoverlijdensdatum ='%$Zoverlijdensdatum%';

echo "Zoek id: ".$Zidnr." achternaam: ".$ZAchternaam." avoornamen: ".$ZVoornamen." geboren: ".$Zgeboortedatum." overleden: ".$Zoverlijdensdatum." <br> "    ;
echo "<table>";

//           Verbind met database
 try
        {
// -->  $pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE id=:id AND achternaam=:achternaam AND voornaam=:voornaam AND geboortedatum=:geboortedatum AND overlijdensdatum=:overlijdensdatum");
// voor testen beperkt tot alleen achternaam

        $pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE  achternaam=:achternaam ");
        $pdoResult->bindValue(':id', $Zidnr);
        $pdoResult->bindValue(':achternaam', $ZAchternaam);
        $pdoResult->bindValue(':voornaam', $ZVoornamen);
        $pdoResult->bindValue(':geboortedatum', $Zgeboortedatum);
        $pdoResult->bindValue(':overlijdensdatum', $Zoverlijdensdatum);
// -->  $pdoResult->execute(array(':id' => $Zidnr, ':achternaam' => $ZAchternaam, ':voornaam' => $ZVoornamen, ':geboortedatum' => $Zgeboortedatum, ':overlijdensdatum' => $Zoverlijdensdatum ));
        $pdoResult->execute(array(':achternaam' => $ZAchternaam ));

        while($row = $pdoResult->fetch(PDO::FETCH_ASSOC)) {
        $Tid=$row['id'];
        $Tgedcomnummer=$row['gedcomnummer'];
        $Tachternaam=$row['achternaam'];
        $Tvoornamen=$row['voornaam'];
        $Tvoorzetsel=$row['voorzetsel'];
        $Tgeboortedatum=$row['geboortedatum'];
        $Tgeboorteplaats=$row['geboorteplaats'];
        $Toverlijdensdatum=$row['overlijdensdatum'];
        $Toverlijdensplaats=$row['overlijdensplaats'];
        $TP1_naam = $row['P1_naam'];
        $TP2_naam = $row['P2_naam'];
        $TP3_naam = $row['P3_naam'];


$TPsamen = $TP1_naam.", ".$TP2_naam.", ".$TP3_naam;
if ($TP3_naam == "0")   { $TPsamen = $TP1_naam." ".$TP2_naam;  }
if ($TP3_naam == "")   { $TPsamen = $TP1_naam." ".$TP2_naam;  }
if ($TP2_naam == "0")   { $TPsamen = $TP1_naam;  }
if ($TP2_naam == "")   { $TPsamen = $TP1_naam;  }


echo "<tr>";
echo "    <td width=\"4%\" ><a href=\"Bidpr_view.php?zid=".$Tid."\">&nbsp;".$Tid."</a></td> ";
echo "    <td width=\"24%\" >&nbsp;".$Tachternaam.", ".$Tvoornamen." ".$Tvoorzetsel."</td> ";
echo "    <td width=\"24%\" >&nbsp;".$Tgeboortedatum.", ".$Tgeboorteplaats."</td>";
echo "    <td width=\"24%\" >&nbsp;".$Toverlijdensdatum.", ".$Toverlijdensplaats."</td>";
echo "    <td width=\"24%\" >&nbsp;".$TPsamen."</td>";
echo "</tr>";

    } // while
    }     // einde try

        catch(PDOException $e){
        echo $e->getMessage();
            }    // einde catch

}    // einde isset
echo "</table>";
echo "<br>";
echo "<hr>";
//sluit de verbinding


?>

<table width="50" border="0">
<form method="post"  enctype="multipart/form-data">

<table>
  <tr><td>ID nummer</td>
    <td><input type="text" name="Zidnr" value=""></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr><td>Achternaam</td>
    <td><input type="text" name="ZAchternaam" value=""></td>
    <td>&nbsp;</td>
    <td>&nbsp;Volledig of deel van naam</td>
  </tr>
  <tr><td>Voornamen</td>
    <td><input type="text" name="ZVoornamen" value=""></td>
    <td>&nbsp;</td>
    <td>&nbsp;Volledig of deel van naam</td>
  </tr>
  <tr><td>Geboortedatum</td>
    <td><input type="text" name="Zgeboortedatum" value=""></td>
    <td>&nbsp;</td>
    <td>&nbsp;formaat dd-mm-jjjj</td>
  </tr>
  <tr><td>Overlijdensdatum</td>
    <td><input type="text" name="Zoverlijdensdatum" value=""></td>
    <td>&nbsp;</td>
    <td>&nbsp;formaat dd-mm-jjjj</td>
  </tr>
  <tr><td></td>
    <td><input type=SUBMIT name="SUBMIT"  value="Verzenden !"></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</form>

De config is in het algemeen meer de plek voor de configuratie-instellingen ;-)
Maar werkt het nu?

Zo nee, vertel even duidelijk wat er precies gebeurt, wat je doet, en wat je ziet?
$ZAchternaam ='%$ZAchternaam%';
Dit soort commando's werkt niet meer denk ik. Was bedoeld om op een deel van de string te zoeken.
Als ik die regel verwijder en zoek op de gehele naam, dan vind ik die.
Typ ik deel van de naam in, dan niet
Ligt eraan hoe je ze gebruikt. Voor PHP is het gewoon een procent en dat is altijd zo geweest.
Ik zou wel variabelen buiten quotes plaatsen.


<?php
$Name = "Famke Louise";
$fullName ='%'.$Name.'%';
echo $fullName;
?>


Wat je er verder mee doet, zien we niet.
Jammer dat je jouw startpost hebt aangepast zodat het voor ons gissen blijft.

Pas gewoon niet steeds je startpost aan, want dat maakt het onderwerp in één klap onduidelijker.
Uhm, dit gaat over wildcards in queries, waarschijnlijk -gezien je vorige topics- specifiek in PDO.

Dus een voor de hand liggende vraag is:

Hoe luidt jouw query + bijbehorende code nu.
heb code weer in eerste bericht gezet.
En ik heb de titel ook even aangepast. 'Maar weer hulp' geeft niet duidelijk aan wat voor hulp je zoekt.
Als je in een database wilt zoeken op delen van een woord, dan zul je LIKE moeten gebruiken.


<?php
$Name = "Famke Louise";
$fullName ='%'.$Name.'%';

$sql = "SELECT * FROM Klanten
WHERE Naam LIKE '".$fullName."'"; 
echo $sql;
// voer vanaf hier je query uit.
?>


Super dat werkt inderdaad. Kan dat dan ook voor meer variabelen, b.v. op voornaam en achternaam?


$pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE achternaam LIKE '".$ZAchternaam."'" AND WHERE voornaam LIKE '".$ZVoornamen."'");


Deze select werkt in ieder geval niet, maar eigenlijk wil ik dan selecteren op de 5 velden, id, achternaam, voornaam, geboorte, overlijden. Kan dat ik in select?
Je hoeft maar 1x WHERE te gebruiken (en je quotes kloppen ook niet):
<?php
$pdoResult = $pdoConnect->prepare("
  SELECT * FROM db_bidprentjes 
  WHERE achternaam LIKE '$ZAchternaam'
    AND voornaam LIKE '$ZVoornamen'"
);
?>


@Ariën: waarom de variabelen buite quotes plaatsen? Bovenstaande werkt toch ook prima? Vind ik persoonlijk overzichtelijker omdat je niet zo'n brij aan enkele en dubbele quotes krijgt

@Theo: gebruik een editor met syntax highlighting (zoals in bovenstaande stukje code). Dan had je meteen gezien dat je fout zat met je quotes.
Het is NIET de bedoeling dat je DATA in SQL concateneert.

Hier zijn prepared statements niet voor bedoeld!

Het fragment van @Rob hierboven wordt dan ook niet aangeraden.

Het zou ongeveer als volgt moeten:
<?php
$achternaam = '%'.$_POST['achternaam'].'%';
// ...
$statement->bindValue(':achternaam', $achternaam);
// ...
?>

En niet anders...

Om op meer argumenten te zoeken gebruik je OR tussen de argumenten.

Dus zoiets als:
SELECT ...
FROM ...
WHERE voornaam LIKE :voornaam
OR achternaam LIKE :achternaam
OR ... et cetera ...

Waarbij :voornaam en :achternaam voorzien worden van wildcards op de hierboven beschreven wijze.

Reageren