Hallo mensen,

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]%'";

&

$content .= "Resultaat tekst: <b>$row[content]</b></p>";

Bedankt alvast!
Ik hoop het maar ... ik kom er zelf niet uit!
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)
Oke ik heb nu dus dit:

$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

Lijn 23 is: if (mysql_num_rows($res) >= 1)

Wat is daar niet goed aan?
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.
}
?>
Oké echt helemaal super!!!

Het werkt nu!

Mag ik iedereen bedanken?! :P Allemaal een bosje bloemen!!! ;)

Nu heb ik nog 1 ding ... kan ik het zoekwoord dik gedrukt maken?
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);
?>
Jurgen B schreef op 14.02.2007 13:32
Oké echt helemaal super!!!

Het werkt nu!

Mag ik iedereen bedanken?! :P Allemaal een bosje bloemen!!! ;)

Nu heb ik nog 1 ding ... kan ik het zoekwoord dik gedrukt maken?


Zie mijn eerste post in dit topic
Dat werkt nog niet.

Ik heb nu:
$content .= "Resultaat tekst: <b>$row[ingekorte_tekst]</b></p>";

Hoe zal dat moeten worden?
Als je dat van mij gebruikt:

$content .= "Resultaat tekst: <b>".str_replace($row['ingekorte_tekst'],'<span class="strong">'.$row['ingekorte_tekst'].'</span>')."</b></p>";

En dan krijg je in je css een stukje:


.strong{
   font-weight:bold;
   }
Dan krijg ik de volgende foutmelding:

Warning: Wrong parameter count for str_replace() on line 39

Warning: Wrong parameter count for str_replace() on line 39

Reageren