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.
Snap dat je beginnend bent, maar als je je code overzichtelijk houd scheelt dit je zelf een hele hoop werk. Je accolades ({ }) staan maar wat in het rond. Welke hoort bij welke?
Ik zal ipv voornaam tussenvoegsel achternaam deze gewoon samen voegen, dat maakt het zoeken ook wat makkelijker en je hoeft maar 1 variabele te tonen en je hoeft niet te controleren of de tussenvoegsel uberhaupt bestaat.
[edit]
Gebruik trouwens nooit SELECT * maar zeg gewoon welke tabellen je nodig hebt, dit is sneller en overzichtelijker. Je hebt ook niet altijd alle tabellen nodig.
En % tekens toegevoegd
[/edit]
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
include('config.php');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>
<h1>Zoeken</h1>
<form method="POST">
<label>Zoek</label><input type="text" name="zoekwoord" />
<input type="submit" name="searchBtn" value="zoek!" />
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
if($zoekwoord = mysqli_real_escape_string($db,$_POST['zoekwoord'])) {
echo '<p>Resultaten voor <b>'.$zoekwoord.'</b></p>'
.'<h1>Resultaat:</h1>';
// Zoekfunctie:
$sql = "SELECT
CONCAT_WS(' ',
IF(LENGTH(voornaam), voornaam, NULL),
IF(LENGTH(tussenvoegsel), tussenvoegsel, NULL),
IF(LENGTH(achternaam), achternaam, NULL)
) volledigenaam
FROM
klantenregister
WHERE
(CONCAT_WS(' ',
IF(LENGTH(voornaam), voornaam, NULL),
IF(LENGTH(tussenvoegsel), tussenvoegsel, NULL),
IF(LENGTH(achternaam), achternaam, NULL)
) LIKE '%" . $zoekwoord . "'%";
$result = mysqli_query($db,$sql);
// Resultaten weergeven:
if(mysqli_num_rows($result)> 0) {
while($res = mysqli_fetch_assoc($result)) {
echo '<p>' . $res['volledigenaam'] . '</p>';
echo $res['adres'] . ' ' . $res['huisnummer'] . '<br>';
echo '-----------------------------------------------------'; // Hier hebben we ook een <hr> voor
}
} else {
echo 'Geen resultaten';
}
} else {
echo '<p>Wat jammer nou er is niks gevonden, hoe kan dat?</p>';
echo mysqli_error($db); // Niet laten staan bij uiteindelijk versie
}
}
?>
dat werkt maar ik wil tussenvoegsel toe voegen aan MATCH() maar dan krijg ik fulltext fout hahah en als ik die weg haal doet voornaam en achternaam het wel super raar.
terwijl tussenvoegsel wel fulltext index bevat hahah.
ik heb beetje een idee dat phpmyadmin bugg is ofzo.
Het gaat om Nederlanders? Lengte postcode max 20?
Huisnummer toevoeging mag langer, want Kerkstraat 34-2 hoog is al iets langer...
Telefoonnummers als int opslaan vraagt om conversie, denk aan (+31)6-123 456 78.
Datums had ik niet als varchar verwacht. (Maar het kan wel, als je dat wil)
IBAN kan volgens mij geen INT zijn, daar zitten toch ook de letters van de banknaam in?
Tussenvoegsel NOT NULL betekent dat alleen mensen mét een tussenvoegsel klant mogen worden?
Adres met een maximale lengte van 20 is ook erg krap (Denk ook een beetje aan de mensen op de Burgemeester Baron van Voorst tot Voorstweg in Tilburg!!)
<Mieren-penetreer modus uit >
Ja, lekker flauw, een beetje schieten op een project in wording. Waarschijnlijk moet je hier nog naar kijken "voor het eggie", en dan zitten anderen(moi) het al af te zeiken. Maar volgens mij heb ik wel eens lijsten met standaard validaties en properties gevonden op internet, die het inregelen van zo'n tabel in een keer sluitend kunnen maken... Dus ik denk: ik meld het even. Speciaal voor al die mensen op de Burgemeester Baron van Voorst tot Voorstweg in Tilburg!