webForumDet fria alternativet

Varför fungerar inte min sökfunktion?

13 svar · 469 visningar · startad av streetrobban

streetrobbanMedlem sedan jan. 20011 140 inlägg
#1

Min sökfunktion fungerar nästan. Men det är en grej som gör att det blir error...

Här följer lite kodexempel!

Detta fungerar:

// Hämta sökresultaten
$get = mysql_query("SELECT ... produkter_biltillbehör.id ... FROM sns_produkter_biltillbehör WHERE ... produktnamn LIKE  '%" . $sok . "%' OR beskrivning LIKE '%" . $sok . "%' ... ORDER BY produktnamn");

Men när jag sedan vill att man ska söka igenom id också, så funkar det inte:

// Hämta sökresultaten
$get = mysql_query("SELECT ... produkter_biltillbehör.id [b]produkter_biltillbehör.id AS produkt_id[/b] ... FROM sns_produkter_biltillbehör WHERE ... produktnamn LIKE '%" . $sok . "%' OR beskrivning LIKE '%" . $sok . "%' [b] OR produkt_id LIKE '%" . $sok . "%'[/b] ... ORDER BY produktnamn");

Felmeddelandet lyder:


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/kunder/www/sokresultat.php on line 78
tydalMedlem sedan juni 20034 013 inlägg
#2

Visa hela SQL-satsen som det blir fel på i stället. Och visa resultatet av mysql_error() efteråt. Då kan ju vi, och kanske du också, se vad det är för fel.

@ndersMedlem sedan juni 200032 969 inlägg
#3

Det kan också vara bra att separera fält i SELECT-frågan med kommatecken.

NiklassonMedlem sedan nov. 2000857 inlägg
#4

Tråden flyttas från PHP..

streetrobbanMedlem sedan jan. 20011 140 inlägg
#5

