Permalänk
Medlem

Sökfunktion i PHP/MySql

Hej

Jag vill göra en sökning i en mysql-databas som jag har. Sökningen ska returnera alla poster som motsvarar sökordet. Det har jag fått att funka, men hur gör jag för att få en utskrift på sidan om en post inte finns? Typ: Ingen användare hittades som motsvarade dina sökkriterier

Permalänk
Medlem

Visa din kod!

if($result == null){ echo 'No result'; } else { echo 'result'; }

Visa signatur

Citera för svar

Permalänk
Medlem

Koden:

$hitta = $_POST['hitta'];
$sql = mysql_query("select * from anvandra where fornamn like '%$hitta%' ORDER BY efternamn");
while($row = mysql_fetch_assoc($sql)): ?>
<div id="runtbox">
<br /
<hr width="100%" color="#FFFFFF" />
<br /><br />
<span class="rubbe">Namn</span><br /><br /><div id="fornamnbox">
<?=$row['fornamn'];?> <?=$row['efternamn'];?>
</div>
<br /><br />
<span class="rubbe">Adress</span><br /><br /><div id="gatuadressbox">
<?=$row['gatuadress'];?>
</div><br /><br />
<div id="postnummerbox">
<?=$row['postnummer'];?> <?=$row['ort'];?>
</div> <br /><br />
<span class="rubbe">Pers. nr.</span><br /><br /><div id="personnummerbox">
<?=$row['personnummer'];?>
</div><br /><br /><br />

<span class="rubbe">Bild</span><br /><br /><div id="bildbox">
<?=$row['bild'];?>
</div>
</div>
<? endwhile?>

Självklart är kopplingen till databasen gjord innan detta

Permalänk
Medlem

$hitta = $_POST['hitta']; $sql = mysql_query("select * from anvandra where fornamn like '%$hitta%' ORDER BY efternamn"); while($row = mysql_fetch_assoc($sql)): ?> <div id="runtbox"> <br / <hr width="100%" color="#FFFFFF" /> <br /><br /> <span class="rubbe">Namn</span><br /><br /><div id="fornamnbox"> <?=$row['fornamn'];?> <?=$row['efternamn'];?> </div> <br /><br /> <span class="rubbe">Adress</span><br /><br /><div id="gatuadressbox"> <?=$row['gatuadress'];?> </div><br /><br /> <div id="postnummerbox"> <?=$row['postnummer'];?> <?=$row['ort'];?> </div> <br /><br /> <span class="rubbe">Pers. nr.</span><br /><br /><div id="personnummerbox"> <?=$row['personnummer'];?> </div><br /><br /><br /> <span class="rubbe">Bild</span><br /><br /><div id="bildbox"> <?=$row['bild'];?> </div> </div> <? endwhile?>

Lägg in en if sats

if(!empty(mysql_fetch_assoc($sql))){ <Kör din kod> } else { <Error> }

Visa signatur

Citera för svar

Permalänk
Medlem
Skrivet av jakkes:

$hitta = $_POST['hitta']; $sql = mysql_query("select * from anvandra where fornamn like '%$hitta%' ORDER BY efternamn"); while($row = mysql_fetch_assoc($sql)): ?> <div id="runtbox"> <br / <hr width="100%" color="#FFFFFF" /> <br /><br /> <span class="rubbe">Namn</span><br /><br /><div id="fornamnbox"> <?=$row['fornamn'];?> <?=$row['efternamn'];?> </div> <br /><br /> <span class="rubbe">Adress</span><br /><br /><div id="gatuadressbox"> <?=$row['gatuadress'];?> </div><br /><br /> <div id="postnummerbox"> <?=$row['postnummer'];?> <?=$row['ort'];?> </div> <br /><br /> <span class="rubbe">Pers. nr.</span><br /><br /><div id="personnummerbox"> <?=$row['personnummer'];?> </div><br /><br /><br /> <span class="rubbe">Bild</span><br /><br /><div id="bildbox"> <?=$row['bild'];?> </div> </div> <? endwhile?>

Lägg in en if sats

if(!empty(mysql_fetch_assoc($sql))){ <Kör din kod> } else { <Error> }

Har provat detta, men inte fått det att funka - hur skulle det läggas in i den kod jag redan har?

Permalänk
Medlem
Skrivet av eeeeemil:

Har provat detta, men inte fått det att funka - hur skulle det läggas in i den kod jag redan har?

