Zum Inhalt springen

"Ungenaue" Suche in DB


Empfohlene Beiträge

Hallo,

ich hab eine Suche Programmiert, welche eine Datenbank durchsucht, allerdings funktioniert sie nur, wenn ich den kompletten Inhalt angebe, also, wenn ich zb nach "Michael" suche, dann spuckt dir die Funktion nur was aus, wenn ich "Michael" eintippe und nicht nur "Micha", oder so. Hat irgendwer ne Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

du machst deine suche wahrscheinlich so:


SELECT feld FROM tabelle WHERE feld="Michael";

richtig? Schau dir mal den syntax von "LIKE" oder "HAVING" an: http://www.sql-und-xml.de/sql-tutorial/where-auswahl-von-daten-zeilen.html

SELECT feld FROM tabelle WHERE feld LIKE "%Micha%";

Das %-Zeichen gilt hier als Platzhalter für beliebige Zeichen.

mfg

Eth

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, danke erstmal für die Hilfe :)

so sieht meine Suche zur zeit aus:

if ($_POST['auswahl']==$row['titel']&&$_POST['check']=='ch_titel')

ist für mich einfacher, da ich schon seit fast 3 jahren c programmiere

edit:

habs jetzt mal mit

($_POST['auswahl']==$row['%titel%']&&$_POST['check']=='%ch_titel%')

probiert, aber das funktioniert nicht, so spuckt er mir gar keine ergebnisse aus :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

($_POST['auswahl']==$row['%titel%']&&$_POST['check']=='%ch_titel%')

Nee, nich so.

Lieg ich richtig, das $row die Rückgabe der Datenbank enthält?

Dann ist das schon zu spät.

Irgendwo hast du ein SQL Statement, welches dann $row füllt.

Genau dort, im SQL Statement, muss das % Zeichen rein.

Also aus zB:


$sql = "SELECT * FROM users WHERE name = '".$_POST['Eingabefeld']."';";
[/php]

wird:

[php]
$sql = "SELECT * FROM users WHERE name like '%".$_POST['Eingabefeld']."%';";

Dann sollte es auch klappen

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm, die zeile sieht bei mir folgendermasen aus:

$sql = "SELECT *
FROM cds";[/PHP]

ich hab nicht wirklich viel ahnung von php (aber das kommt jetzt ja ;)). wenn ich mir des so anschaue, dann kopiert diese zeile meine komplette datenbank in das array $sql, oder? ich mein, ich hab hier erstmal vielleicht 10 datensätze, aber wenn des mal mehr werden, dann wird das ganze doch ziemlich lahm, oder?

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm, die zeile sieht bei mir folgendermasen aus:

$sql = "SELECT *
FROM cds";[/PHP]

ich hab nicht wirklich viel ahnung von php (aber das kommt jetzt ja ;)). wenn ich mir des so anschaue, dann kopiert diese zeile meine komplette datenbank in das array $sql, oder? ich mein, ich hab hier erstmal vielleicht 10 datensätze, aber wenn des mal mehr werden, dann wird das ganze doch ziemlich lahm, oder?

Richtig, das wird sehr lahm. Daher solltest du die Filterung lieber direkt in der SQL-Abfrage durchführen :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm, ok wieder bissl mehr verstanden :marine :bimei

Des hier ist meine Ausgabe, wie ich sie jetzt umgeschrieben hab, funktioniert aber nicht. Die ausgeklammerten if Bedingungen ist meine alte Suchabfrage, die jetzt aber ja rausfällt da ich nicht mehr die komplette DB in $sql kopiere.

die DB heißt cds (ist die Testdb von XAMP) in $POST gibts ch_titel, ch_interpret und ch_jahr (checkboxen) dann auswahl für den suchtext und noch genau/ungenau ob man genau bzw ungenau suchen möchte

