Ik ben bezig met een zoekscriptje en ik wil die op een website zetten.
Nou zit ik met het volgende:
De gegevens haalt hij wel uit de database, maar dan de hele pagina. Ik zou graag dat er van die pagina een selectie wordt gemaakt van het stukje waar het zoekwoord in voorkomt. Is dat mogelijk? Het liefst ook nog dat het zoekwoord dikgedrukt wordt, maar dat is waarschijnlijk moeilijker.
De query waarmee ik de gegevens uit de database haal zijn:
$sql = "SELECT id,content FROM pagina WHERE content LIKE '%$HTTP_POST_VARS[zoekterm]%'";
Wat snap je er nog niet aan dan? Er stond btw nog een foutje in mijn query, die heb ik er nu even uitgehaald...
ps. Even een voorbeeld om te laten zien dat het werkt:
mysql> SELECT * FROM test;
+----+--------------------------------------------------------------+
| id | content |
+----+--------------------------------------------------------------+
| 1 | Een stukje waar ergens in het midden een blaat in voorkomt |
| 2 | Een blaat aan het begin in een stuk tekst moet ook goed gaan |
+----+--------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> SELECT id,
-> CASE
-> WHEN LOCATE('blaat', content) - 10 < 0 THEN CONCAT(SUBSTRING(content, 1, 20), '...')
-> ELSE CONCAT('...', SUBSTRING(content, LOCATE('blaat', content) - 10, 20), '...')
-> END
-> AS ingekorte_tekst
-> FROM test
-> WHERE content LIKE '%blaat%';
+----+----------------------------+
| id | ingekorte_tekst |
+----+----------------------------+
| 1 | ...idden een blaat in v... |
| 2 | Een blaat aan het be... |
+----+----------------------------+
2 rows in set (0.00 sec)
$sql = "SELECT id,CASE WHEN LOCATE('".$_POST['zoekterm']." ', content) - 10 < 0 THEN CONCAT(SUBSTRING(content, 1, 20), '....')
ELSE CONCAT('...', SUBSTRING(content, LOCATE(' ".$_POST['zoekterm']."', content) - 10, 20), '...')
END
AS ingekorte_tekst
FROM test
WHERE content LIKE '%".$_POST['zoekterm']."%';";
Nu krijg ik de melding:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource on line 23
Controleer je wel of je mysql query gelukt is? Daar lijkt het niet op. Die controle moet je sowieso uitvoeren en als de query mislukt is een error weergeven met behulp van mysql_error():
<?php
if(!$res = mysql_query($sql))
{
echo '<pre>';
trigger_error(mysql_errno().': '.mysql_error());
echo 'Query: '.$sql;
echo '</pre>';
}
else
{
// Doorgaan met je script.
}
?>
In PHP een str_replace() toepassen op het resultaat van je query?
<?php
// $content = resultaat van query
$content = str_replace($zoekwoord, '<b>'.$zoekwoord.'</b>', $content);
?>