webForumDet fria alternativet

markera sökträffar.

PHPur PHP

13 svar · 369 visningar · startad av visslaren

Medlem sedan juli 20011 222 inlägg
Frågan#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; 
}
Medlem 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!"
Medlem 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.

Medlem sedan mars 20007 896 inlägg
#4

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

Medlem 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>

Medlem 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.

Medlem 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

Medlem 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?!

Medlem sedan juli 20011 222 inlägg
#9

tack! nu fungerar det bra :)

Medlem 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?

Medlem 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 :)

Medlem 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

Medlem 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 =)

Medlem 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);
?>
142 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)