//Ausgabe 
while($row = mysql_fetch_assoc($result))
{
if ($_POST['genau']=='genau')
{
$sql = "SELECT * FROM cds WHERE $_POST['auswahl'] LIKE $row['titel']";

//if (($_POST['auswahl']==$row['titel']&&$_POST['check']=='ch_titel')||($_POST['auswahl']==$row['interpret']&&$_POST['check']=='ch_interpret')||($_POST['auswahl']==$row['jahr']&&$_POST['check']=='ch_jahr'))
echo "<tr><td>".$row['interpret']."</td><td>".$row['titel']."</td><td>".$row['jahr']."</td>";
}
else
{
$sql = "SELECT * FROM cds WHERE $_POST['auswahl'] LIKE '%".$row['titel']."%';";
echo "<tr><td>".$row['interpret']."</td><td>".$row['titel']."</td><td>".$row['jahr']."</td>";
}
}[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok, erstmal kommen keine fehler (aber auch noch keine suchergebnisee -> Query was empty, da tüftel ich noch ein wenig rum, aber kann mir einer folgendes erklären ->

'%".$_POST['Eingabefeld']."%';";

woher kommen die ganzen hochkommatas und vorallem, warum 2x Semikolon? :eek

edit:

noch ne frage...

bevor ich in die db schreiben will, muss ich sie schon komplett auslesen, oder? :nixblick:

edit2:

gnaaa, jetzt bringt der mir hier:

  while($row = mysql_fetch_assoc($result)) 

folgenden Fehler:Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\sortieren.php on line 14

an was kann das liegen, ich hab an der zeile nichts verändert, ich les jetzt nur nicht mehr die komplette datenbank ein... hmm

Link zu diesem Kommentar
Auf anderen Seiten teilen

wie kann man denn sein posting editieren?!

also, ich raffs jetzt gar nimmer... :uff:

mysql_error bringt keine ausgabe und an der zeile


echo "<html><body>";
while($row = mysql_fetch_assoc($result))[/PHP]

hab ich rein garnichts verändert, warum kann da auf einmal ein fehler kommen?! :nixblick: vorallem kommt der fehler auch, wenn ich die komplette zeile auskommentiere...

so siehts jetzt aus:

[PHP]
//Verbindung aufbauen
$link = mysql_connect ("127.0.0.1","root","");
if (!$link) die ("MySQL-Server Verbindung fehlgeschlagen");
echo 'Verbindung zum Server erfolgreich';
echo "<br>";

//Datenbank offnen
if (!mysql_select_db(cdcol)) die ("Verbindung zur Datenbank fehlgeschlagen");
else echo 'Verbindung zur Datenbank erfolgreich<br><br>';

echo "<br><br />";

//Tabellenkopf
echo "<table border=1>";
echo "<tr><td>Interpret</td><td>Titel</td><td>Jahr</td>";


//Ausgabe
while($row = mysql_fetch_assoc($result))
{
if ($_POST['genau']=='genau')
{
//$sql = mysql_query("SELECT * FROM cds WHERE $_POST['auswahl'] = $row['titel']");

//if (($_POST['auswahl']==$row['titel']&&$_POST['check']=='ch_titel')||($_POST['auswahl']==$row['interpret']&&$_POST['check']=='ch_interpret')||($_POST['auswahl']==$row['jahr']&&$_POST['check']=='ch_jahr'))
echo "<tr><td>".$row['interpret']."</td><td>".$row['titel']."</td><td>".$row['jahr']."</td>";
}
else
{
//$sql = mysql_query("SELECT * FROM cds WHERE '".$_POST['auswahl']."' LIKE '%".$_row['titel']."%';");
echo "<tr><td>".$row['interpret']."</td><td>".$row['titel']."</td><td>".$row['jahr']."</td>";
}
}

echo "</table></body></html>";

echo mysql_error($link);

//Verbindung schliesen
mysql_close($link);
?>

Formular:

<html>

<body>

<form action ="sortieren.php" method="post"><br>

<input type="radio" name="check" value="ch_titel"> Titel

<input type="radio" name="check" value="ch_interpret"> Interpret

<input type="radio" name="check" value="ch_jahr"> Jahr <br>

<input type="text" name ="auswahl"><br>

<input type="submit" value="Anzeigen">

<input type="reset" value=" Abbrechen"><br>

<input type="radio" name="genau" value="genau"> genau

<input type="radio" name="genau" value="ungenau"> ungenau <br>

</form>

</body>

</html>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...