webForumDet fria alternativet
Logga in / Bli medlem

Sökfunktion

PHP

7 svar · 579 visningar · startad av Pedda

Medlem sedan juni 20006 031 inlägg
Trådstart#1

Håller på med en liten sökfunktion till en sida.

Men jag vill komplettera så den söker på alla ord som man skriver i sökfältet. Som det är nu så söker den ju bara på hela frasen.

Har testat lite med att köra explode på strängen men inte fått det att fungera.

Någon som har några ideer?

// De kolumner du vill söka i
$kolumn = array('foretag', 'gata', 'postnrgata', 'postnrbox', 'ort', 'lan', 'riktnr', 'telefon', 'riktnrfax', 'search');

// Konstruera WHERE-delen i SQL-frågan
$var = array();
foreach ($kolumn as $kol) {
   $var[] = "$kol LIKE '%{$_GET['search']}%'";
}
$var = implode(' OR ', $var);
		
$data = mysql_query("SELECT * FROM foretag WHERE $var");
Medlem sedan juni 20001 521 inlägg
#2

Om du kör en explode på $_GET["search"]; på mellanslag och kör en loop inom foreach-loopen borde det väl fungera? Hur har du gjort när du försökt?

Medlem sedan juni 20006 031 inlägg
#3

Det är så jag testade men fick det inte att funka.
Tänkte att det kanske fanns något enklare sätt.

Medlem sedan juni 20001 521 inlägg
#4
<?
// De kolumner du vill söka i

$kolumn = array('foretag', 'gata', 'postnrgata', 'postnrbox', 'ort', 'lan', 'riktnr', 'telefon', 'riktnrfax', 'search');

// Konstruera WHERE-delen i SQL-frågan

$var = array();

foreach ($kolumn as $kol) {

   // $var[] = "$kol LIKE '%{$_GET['search']}%'";
   $s = explode(" ", $_GET['search']);
   foreach ($s as $sokord){
        $var[] = "$kol LIKE '%$sokord%'";
   }

}

$var = implode(' OR ', $var);
$query = "SELECT * FROM foretag WHERE $var";
mysql_query($query);

?>
Medlem sedan juni 20006 031 inlägg
#5

Fick det att fungera nu.

Hade bara klantat mig lite.

Här är koden om någon är intresserad.

// De kolumner du vill söka i
$kolumn = array('foretag', 'gata', 'postnrgata', 'postnrbox', 'ort', 'lan', 'riktnr', 'telefon', 'riktnrfax', 'search');
		 
// Konstruera WHERE-delen i SQL-frågan
$var = array();
$ord = explode(" ",$_GET['search']);
foreach ($kolumn as $kol) {
	for($x=0; $x<count($ord); $x++) {
		$split[] = "$kol LIKE '%$ord[$x]%'";
	}
	$var[] = "$kol LIKE '%{$_GET['search']}%'";
}
$var = implode(' OR ', $var);
$split = implode(' OR ', $split);

$data = mysql_query("SELECT * FROM foretag WHERE $var OR $split");
Medlem sedan juni 20006 031 inlägg
#6

Ah, du gjorde ett försök du med medans jag postade mitt inlägg.

Tack iaf. :)

Medlem sedan juni 20001 521 inlägg
#7

Pedda skrev:

Ah, du gjorde ett försök du med medans jag postade mitt inlägg.

Tack iaf. :)

Kul att det löste sig. Jag testade min version och den fungerar också. Det kändes lite mer logiskt med en foreach till eftersom du började med det.

Medlem sedan juni 20006 031 inlägg
#8

Mysko, testade din kod och den funkar inte för mig.

r/ Jodå, funkade visst när jag ändrade $query till $data som jag använde i mitt exempel.
Får nog sluta programmera nu, har bara sovit totalt 8 timmar de senast 4 nätterna så jag är ganska seg i skallen.

260 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)