webForumDet fria alternativet

markera sökträffar.

13 svar · 369 visningar · startad av visslaren

visslarenMedlem sedan juli 20011 222 inlägg
#1

har ett problem med regexp. håller på med en sökmotor för en en sidan. när man hittat artikeln och går in på den så ska alla ord som stämmer överens med sökordet färgas röda. blir dock parse error på rad 72 i koden (har markereat den i koden jag postar)
nån som ser felet?

function colorit($str, $k=$k){  (<---- rad 72 )
    $str = preg_replace ("$k", "<font color=#c50000>\\0</font>", $str); 
    return $str; 
}
SPiNMedlem sedan mars 20007 896 inlägg
#2

Ja, det är inte konstigt att det blir fel på $k=$k. Antingen måste du ge $k ett defaultvärde, eller så måste användaren skicka med en parameter $k till funktionen.

<?php
function func ( $val1, $val2 = "Heja bajen!" ) {
   echo $val1 . ": " . $val2;
}

func ( "SPiN" ); // Resulterar i: "SPiN: Heja bajen!"
func ( "SPiN", "PHP!" ); // Resulterar i: "SPiN: PHP!"
visslarenMedlem sedan juli 20011 222 inlägg
#3

tack. nu blir det inget scriptfel :)

men den returnerar ingenting :l

har en ifsats som ser ut så här:

function colorit($str, $k){ 
    $str = preg_replace ("$k", "<font color=#c50000>\\0</font>", $str); 
    return $str; 
}

if($k) {
$title=colorit($title, $k);
$content=colorit($content, $k);
$samman=colorit($samman, $k);
}
else {
}

om $k finns så ska den köra igenom funktionen.

SPiNMedlem sedan mars 20007 896 inlägg
#4

Skulle du kunna ge exempel på hur $str och $k skulle kunna se ut?

visslarenMedlem sedan juli 20011 222 inlägg
#5

$str innehåller det som ska sökas igenom exempelvis denna text: <http://www.spelbasen.net/epicentre_2/recension.php?id=137

$k innehåller sökord som tex mario>

SPiNMedlem sedan mars 20007 896 inlägg
#6

Då skulle funktionen kunna se ut så här:

function colorit ( $str, $k ) { 
    $str = preg_replace ( "/(.*?)(" . $k . ")(.*?)/is", "\\1<font color=#c50000>\\2</font>\\3", $str ); 
    return $str; 
}

Kanske.

Men din funktion borde ha fungerat, tycker jag.

visslarenMedlem sedan juli 20011 222 inlägg
#7

hmm nu skrevs iaf nåt ut. men det blev lite fel:
http://www.spelbasen.net/epicentre_2/recension.php?id=137&k=mario

SPiNMedlem sedan mars 20007 896 inlägg
#8

Hm, jag redigerade mitt inlägg ovan. När man använde [php]-taggen så blev det endast ett \-tecken framför träffarna, kan ha varit det som ställde till det kanske?!

visslarenMedlem sedan juli 20011 222 inlägg
#9

tack! nu fungerar det bra :)

streetrobbanMedlem sedan jan. 20011 140 inlägg
#10

Tjena, jag har en sökfunktion som jag också vill ha markerade sökträffar på. Men jag förstår inte riktigt hur jag ska göra. Var någonstans (och hur) bestämmer du vad "$str" innehåller?

Min sökfunktion ser ut så här nu:
news.php
Här finns en input ruta man skriver in sökordet i och skickar det vidare till nästa sidan, med POST.

search-news.php
Den heter search-news.php och där hämtar man relaterade nyheter från databasen med följande kod:

$result = mysql_query("SELECT * FROM news WHERE news.id LIKE '%$search' OR news.nDate LIKE '%$search%' OR news.nTime LIKE '%$search%' OR news.nWriter LIKE '%$search%' OR news.nText LIKE '%$search%' OR news.nTopic LIKE '%$search%' ORDER BY news.id DESC", $open) or die (mysql_error());

Sedan skriver jag ut det. Men hur får jag sökordet att bli rött, eller bold eller vad som helst?

visslarenMedlem sedan juli 20011 222 inlägg
#11

använd senaste koden som spin skrev. anropa med nåt i stil med detta: $title=colorit($title, $k); i detta faller är $title strängen som ska sökas igenom efter sökordet. sökordet finns i $k. ändra i variabelgrejjor i funktionen så ska det fungera :)

streetrobbanMedlem sedan jan. 20011 140 inlägg
#12

Men jag skickar ju aldrig med en sträng (med det som ska genomsökas). Det enda jag skickar med från föregående sida är $search (som är sökordet). Sedan matchar jag det med något från news tabellen. :x

visslarenMedlem sedan juli 20011 222 inlägg
#13

men på nåt sätt så hämtar du ju från tabellen. det är ju bara att du kör in det som ska genomsökas i en variabel som söks igenom innan det skrivs ut. svårare är det inte =)

streetrobbanMedlem sedan jan. 20011 140 inlägg
#14

Det gör jag ju också..

<?php
include("includes/db.php");
	
// Print on the page
$result = mysql_query("SELECT * FROM news WHERE news.id LIKE '%$search' OR news.nDate LIKE '%$search%' OR news.nTime LIKE '%$search%' OR news.nWriter LIKE '%$search%' OR news.nText LIKE '%$search%' OR news.nTopic LIKE '%$search%' ORDER BY news.id DESC", $open) or die (mysql_error());
		
function colorit ( $result, $search ) 
{ 
	$result = preg_replace ( "/(.*?)(" . $search . ")(.*?)/is", "\\1<font color=#c50000>\\2</font>\\3", $result ); 
	return $result; 
}
		
$rowCount = mysql_numrows($result);
	
if ($rowCount == 0) 
{
	echo("Nothing matched your search.");
	echo("<br><br>");
} 
else 
{
	echo("You searched for <b>$search</b>, and this is your result:<br><br>");
		
	while ($get = mysql_fetch_array($result))
	{
		echo("<table border=0 width=100% cellspacing=0 cellpadding=0>");
		echo("<tr>");
		echo("<td bgcolor=#EDDDC3>");
		echo("<span class=topic><b><a name=".$get['id'].">".$get['nTopic']."</a></b></span>&nbsp;<a href=#top><img src=gfx/up.gif border=0></a>");
		echo("</td>");
		echo("</tr>");
		echo("<tr>");
		echo("<td bgcolor=#F6EEE3>");
		echo("<p align=right><span class=datte>".$get['nWriter']."&nbsp;".$get['nDate']." | ".$get['nTime']."</span></p>");
		echo("</td>");
		echo("</tr>");
		echo("<tr>");
		echo("<td>");
		echo("".$get['nText']."");
		echo("</td>");
		echo("</tr>");
		echo("</table>");
		echo("<br><br>");
	}
}

// Close DB connection
mysql_close($open);
?>
130 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)