Ik heb onderstaand script in gebruik, maar het zoeken in fulltext in moolean mode zoekt het script alleen naar woorden van minimaal 4 tekens. Is daar iets aan te veranderen zodat die ook (eerste letter voornaam) 1 teken zoekt, want als je bijvoorbeeld zoekt op naam "jan, tim, els, rob, enz,enz " dan geeft het geen resultaat
Code:
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<?php
// Kijken of het formulier is ingevuld
if (isset($_POST['zoeken'])) {
// functie om tekste te verkleinen
function dec_str($line, $len)
{
if (strlen($line) > $len)
$afgekort = substr($line, 0, $len) . "...";
else
$afgekort = $line;
return ($afgekort);
}
// functie om de zoekresultaten te scheiden, er een plus tussen te zetten enz.
function getMySQLZoekterm($zoekterm){
// Stripslashes, indien nodig
$zoekterm = (get_magic_quotes_gpc == 0 ? stripslashes($zoekterm) : $zoekterm);
// Vervang de spaties tussen " en " door een |
if (preg_match_all('/\"(.*?)\"/', $zoekterm, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
$zoekterm = str_replace($match[0], str_replace(' ', '|', $match[0]), $zoekterm);
}
}
// Vervang de spaties tussen ( en } door een ~
if (preg_match_all('/\((.*?)\)/', $zoekterm, $matches, PREG_SET_ORDER)) {
foreach($matches as $match) {
$zoekterm = str_replace($match[0], str_replace(' ', '~', $match[0]), $zoekterm);
}
}
// Stop de zoektermen in een array
$zoektermTemp = preg_split("/[\s,]+/", $zoekterm);
// Doorloop de zoektermen, op zoek naar dubbele keywords achter elkaar
$aantalAND = 0;
$aantalOR = 0;
$zoekterm = array();
$i = 0;
while(list($key, $val) = each($zoektermTemp)){
if (strtoupper($val) == "AND" OR strtoupper($val) == "OR"){
// Als de term hiervoor ook al een operator is, deze verwijderen
if ($key != 0){
if (!( strtoupper($zoektermTemp[$key-1]) == "AND" OR
strtoupper($zoektermTemp[$key-1]) == "OR")){
$zoekterm[$i] = strtoupper($val);
$i++;
// Tel aantal AND en OR's die overblijven
if (strtoupper($val) == "AND"){
$aantalAND++;
}else{
$aantalOR++;
}
}
}
}else{
// Als de vorige term geen operator was, moet er nu een AND tussen
if ($i > 0){
if ($zoekterm[$i-1] != "AND" AND $zoekterm[$i-1] != "OR"){
$zoekterm[$i] = "AND";
$i++;
}
}
// Zoekterm toevoegen
$zoekterm[$i] = $val;
$i++;
}
}
// Doorloop de zoektermen, op zoek naar een AND
while(list($key, $val) = each($zoekterm)){
if (strtoupper($val) == "AND"){
// De term voor en na deze term zijn verplicht
if ($key != 0){
// Voorkom een dubbel plusje
if (substr($zoekterm[$key-1], 0, 1) != "+"){
$zoekterm[$key-1] = "+" . $zoekterm[$key-1];
}
}
if ($key != count($zoekterm) - 1){
$zoekterm[$key+1] = "+" . $zoekterm[$key+1];
}
}
}
// Als er AND én OR in de zoektermen voorkomt, moeten er ronde haken om het AND-deel
if ($aantalAND > 0 && $aantalOR > 0){
reset($zoekterm);
while(list($key, $val) = each($zoekterm)){
// Openingshaak: (
if ($key != count($zoekterm) - 1){
if ($zoekterm[$key+1] == "AND"){
$zoekterm[$key] = "(" . $zoekterm[$key];
}
}
// Sluithaak: )
if ($key != 0){
if ($zoekterm[$key-1] == "AND"){
$zoekterm[$key] = $zoekterm[$key] . ")";
}
}
}
}
// Haal de | en ~ weer weg
$zoekterm = str_replace("|", " ", $zoekterm);
$zoekterm = str_replace("~", " ", $zoekterm);
// Haal handmatig de AND en OR weg
$zoekterm = str_replace("AND", "", $zoekterm);
$zoekterm = str_replace("OR", "", $zoekterm);
// Plak de zoekterm weer aan elkaar
$zoekterm = implode(" ", $zoekterm);
return $zoekterm;
}
include ('db_adreslijst.php');
mysql_connect($dbhost, $dbuser, $dbpass) or die($mysql_con);
mysql_select_db($db) or die($mysql_dat);
$zoeken = $_POST['zoeken'];
$find = getMySQLZoekterm($zoeken);
//Kijken of er wat is ingevuld
if ($find == "")
{
echo '<p>U heeft geen zoekterm ingevuld';
exit;
}
//Nu de sql query uitvoeren met de fulltext in moolean mode
$db = mysql_query(" SELECT * FROM adressen WHERE MATCH(Naam, Voornaam, Geb_datum, Straat, Nr, Postcode, Plaats, Land, Telefoon, Gsm, Email) AGAINST('".$find."')");
echo '<table text-align="center" border="1px" bordercolor="#000000" width="90%" celpadding="2" celspaccing="2">
<tr>
<td class="adr"><B>Naam</b></td>
<td class="adr"><B>Voornaam</B></td>
<td class="adr"><B>Geb_datum</B></td>
<td class="adr"><B>Straat</B></td>
<td class="adr"><B>Nr</B></td>
<td class="adr"><B>Postcode</B></td>
<td class="adr"><B>Plaats</B></td>
<td class="adr"><B>Land</B></td>
<td class="adr"><B>Telefoon</B></td>
<td class="adr"><B>Gsm</b></td>
<td class="adr"><B>Email</B></td>
<td class="adr"><B>Wijzig</B></td>
<td class="adr"><B>Delete</B></td>
</tr>';
// de resultaten doorzoeken
while($result = mysql_fetch_array($db))
{
$beschrijving = dec_str($result['beschrijving'], 15);
echo '<tr>';
echo '<td class="adr1">';
echo $result['Naam'];
echo '</td><td class="adr1">';
echo $result['Voornaam'];
echo '</td><td class="adr1">';
echo $result['Geb_datum'];
echo '</td><td class="adr1">';
echo $result['Straat'];
echo '</td><td class="adr1">';
echo $result['Nr'];
echo '</td><td class="adr1">';
echo $result['Postcode'];
echo '</td><td class="adr1">';
echo $result['Plaats'];
echo '</td><td class="adr1">';
echo $result['Land'];
echo '</td><td class="adr1">';
echo $result['Telefoon'];
echo '</td><td class="adr1">';
echo $result['Gsm'];
echo '</td><td class="adr1">';
echo $result['Email'];
echo '</td><td class="adr1">';
echo '<a href="aanpassen.php">Update</a>';
echo '</td><td class="adr1">';
echo '<a href="verwijderen.php">Delete</a>';
echo '</td></tr>';
}
echo '</table>';
// kijken of er wel resulaten zijn
$anymatches=mysql_num_rows($db);
if ($anymatches == 0)
{
echo '<br>Er zijn geen resultaten<br>';
}
//Nog even zeggen waar naar gezocht werd
echo '<br>Gezocht naar:<b> ' .$find; echo '</b><br><br><a href="javascript:javascript:history.go(-1)">terug naar overzicht</a>';
} else {
// het formulier
?>
<table border="1px" bordercolor="#000000" width="280" celpadding="2" celspaccing="2">
<form action="" method="POST">
<tr>
<td>Zoekterm:</td><td><input name="zoeken" type="text"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Zoek!" style="width: 275"></td>
</tr>
</form>
</table>
<br><br><a href="javascript:javascript:history.go(-1)">terug naar overzicht</a>
<?php
}
?>
Laatst bewerkt: