...
$sql = "SELECT text FROM $type WHERE $method like '$searhfld'";
...
Borde väl vara:
$sql = "SELECT text FROM $type WHERE $method LIKE '$searchfield'";
Dvs. med ett $searchfield istället för $searhfield.
7 svar · 212 visningar · startad av U2K
if ( (isset($searchfld) && $searchfld != "") && (isset($method) && $method !="") ) {
$searchfld = str_replace("*","%",$searchfld); // Ersätter PHP wildcards med originalet
$sql = "SELECT text FROM $type WHERE $method like '$searhfld'";
$result = $db->sql_query($sql);
if ($db->sql_numrows($result)>=1) {
while($row = $db->sql_fetchrow($result) )
{
$text = highlight($row['text'],$searchfld); // Gör sökordet i strängen till BOLD
$tpl->assign(
array(
SEARCHRES => $text
)
);
$tpl->parse(ROWS,".row");
}
}
else // Om man inte finner några poster med ordet i visas felmeddelandet.
{
$tpl->assign(
array(
SEARCHRES => "0 funna poster innehållande <b>" . $searchfld . "</b>"
)
);
$tpl->parse(ROWS,".row");
}
}
else
{
$tpl->assign(
array(
SEARCHRES => "Du måste skriva in ett ord att söka på!"
)
);
$tpl->parse(ROWS,".row");
}
Detta skiter sig fett.. Jag har fixat och trixat men det verkar inte fungera. Vad är fel?
...
$sql = "SELECT text FROM $type WHERE $method like '$searhfld'";
...
Borde väl vara:
$sql = "SELECT text FROM $type WHERE $method LIKE '$searchfield'";
Dvs. med ett $searchfield istället för $searhfield.
Är problemet det ska jag personligen kasta mig på golvet och slita av mig allt hår... Hur dum får man bli.
Så lätt får det inte vara...
Jag ser inte skogen för alla träd!
Det verkar som om det är min förändring av wildcards som gör skillnaden. Om man sätter sökningen till
$searchfield = "*text";
istället för
$searchfield = "text*";
så går det.
Får kolla upp det...
Wildcars för MySQL är %, kan det vara det som spökar?
Jovisst är det det. MEn jag vet inte hur man ska fixa det så man som användare kan använda * istället för %.
Jag läste att man fixar det med str_replace och det verar fungera. Problemet ligger i när man söker. Har man inte searchfield strängen med wildcard före och efter finner den inget.
$searchfld = str_replace("*","%",$searchfld); // Ersätter PHP wildcards med originalet
$sql = "SELECT text FROM $type WHERE $method like '$searhfld'";
Det här ersätter ju bara "*" i söktexten till "%". För att använda LIKE bör du helst ha lite wildcards före och efter också, annars söker du bara efter exakta matchar... Dvs, skriver du in "pappa *" i sökfältet letar den efter fält i tabellen vars värden är exakt "pappa %" dvs det måste börja med "pappa". Testa med att köra:
$sql = "SELECT text FROM $type WHERE $method like '%'" . $searhfld . "%'";
Kanske?