Suchfunktion in PHP/SQL

iLu_is_a_loser

Erfahrenes Mitglied
Hallo

ich erarbeite mir gerade eine Suchfunktion!
Nun ist mein Problem, das wenn ich was in suche eingebe er auch nur die Sätze aus der Datenbank liest, wo genau dies drinne steht!

Sprich wenn ich nach
Hamburg suche findet er zB nicht Hamburger :)

PHP:
$sql = "SELECT * FROM benutzer WHERE (id LIKE '".mysql_real_escape_string($_POST['suche'])."') OR (benutzername LIKE '".mysql_real_escape_string($_POST['suche'])."') OR (email LIKE '".mysql_real_escape_string($_POST['suche'])."')";

so sieht die Suchabfrage momentan aus! Könnt ihr mir helfen?


gruß
 
Du benutzt zwar die LIKE richtig, aber du setzt keine Wildcards ein.

Die Wildcards in MySQL sind % für eine beliebige Anzahl von Zeichen (einschließlich NULL).
Und _ für genau ein Zeichen.
 
Danke Felix

hier ist noch die Lösung, falls es noch jemand braucht!

PHP:
$sql = "SELECT * FROM benutzer WHERE (id LIKE '%".mysql_real_escape_string($_POST['suche'])."%') OR (benutzername LIKE '%".mysql_real_escape_string($_POST['suche'])."%') OR (email LIKE '%".mysql_real_escape_string($_POST['suche'])."%')";
 
Ich arbeite auch zur Zeit an einer Suchfunktion für meine Zitatdatenbank.

So sieht der Quellcode für mein Suchformular aus:

HTML:
Zitatsuche            <form action="zitatsuche.php" method="post">
Autorensuche: &nbsp;&nbsp;<input type="text" name="Autorensuche" maxlength="30" size="20"><br>Stichwortsuche: <input type="text" name="Stichwortsuche" maxlength="20"><br><input type="submit" value="Suchen"></td>

und so sieht die entsprechende Stelle in der Datei "zitatuche.php" aus:

PHP:
<?php

include 'dbconnect.php';
   $ergebnis = mysql_query("SELECT * FROM `Zitate` WHERE Autor LIKE '%".$_POST['Autorensuche']."%' OR Zitat LIKE '%". $_POST['Stichwortsuche']."%'  ORDER BY `Autor` ASC");
while($daten = mysql_fetch_assoc($ergebnis)) {
    echo "<p> ".htmlentities($daten["Zitat"]);
    echo "<br /> ".htmlentities($daten["Autor"]);
    echo "</p><hr>";
} 
?>

mein Problem ist jetzt, dass mir am Ende eben trotzdem alle Datensätze aus der Mysql Tabelle angezegt werden.

Hoffe ihr könnt mir helfen, ich komme absolut nicht weiter:confused:
 
Die Sache bei dir ist jetzt folgende, wenn eines der beiden Felder leer ist, findet er natürlich alle Treffer, da '%%' alles findet.

Ich würde es so umsetzen:

PHP:
if(isset($_POST['Autorensuche']) AND !empty($_POST['Autorensuche']) AND isset($_POST['Stichwortsuche']) AND !empty($_POST['Stichwortsuche']))
{
  $where = "Autor LIKE '%".$_POST['Autorensuche']."%' OR Zitat LIKE '%". $_POST['Stichwortsuche']."%' ";
} elseif(isset($_POST['Autorensuche']) AND !empty($_POST['Autorensuche']))
{
  $where = "Autor LIKE '%".$_POST['Autorensuche']."%'";
} elseif(isset($_POST['Stichwortsuche']) AND !empty($_POST['Stichwortsuche']))
{
  $where = "Zitat LIKE '%". $_POST['Stichwortsuche']."%' ";
} else {
  $where = '1';
}

$sql = "SELECT * FROM `Zitate` WHERE ".$where." ORDER BY `Autor` ASC";

Und dann ganz normal weiter.
 
Ich hab meinen Quelltext nun folgendermaßen geändert:

PHP:
<?php

include 'dbconnect.php';

   if(isset($_POST['Autorensuche']) AND !empty($_POST['Autorensuche']) AND isset($_POST['Stichwortsuche']) AND !empty($_POST['Stichwortsuche']))
{
  $where = "Autor LIKE '%".$_POST['Autorensuche']."%' OR Zitat LIKE '%". $_POST['Stichwortsuche']."%' ";
} elseif(isset($_POST['Autorensuche']) AND !empty($_POST['Autorensuche']))
{
  $where = "Autor LIKE '%".$_POST['Autorensuche']."%'";
} elseif(isset($_POST['Stichwortsuche']) AND !empty($_POST['Stichwortsuche']))
{
  $where = "Zitat LIKE '%". $_POST['Stichwortsuche']."%' ";
} else {
  $where = '1';
}

$sql = "SELECT * FROM `Zitate` WHERE ".$where." ORDER BY `Autor` ASC";
   
while($daten = mysql_fetch_assoc($sql)) {
    echo "<p> ".htmlentities($daten["Zitat"]);
    echo "<br /> ".htmlentities($daten["Autor"]);
    echo "</p><hr>";
} 
?>

Nun gibt mir das Script aber folgenden Fehler wenn ich versuch etwas zu suchen:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /mnt/cr1/08/369/00000016/htdocs/zitate/zitatsuche.php on line 62

Zeile 62 ist diese hier: "while($daten = mysql_fetch_assoc($sql)) {"
 
mysql_query darf natürlich nicht fehlen ;)

PHP:
$sql = mysql_query("SELECT * FROM `Zitate` WHERE ".$where." ORDER BY `Autor` ASC") or die(mysql_error());
 
Zuerst einmal vielen herzlichen Danke, es funktioniert:)
In der Hoffnung eure Geduld nicht zu sehr zu strapazieren, wollte ich mal fragen, wie ich es jetzt noch anstelle, dass dem User eine Meldung angezeigt wird, wenn die Suche keine Übereinstimmungen ergeben hat.
 
PHP:
if(mysql_num_rows($sql) > 0) {
while($daten = mysql_fetch_assoc($sql)) {
    echo "<p> ".htmlentities($daten["Zitat"]);
    echo "<br /> ".htmlentities($daten["Autor"]);
    echo "</p><hr>";
}  
} else {
  echo "Keine &Uuml;bereinstimmungen gefunden";
}
 
Zurück