Ok, nu skrev jag bara koden för hand. Jag kopierar hela koden här då.

	<?php
	// Öppna databasen
	require 'inkludera/databas.php';

	// Räkna sökresultaten
	$get = mysql_query("SELECT sns_bilmärken.id, sns_bilmärken.bilmärke, sns_bilmodeller.id, sns_bilmodeller.bilmodell, sns_kategorier_biltillbehör.id, sns_kategorier_biltillbehör.kategorinamn, sns_produkter_biltillbehör.id AS produkt_id, sns_produkter_biltillbehör.produktnamn, sns_produkter_biltillbehör.id_bilmodell, sns_produkter_biltillbehör.id_bilmärke, sns_produkter_biltillbehör.bild, sns_produkter_biltillbehör.beskrivning, sns_produkter_biltillbehör.pris, sns_produkter_biltillbehör.id_kategori, sns_produkter_biltillbehör.tid, sns_produkter_biltillbehör.datum FROM sns_produkter_biltillbehör
	INNER JOIN sns_kategorier_biltillbehör ON sns_produkter_biltillbehör.id_kategori = sns_kategorier_biltillbehör.id
	INNER JOIN sns_bilmodeller ON sns_produkter_biltillbehör.id_bilmodell = sns_bilmodeller.id
	INNER JOIN sns_bilmärken ON sns_produkter_biltillbehör.id_bilmärke = sns_bilmärken.id WHERE produktnamn LIKE '%" . $sok . "%' OR beskrivning LIKE '%" . $sok . "%' OR bilmodell LIKE '%" . $sok . "%' OR bilmärke LIKE '%" . $sok . "%' OR kategorinamn LIKE '%" . $sok . "%' OR pris LIKE '%" . $sok . "%' OR produkt_id LIKE '%" . $sok . "%' ORDER BY produktnamn", $open);
	$rowCount = mysql_numrows($get);

	// Kolla hur många resultat som hittades
	if ($rowCount == '0')
	{
		echo "Din sökning på ordet <span class=sok><b>$sok</b></span> gav inga resultat.<br/>";
		echo "<li/><a href=sok.php>Ny sökning</a>";
	}
	else
	{
		if ($rowCount == '1')
		{
			echo "Din sökning på ordet <span class=sok><b>$sok</b></span> återfanns i $rowCount produkt.<br/>";
			echo "<li/><a href=sok.php>Ny sökning</a><br/><br/>";
		}
		else
		{
			echo "Din sökning på ordet <span class=sok><b>$sok</b></span> återfanns i $rowCount produkter.<br/>";
			echo "<li/><a href=sok.php>Ny sökning</a><br/><br/>";
		}
	
		echo "<table border=0 width=555px cellspacing=0 cellpadding=0>";
		
		// Hämta sökresultaten
		$get = mysql_query("SELECT sns_bilmärken.id, sns_bilmärken.bilmärke, sns_bilmodeller.id, sns_bilmodeller.bilmodell, sns_kategorier_biltillbehör.id, sns_kategorier_biltillbehör.kategorinamn, sns_produkter_biltillbehör.id AS produkt_id, sns_produkter_biltillbehör.produktnamn, sns_produkter_biltillbehör.id_bilmodell, sns_produkter_biltillbehör.id_bilmärke, sns_produkter_biltillbehör.bild, sns_produkter_biltillbehör.beskrivning, sns_produkter_biltillbehör.pris, sns_produkter_biltillbehör.id_kategori, sns_produkter_biltillbehör.tid, sns_produkter_biltillbehör.datum FROM sns_produkter_biltillbehör
		INNER JOIN sns_kategorier_biltillbehör ON sns_produkter_biltillbehör.id_kategori = sns_kategorier_biltillbehör.id
		INNER JOIN sns_bilmodeller ON sns_produkter_biltillbehör.id_bilmodell = sns_bilmodeller.id
		INNER JOIN sns_bilmärken ON sns_produkter_biltillbehör.id_bilmärke = sns_bilmärken.id WHERE produktnamn LIKE '%" . $sok . "%' OR beskrivning LIKE '%" . $sok . "%' OR bilmodell LIKE '%" . $sok . "%' OR bilmärke LIKE '%" . $sok . "%' OR kategorinamn LIKE '%" . $sok . "%' OR pris LIKE '%" . $sok . "%' OR produkt_id LIKE '%" . $sok . "%' ORDER BY produktnamn");
		
		// Highlighta sökordet
		function colorit ($get, $sok)
		{
			$get = preg_replace ("/(.*?)(" . $sok . ")(.*?)/is", "\\1<span class=sok>\\2</span>\\3", $get);
			return $get;
		}
		
		while($userRow = mysql_fetch_array($get)) 
		{
			echo "<tr>";
			echo "<td bgcolor=#FBFAFA>";
			echo "<table border=0 bgcolor=#000000 width=67px height=50px cellspacing=0 cellpadding=1>";
			echo "<tr>";
			echo "<td>";
			echo "<a href=bilder/produkter/".$userRow['bild']." onclick=\"imgPopup5(this.href); return false;\"><img src=bilder/produkter/".$userRow['bild']." border=0  width=67px height=50px title=\" Förstora \"></a>";
			echo "</tr>";
			echo "</td>";
			echo "</table>";
			echo "</td>";
			echo "<td width=20px bgcolor=#FBFAFA>";
			echo "&nbsp;";
			echo "</td>";
			echo "<td bgcolor=#FBFAFA>";
			echo "<b>Bilmärke</b><br/>";
			echo colorit($userRow['bilmärke'],$sok);
			echo "&nbsp;";
			echo colorit($userRow['bilmodell'],$sok);
			echo "</td>";
			echo "<td width=20px bgcolor=#FBFAFA>";
			echo "&nbsp;";
			echo "</td>";
			echo "<td bgcolor=#FBFAFA>";
			echo "<b>Pris</b><br/>";
			echo colorit($userRow['pris'],$sok);
			echo " kr";
			echo "</td>";
			echo "<td width=20px bgcolor=#FBFAFA>";
			echo "&nbsp;";
			echo "</td>";
			echo "<td bgcolor=#FBFAFA>";
			echo "<b>Artikel ID</b><br/>";
			echo colorit($userRow['produkt_id'],$sok);
			echo "</td>";
			echo "<td width=20px bgcolor=#FBFAFA>";
			echo "&nbsp;";
			echo "</td>";
			echo "<td bgcolor=#FBFAFA>";
			echo "<b>";
			echo colorit($userRow['produktnamn'],$sok);
			echo "</b><br/>";
			echo colorit($userRow['beskrivning'],$sok);
			echo "</td>";
			echo "</tr>";
			echo "<tr>";
			echo "<td height=5px>";
			echo "</td>";
			echo "</tr>";
		}
		
		// Stäng databasen
		mysql_close($open);
		
		echo "</table>";
	}
	?>
@ndersMedlem sedan juni 200032 969 inlägg
#6

tydal skrev:

Och visa resultatet av mysql_error() efteråt. Då kan ju vi, och kanske du också, se vad det är för fel.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#7

Ja det glömde jag...

Warning: mysql_error(): 6 is not a valid MySQL-Link resource in /home/kunderwww/sokresultat.php on line 133
tydalMedlem sedan juni 20034 013 inlägg
#8

I stället för $get = mysql_query("SELECT osv... så skriver du:

$query = "SELECT osv... ";
echo($query);
$get = mysql_query($query);
echo(mysql_error());

Då får du fram hela sql-satsen och mysql_error efteråt.

Du hade nog råkat lägga mysql_error efter att du kört mysql_close, och då har den ju stängt förbindelsen till Mysql och kan därmed inte kolla felmeddelandet.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#9

Jag kan väl inte skriva ut mysql_error() på echo? Då skriver den ju bara ut orden "mysql_error()"... ?

streetrobbanMedlem sedan jan. 20011 140 inlägg
#10

Jag får alltid samma felmeddelande:

  	

Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /home/kunder/www/sokresultat.php on line 42
Din sökning på ordet 87 återfanns i produkter.
# Ny sökning

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/kunder/www/sokresultat.php on line 82
tydalMedlem sedan juni 20034 013 inlägg
#11

echo("mysql_error()"); skriver ut orden mysql_error, men du ska skriva echo(mysql_error()); vilket i stället skriver ut resultatet av funktion mysql_error som talar om vad du får för felmeddelande i Mysql.

Felmeddelandet du klistrat in talar om att du ska kolla på vad Mysql ger för felmeddelande.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#12

Ja, wow. Nu får man fram lite nyttig information.

Unknown column 'produkt_id' in 'where clause'

Men jag hämtar ju produkt_id

sns_produkter_biltillbehör.id AS produkt_id
@ndersMedlem sedan juni 200032 969 inlägg
#13

Det är inte alltid man kan använda de alias man ger fält i SQL-frågan. Du får nog använda sns_produkter_biltillbehör.id i WHERE-satsen istället.

streetrobbanMedlem sedan jan. 20011 140 inlägg
#14

Jamen äntligen funkar det :) Tack för era svar!

248 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
125 ms — hämta forumlista (db)
117 ms — hämta statistik (db)
128 ms — hämta tråd, inlägg och bilagor (db)