[code]
<?php
// Gemaakt door bartje545, bartje545@gmail.com


// Kijken of het formulier is ingevuld
if (isset($_POST['zoeken2'])) {

// functie om tekste te verkleinen ( van phphulp )
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 &#233;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 ('../mysql_connect.php');

$zoeken2 = $_POST['zoeken2'];
$find = getMySQLZoekterm("$zoeken2");


//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
$data = mysql_query(" SELECT * FROM bestanden WHERE MATCH(naam, username, beschrijving, tags, vak, type) AGAINST('".$find."' IN BOOLEAN MODE)");

echo '<table>'; // netjes in een tebale zetten
echo '<tr><td><B>Naam</b></td><td><B>Beschrijving</B></td><td><B>Vak</B></td><td><B>Type</B></td></tr>';

// de resultaten doorzoeken
while($result = mysql_fetch_array($data))
{
$beschrijving = dec_str($result['beschrijving'], 15);

echo '<tr><td>';
echo $result['naam'];
echo '</td><td>';
echo $beschrijving;
echo '</td><td>';
echo $result['vak'];
echo '</td><td>';
echo $result['type'];
echo '</td></tr>';
}
echo '</table>';


// kijken of er wel resulaten zijn
$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
echo 'Er zijn geen resultaten<br><br>';
}

//Nog even zeggen waar naar gezocht werd
echo "<b>Gezocht naar:</b> " .$find;


} else {
// het formulier
?>
<table>
<form action="" method="POST">
<tr><td>Zoekterm:</td><td><input name="zoeken2" type="text" /></td></tr>
<tr><td><input type="submit" name="submit" value="Zoek!" /></td></tr>
</form> 
</table>
<?php
}
?>
[/code]
