webForumDet fria alternativet

Sökning som går galet

PHP

7 svar · 208 visningar · startad av U2K

Medlem sedan jan. 2000224 inlägg
Frågan#1
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?

Medlem sedan mars 20007 896 inlägg
#2
...
$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. :)

Medlem sedan jan. 2000224 inlägg
#3

Ä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!

Medlem sedan jan. 2000224 inlägg
#4

Nä du SPiN...

Det var visserligen en kugge men hjulet snurrar inte ännu..
hmmm...

Medlem sedan jan. 2000224 inlägg
#5

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

Medlem sedan mars 20007 896 inlägg
#6

Wildcars för MySQL är %, kan det vara det som spökar?

Medlem sedan jan. 2000224 inlägg
#7

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.

Medlem sedan jan. 2000372 inlägg
#8
$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?

280 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
145 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
145 ms — ändringar (db)