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 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!"
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 Skulle du kunna ge exempel på hur $str och $k skulle kunna se ut?
$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 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.
SPiNMedlem sedan mars 20007 896 inlägg 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?!
tack! nu fungerar det bra :)
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?
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 :)
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
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 =)
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> <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']." ".$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);
?>