$hitta = $_POST['hitta']; $sql = mysql_query("select * from anvandra where fornamn like '%$hitta%' ORDER BY efternamn"); if(!empty(mysql_fetch_assoc($sql)){ while($row = mysql_fetch_assoc($sql)): ?> <div id="runtbox"> <br / <hr width="100%" color="#FFFFFF" /> <br /><br /> <span class="rubbe">Namn</span><br /><br /><div id="fornamnbox"> <?=$row['fornamn'];?> <?=$row['efternamn'];?> </div> <br /><br /> <span class="rubbe">Adress</span><br /><br /><div id="gatuadressbox"> <?=$row['gatuadress'];?> </div><br /><br /> <div id="postnummerbox"> <?=$row['postnummer'];?> <?=$row['ort'];?> </div> <br /><br /> <span class="rubbe">Pers. nr.</span><br /><br /><div id="personnummerbox"> <?=$row['personnummer'];?> </div><br /><br /><br /> <span class="rubbe">Bild</span><br /><br /><div id="bildbox"> <?=$row['bild'];?> </div> </div> <? endwhile; } else { <error> }?>

Visa signatur

Citera för svar

Permalänk
Medlem
Skrivet av jakkes:

$hitta = $_POST['hitta']; $sql = mysql_query("select * from anvandra where fornamn like '%$hitta%' ORDER BY efternamn"); if(!empty(mysql_fetch_assoc($sql)){ FÅR FEL HÄR while($row = mysql_fetch_assoc($sql)): ?> <div id="runtbox"> <br / <hr width="100%" color="#FFFFFF" /> <br /><br /> <span class="rubbe">Namn</span><br /><br /><div id="fornamnbox"> <?=$row['fornamn'];?> <?=$row['efternamn'];?> </div> <br /><br /> <span class="rubbe">Adress</span><br /><br /><div id="gatuadressbox"> <?=$row['gatuadress'];?> </div><br /><br /> <div id="postnummerbox"> <?=$row['postnummer'];?> <?=$row['ort'];?> </div> <br /><br /> <span class="rubbe">Pers. nr.</span><br /><br /><div id="personnummerbox"> <?=$row['personnummer'];?> </div><br /><br /><br /> <span class="rubbe">Bild</span><br /><br /><div id="bildbox"> <?=$row['bild'];?> </div> </div> <? endwhile; } else { OCH FÅR ETT FEL HÄR <error> }?>

Precis så har jag gjort men får syntax-fel på dom två rader jag kommenterat med fet stil. Det var krångligare än jag trodde detta

Permalänk
Medlem
Skrivet av eeeeemil:

Precis så har jag gjort men får syntax-fel på dom två rader jag kommenterat med fet stil. Det var krångligare än jag trodde detta

Kan du kanske tillhandahålla oss felmeddelandet? Är du korrekt ansluten till databasen?
Heter fältet anvandra?

Permalänk
Medlem
Skrivet av Johan_Sandmark:

Kan du kanske tillhandahålla oss felmeddelandet? Är du korrekt ansluten till databasen?
Heter fältet anvandra?

Felmeddelandet får jag i koden i dreamweaver. Att det är ett syntaxfel. När jag kör sidan blir resultatet bara ett blankt dok i browsern.
Jag är korrekt ansluten för jag kan köra sökningarna mot databasen när användare finns i databasen. Jag vill komplettera med ett meddelande om man söker på någon/något som inte finns.

Permalänk
Medlem
Skrivet av eeeeemil:

Felmeddelandet får jag i koden i dreamweaver. Att det är ett syntaxfel. När jag kör sidan blir resultatet bara ett blankt dok i browsern.
Jag är korrekt ansluten för jag kan köra sökningarna mot databasen när användare finns i databasen. Jag vill komplettera med ett meddelande om man söker på någon/något som inte finns.

Kan du prova att bara köra:

$hitta = $_POST['hitta']; $sql = die("select * from anvandra where fornamn like '%$hitta%' ORDER BY efternamn");

Die gör att anropet stannar där och hela sql-satsen skrivs ut i klartext. Ser den bra ut? Kan du köra koden ovan och kopiera hela "select ..... BY efternamn" och klistra direkt in i phpmyadmin under "SQL" och köra anropen och få ut den data du söker?

Sen en övrig kommentar är att du bör börja tänka med på säkerhet när du utvecklar, med lite elak kod i fältet "hitta" kan hela din databas tömmas. Se till att kontrollera indata i sql, tex:

$hitta = mysql_real_escape_string($_POST['hitta']);

http://sv.wikipedia.org/wiki/SQL-injektion

Permalänk
Medlem

Vilken kod använde du? Om du använde koden exakt så som dom postade så kommer du ju givetvis få ett fel i sista stycket, detta alltså:

<? endwhile; } else {
<error>
}?>

Du får ju ersätta <error> med texten du vill visa

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

Tycker det vore lättare om du skippade "while(); ... endwhile;" Kör en "while(){ ... }" istället, då kommer min kod att funka.

Visa signatur

Citera för svar

Permalänk
Medlem
Skrivet av jakkes:

Tycker det vore lättare om du skippade "while(); ... endwhile;" Kör en "while(){ ... }" istället, då kommer min kod att funka.

Öh, det var ju du som skrev med endwhile....

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Öh, det var ju du som skrev med endwhile....

Copy paste på hans kod

Visa signatur

Citera för svar

Permalänk
Medlem
Skrivet av jakkes:

$hitta = $_POST['hitta']; $sql = mysql_query("select * from anvandra where fornamn like '%$hitta%' ORDER BY efternamn"); if(!empty(mysql_fetch_assoc($sql)){ while($row = mysql_fetch_assoc($sql)): ?> <div id="runtbox"> <br / <hr width="100%" color="#FFFFFF" /> <br /><br /> <span class="rubbe">Namn</span><br /><br /><div id="fornamnbox"> <?=$row['fornamn'];?> <?=$row['efternamn'];?> </div> <br /><br /> <span class="rubbe">Adress</span><br /><br /><div id="gatuadressbox"> <?=$row['gatuadress'];?> </div><br /><br /> <div id="postnummerbox"> <?=$row['postnummer'];?> <?=$row['ort'];?> </div> <br /><br /> <span class="rubbe">Pers. nr.</span><br /><br /><div id="personnummerbox"> <?=$row['personnummer'];?> </div><br /><br /><br /> <span class="rubbe">Bild</span><br /><br /><div id="bildbox"> <?=$row['bild'];?> </div> </div> <? endwhile; } else { <error> }?>

Det där kommer nog inte visa den första matchnigem, då mysql_fetch_assoc() redan körts en gång innan while-loopen. Orkar inte komma på en lösnin på mobilen dock.

Skickades från m.sweclockers.com

Permalänk
Medlem

Personligen skulle jag göra en foreach loop.

$a = array(); while($row = mysql_fetch_assoc($sql)){ $a[] = $row; } if(empty($a)){ error error error } foreach($a as $item){ kod kod kod kod }

Visa signatur

Citera för svar

Permalänk
Medlem

Tack för alla svar, har inte hunnit testa nåt mer sen igår - ska göra ett ryck ikväll

Permalänk
Medlem

Glöm inte funktionen "mysql_num_row" som ger antalet rows en query ger.
http://se.php.mirror.edgebooster.com/manual/en/function.mysql...

Permalänk
Medlem
Skrivet av jakkes:

Personligen skulle jag göra en foreach loop.

$a = array(); while($row = mysql_fetch_assoc($sql)){ $a[] = $row; } if(empty($a)){ error error error } foreach($a as $item){ kod kod kod kod }

Provade så här, och visst funkar det - nästan. Resultatet vid en sökning som inte finns i databasen ger ett korrekt svar att inga poster hittas. Men om man söker på en post som finns levereras rätt antal poster tillbaka, men ingen info från databasen skrivs ut. Fälten visas, men tomma

$hitta = $_POST['hitta'];
$sql = mysql_query("select * from anvandra where fornamn like '%$hitta%'");
$a = array();
while($row = mysql_fetch_assoc($sql)){
$a[ ] = $row;
}
if(empty($a)){
echo "Inga poster hittades";

}
foreach($a as $item){

?><div id="runtbox">
<br />
<hr width="100%" color="#FFFFFF" />
<br /><br />
<span class="rubbe">Namn</span><br /><br /><div id="fornamnbox">
<?=$row['fornamn'];?> <?=$row['efternamn'];?>
</div>
<br /><br />
<span class="rubbe">Adress</span><br /><br /><div id="gatuadressbox">
<?=$row['gatuadress'];?>
</div><br /><br />
<div id="postnummerbox">
<?=$row['postnummer'];?> <?=$row['ort'];?>
</div> <br /><br />
<span class="rubbe">Pers. nr.</span><br /><br /><div id="personnummerbox">
<?=$row['personnummer'];?>
</div><br /><br /><br />

<span class="rubbe">Bild</span><br /><br /><div id="bildbox">
<?=$row['bild'];
}
?>

Permalänk
Medlem

Byt ut $row till $item (alltså innanför foreach).

$a = array(); while($row = mysql_fetch_assoc($sql)){ $a[] = $row; } if(empty($a)){ error error error } foreach($a as $item){ Här reprenseteras $row som $item dvs skriv $item['id'], $item['personnummer'] osv osv }

Visa signatur

Citera för svar

Permalänk
Medlem
Skrivet av jakkes:

Byt ut $row till $item (alltså innanför foreach).

$a = array(); while($row = mysql_fetch_assoc($sql)){ $a[] = $row; } if(empty($a)){ error error error } foreach($a as $item){ Här reprenseteras $row som $item dvs skriv $item['id'], $item['personnummer'] osv osv }

Jamen, jösses - det är klart haha
Hur kunde jag missa det
Tackar tackar, nu kommer det att fungera!