eisdiele Geschrieben 13. Juli 2006 Geschrieben 13. Juli 2006 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? Zitieren
etherius Geschrieben 13. Juli 2006 Geschrieben 13. Juli 2006 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 Zitieren
eisdiele Geschrieben 13. Juli 2006 Autor Geschrieben 13. Juli 2006 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 Zitieren
SNOWMAN Geschrieben 13. Juli 2006 Geschrieben 13. Juli 2006 ($_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 Zitieren
eisdiele Geschrieben 13. Juli 2006 Autor Geschrieben 13. Juli 2006 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? Zitieren
etherius Geschrieben 13. Juli 2006 Geschrieben 13. Juli 2006 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 Zitieren
eisdiele Geschrieben 13. Juli 2006 Autor Geschrieben 13. Juli 2006 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] Zitieren
SNOWMAN Geschrieben 13. Juli 2006 Geschrieben 13. Juli 2006 OK, war zu langsam... Wenn du eine genaue Suche machst, verwende ein = statt LIKE Zitieren
eisdiele Geschrieben 13. Juli 2006 Autor Geschrieben 13. Juli 2006 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 Zitieren
etherius Geschrieben 13. Juli 2006 Geschrieben 13. Juli 2006 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 Zitieren
eisdiele Geschrieben 13. Juli 2006 Autor Geschrieben 13. Juli 2006 mein sql-query ist doch die zeile hier, oder? $sql = "SELECT * FROM cds WHERE '".$_POST['auswahl']."' = '".$row['titel']."'; "; Zitieren
eisdiele Geschrieben 13. Juli 2006 Autor Geschrieben 13. Juli 2006 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> Zitieren
Empfohlene Beiträge
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.