Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

"Ungenaue" Suche in DB

Empfohlene Antworten

Veröffentlicht

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?

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

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 :(

($_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

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?

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 :)

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]

OK, war zu langsam...

Wenn du eine genaue Suche machst, verwende ein = statt LIKE

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

Du hast einen Fehler in deinem Sql-Query. Wo genau der Fehler liegt kannst du dir mit mysql_error() ausgeben lassen :)

http://www.php.net/mysql-error

mein sql-query ist doch die zeile hier, oder?

$sql = "SELECT * FROM cds WHERE '".$_POST['auswahl']."' = '".$row['titel']."'; ";

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>

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.