PHP: Tutorial Ajax Suche aus einer MySQL Datenbank
Posted: Juli 25th, 2008 | Filed under: Datenbank, Programmieren, Tutorials | Tags: Ajax, Ajax Live Suche, Ajax Suche, Datenbank, Live, Live Suche, MySQL, Mysql Suche, PHP, Suche, Tutorial | 50 Comments »Heute möchte ich euch zeigen wie man Schritt für Schritt eine LiveSuche(ohne nachladen der Seite) mit PHP, HTML & Ajax realisiert.
JavaScript + PHP + MySQL = Ajax Triple Action |
Was ist Ajax ?
Asynchronous JavaScript and XML. Wenn man normalerweise auf einen Link klickt gelangt man meistens auf eine andere Seite. Die Link Url sagt dem Server, was für eine Seite wir zurückbekommen wollen. Dieser sogenannte Request kann man mit JavaScript auch ohne Neuladen der Seite erreichen. Es gibt 2 Grundsätzliche Arten von Requests: POST(wird bei Formularen verwendet) & GET(wird bei Links verwendet). Mit einem sogenannten XMLHttpRequest kann man solche Requests durchführen. Die Antwort des Servers kann man dann auslesen und den zurückgelieferten Inhalt mit JavaScript weiterverarbeiten.
Das Formular
Oft werden Anfragen auch über ein Formular abgeschickt (meistens mit POST). Da wir das Absenden unserer Anfrage per JavaScript realisieren brauchen wir kein herkömmliches Formular…
Im Prinzip reicht uns sogar ein herkömmliches Textfeld (ohne Form):
Die Eingabe eines Users wollen wir natürlich verarbeiten. Da wir eine AjaxSuche schreiben soll also bei jedem Tastendruck eine neue Anfrage an den Server gestellt werden. Per „onKeyUp“ auf dem Texteingabefeld können wir nun eine JavaScriptfunktion ausführen. Wir geben als Übergabeparameter für diese Funktion den eigenen Wert (also was im Textfeld steht) mit, um die Eingabe weiterzuverarbeiten. Zum testen ob das auch funktioniert hat, lassen wir uns unsere Eingabe als Alarmfenster ausgeben. Als Funktionsnamen nehmen wir etwas sprechendes „searchFor“. Und mit this.value können wir einfach auf den Wert des Objektes in dem die Funktion aufgerufen wird zugreifen.
Die Anfrage
Jetzt kommen wir zum schwierigsten Teil. Nun wird in userer JavaScript Methode ein xmlHttp Request erzeugt. Unsere Anfrage soll an die Seite „suche.php“ gehen. Diese URL können wir in Zeile 25 festlegen.
In Zeile 26 werden die Parameter die wir an den mit dem Request übergeben möchten gesetzt. Hier kommt unser Übergabeparameter der JavaScript Funktion ins Spiel. Dieser „suchbegriff“ wird nun dem Parameter mit dem Namen „suchbegriff“ zugewiesen. Es muss natürlich nicht der selbe Namen sein.
In Zeile 38 wird dann das Ergebnis aus dem Request (der Seite suche.php) zurückgeliefert!
Testweise schreiben wir in die Datei suche.php lediglich folgendes
Hier wird nun einfach ein beliebiger Wert ausgegeben. Um zu testen ob der HttpRequest auch funktioniert rufen wir die index.php auf und geben irgendwas ein. Sobald das erste Zeichen eingegeben wurde wird der Text aus der suche.php Datei ausgegeben.
Die Mysql Abfrage
Jetzt kümmern wir uns um die Datenbank. Hierbei sind folgende Dinge notwendig:
- Server (bei Webspace und Servern mit Datenbank fast immer „localhost„)
- Benutzername (euer Benutzername / Accountname)
- Passwort (euer Passwort (TOP SECRET!))
Wir stellen also eine Datenbankverbidung her (Zeile: 3-15) und führen das erstellte MySQL Statement aus (Zeile 19-23). Zum Statement gibt es folgendes zu sagen: „SELECT * “ markiert alle Spalten in einer Tabelle, „FROM „.$tabelle.““ wählt die Tabelle aus die in der Varialen $tabelle steht, „titel LIKE (‚%“.$_POST[„suchbegriff“].“%‘)“ stellt eine Bedingung auf die folgendes bedeutet: gib mir alle Einträge der Spalte titel aus, die wie XXXXXsuchbegriffXXXXX lauten. Also wenn ich z.B. „rlsruh“ Suche und es existiert ein Bild mit dem Titel „Karlsruhe“ wird dieses natürlich auch gefunden.
So das wars auch schon. Hier nachmal der ganze Quellcode als Textdatei.
Demo
Habe eine kleine Testtabelle erstellt mit Sehenswürdigkeiten aus Karlsruhe! Einfach mal zum Beispiel: „Wildparkstadion“ oder „Schloss„eingeben und ihr seht, schon nach dem ersten Buchstabe erscheinen alle möglichen Ergebnisse!
Quellcode
Viel Spaß damit!
Wenn man ne große Datenbank hat, ist das ziemlich ressuourcenfressend, oder?
Ansonsten ne schöne Sache.
Danke:)
Das stimmt natürlich 😀
Ist es möglich eine Fehlermeldung auszugeben, wenn kein Eintrag in der Datenbank gefunden wurde?
(Es wurde kein passender Eintrag gefunden.)
Danke
Ja das kannst du mit der funktion http://www.php.net/mysql_num_rows. Du prüfst also ob mysql_num_rows($result) gleich 0.
Hallo,
vielen Dank für das Script, funktioniert einwandfrei.
Allerdings stehe ich vor einem kleinen Problem. Bei vielen Datensätzen gibts das ja ne ellenlange Liste. Ich hätte gern nach 10 oder 12 Einträgen jeweils ein Pfeilchen zum Blättern auf eine weitere Seite. Hast du mir eventuell einen Ansatz wie ich das realisieren könnte?
Vielen Dank
Viele Grüße
Super Sache.
Kann man irgendwie gewährleisten, dass die suche erst ab 3 eingegebenen Zeichen beginnt?
Gruß
Gardinero
Hab es gerade selbst hinbekommen mit einer vorgeschalteten if-Abfrage.
Gruß
Hi! Kann man eigentlich auch mehr ausgeben als nur den Inhalt des Suchfeldes? Also geich die ganze Zeile wo der gesuchte DAtensatz drinsteht?
Gruß
Ist es möglich, dass Alle Einträge angezeigt werden, solange das Suchfeld noch frei ist?
Ich hätte gerne eine Anzeige ähnlich wie bei iTunes, es werden alle Titel angezeigt, bis man die Anzeige durch die Eingabe im Suchfeld begrenzt.
🙂 Gruß aus Berlin
[…] PHP: Tutorial Ajax Suche aus einer MySQL Datenbank […]
[…] sind in einer SQL Datenbank hinterlegt. Die Suche ansich ist leicht zu realisieren wie z.B. auf http://blog.mynotiz.de/programmieren…-datenbank-15/ beschrieben. Auch die Anforderung nach den ersten Zwei Buchstaben erst die Suche zu starten ist […]
hallo, als erstes mal das ist eine Hammer Script, ich aheb das bei mir eingebaut, und es tut echt der Hammer. Danke, ….
nur eine Sache Stört mich ein wenig, … ich muss immer erst was eintippen bevor etwas kommt, ich hätte gerne wenn nichts eingetippt wurde und das Feld noch nicht Aktiv war alle eintrage in der DIV angezeigt werden, ….
Wie kann man denn so was machen ??
Denn ich denke daran das nicht immer bei allen javaScript aktiv ist und wenn das der Fall ist würde bei mir keine Adresse gefunden 🙁 das wäre natürlich denkbar Schlecht 🙂
Sowas geht ohne Probleme: Du kannst das zum Beispiel so realisieren:
In der HTML/Javascript Datei
Quasi eine leere Suchanfrage:
< ..body onload="searchFor('')"..>
In der PHP-Datei:
Falls der Suchbegriff leer ist dann führe das gleiche MSQL – Statement aus ohne WHERE Bedingung => Sprich alle Einträge
if($_POST[„suchbegriff“] == “){
..SELECT … ohne WHERE Bedingung
}
Moin. Soweit geht alles. Aber welche Zeilen und Spalten soll ich in der Datenbank denn machen?
Also woher soll ich wissen was ich da einfügen soll?
Danke schonmal
———
Viele Grüße
Henrik
Hey finde das Tutorial gut erklärt, mach bitte weiter so, du machst gute arbeit
[…] […]
Coole sache, wie bekomme ich das Ergebnis nun in einen Layer wie man es von google oder Ähnlichem kennt?
Danke euch
Hey, sieht gut aus das Tutorial, allerdings ist das erste Bild unter „Die Anfrage“ nichtmehr verfügbar. Vielleicht kannst du das mal fixen 🙂
Hey, vielen danke für das Skript, habs an meine Bedürfnisse angepasst, funktioniert super.
1 kleiner Fehler ist mir allerdings aufgefallen: „ü“ und „y“ führt zu denselben Suchergebnissen, d.h. wenn man in deinem Bsp. nach „ü“ sucht, bekommt man auch „Pyramide“ als Ergebnis. Jemand eine Idee wie man das behebt?
Viele Grüße
Vielen Dank, gut erkannt.
Das sieht wohl nach irgend einem Umlaut Problem aus. Lösung habe ich leider auch nicht parat…
Hallo,
finde das Skript prima, kann ich super einbauen. Mir fehlt nur die Möglichkeit auf ein Wort in der Auswahl zu klicken um das Wort per Klick im Suchfeld zu übernehmen – Ist das einfach zu lösen ? Wer weiß Rat ?
Grüße
Tim
vielen dank
super !!! genau sowas habe ich zum einstieg mit ajax gesucht
Vielen Dank für das Feedback 🙂
Mittlerweile bietet es sich an, zwecks Browserkompatibilität, JavaScript-Frameworks wie beispielsweise jQuery zu verwenden.
Auch von mir ein Lob.
Ich sehe das mit der Browser-Kompatibilität anders: Lieber habe ich statt für 100% für die 90% gängigsten kompatibel (und verzichte dankend (!!) auf die Unterstützung der veralteten 10%), und spare dafür 80% an Code und / oder Bandbreite 🙂
Kleiner Hinweis: In der Praxis sollte der eingegebene Wert natürlich überprüft werden, z.B. mit mysql_real_escape_string um MySQL Injection, einen Hackerangriff, vorzubeugen
Echt gut erklährt, danke.
Hallo, 😉
Supertolles Script, wenn es doch nur auch bei mir laufen würde…
Nach Eingabe des Suchwortes erhalte ich:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\sites\ajax\suche.php on line 30
Woran mag das liegen?
Gruss, Uwe
gelöst:
Spalte in meiner Tabelle (mysql) umbenannt in „titel“
Hi,
schönes Tutorial
wollte mal fragen ob es eine möglichkeit gibt nach dem man suche.php mit javaskript aufgerufen die erhaltenen Informationen nicht mit echo im php-skript auf der website ausgibt sondern sie in javaskript weiter verarbeiten kann?
Gruss sven
Super Script. Aber wie kann ich die Ergebnisse mit Links verbinden?
Du hast meinen Abend gerettet. Danke 😉
Das freut mich zu hören 😉
Super… Komplett perfekt
You actually make it seem really easy together with your presentation but I in finding this matter to be really something that I feel I would by no means understand. It sort of feels too complex and extremely broad for me. I’m looking forward for your next publish, Ill try to get the cling of it! cgeaeckeddfg
Hi, ich nutze die Suche um nach PLZ in meiner DB zu suchen. Wenn die Suche mit einer 0(Null) beginnt kommen keine Ergebnisse. Ich selbst konnte bisher nicht rausfinden warum das so ist. 🙁 Wäre für jede Hilfe dankbar. Lg
Habe die Funktion genutzt und auf folgender Seite verbaut. Läuft perfekt!
http://www.leipziger-neuseenland-erleben.de/veranstaltungen
Hey,
das Bild 3 fehlt leider.
alert(‚hallo‘)Hallo
Definitely imagine that that you stated. Your favorite reason seemed to be at the web the simplest thing to
take into accout of. I say to you, I definitely get annoyed while people think about issues that they
just don’t recognise about. You controlled to hit the
nail upon the top and outlined out the entire thing without
having side effect , folks could take a signal.
Will likely be back to get more. Thanks
Vielen Dank für diese gute Anleitung. Mir fehlt lediglich eine Kleinigkeit, die ich bisher noch nicht umsetzen konnte. Ich würde gerne eine in der DB enthaltene URL als clickable Link ausgeben. Hast Du dazu eventuell einen Tipp. Vielen Dank bside
EDIT:
// Ergebnis wird ausgegeben mit Zeilenumbruch
while($row = mysql_fetch_object($result)){
echo utf8_encode($row->name);
echo "<br/>";
echo utf8_encode($row->nr);
echo "<br/>";
echo "<a href='$row->link' target='_blank'>Link</a>";
Hi, I think your website might be having browser compatibility issues.
When I look at your blog site in Chrome, it looks fine but
when opening in Internet Explorer, it has some overlapping.
I just wanted to give you a quick heads up!
Other then that, terrific blog!
Hallo, kann mir bitte jemand helfen!! Komme nicht zurecht, suche schon seit Tagen(bin Anfänger darum wäre ich dankbar um jede Hilfe)
Bekomme folgenden Fehler: undefined index: suchbegriff in….on line 30
Hab aber alles so übernommen wie es drinnen gestanden ist..
Danke im Voraus
Hallo,
das Ergebnis der Suche wird ja in das HTML-Dokument geschrieben. Gibt es auch die Möglichkeit ein Suchergebnis in eine Variable zu schreiben um diese dann im Ausgangs-Dokument (index.php) zu verarbeiten?
I have to thank you for the efforts you have put in writing this website.
I am hoping to check out the same high-grade content by you later on as well.
In truth, your creative writing abilities has encouraged me to get
my very own blog now 😉
ศูนย์รักษาผู้มีบุตรยากศูนย์รักษาผู้มีบุตรยาก โรงหมอจุฬารัตน์
11 อินเตอร์
ศูนย์รักษาผู้มีลูกยาก โรงหมอจุฬารัตน์ 11 อินเตอร์ : Chularat 11 IVF Center ตั้งด้วยความตั้งอกตั้งใจที่ช่วยทำให้คู่ชีวิตสามารถเอาชนะอุปสรรค สาเหตุจากสาเหตุต่างๆที่มีผลต่อการมีลูกยาก โดยกลุ่มแพทย์ผู้เชี่ยวชาญเฉพาะด้านรักษาการมีบุตรยากจากสถาบันที่เป็นที่รู้จักเป็นที่ยอมรับ ผ่านการเรียนรู้อบรมจากในและต่างชาติ และก็มีประสบการณ์มาเป็นเวลายาวนาน คอยให้คำแนะนำและดูแลผู้เจ็บป่วยอย่างครบวงจร โดยมีจุดประสงค์หลักเพื่อให้การเกื้อกูลคู่ควงที่มีปัญหาการมีลูกยาก ให้สามารถมีบุตรได้สมความหวัง ด้วยบริการทางเทคโนโลยีช่วยการเจริญวัยที่มีความล้ำยุคและก็มีมาตรฐานเป็นที่ยอมรับในระดับสากล
ศูนย์รักษาผู้มีบุตรยาก
ถ้าหากคุณแต่งงานมานานกว่า 1 ปี รวมทั้งร่วมเพศสม่ำเสมอแม้กระนั้นยังไม่ตั้งครรภ์ มีความหมายว่าคุณกำลังอยู่ใน „สภาวะการมีลูกยาก“ โดยหลักการแล้วถึงแม้ว่าภาวะนี้จะไม่ใช่โรค แต่ว่าก็เป็นปัญหาสำหรับคู่สมรสความคาดหวังอยากมีเจ้าตัวน้อย เพื่อความสมบูรณ์แบบของชีวิตครอบครัว การที่คู่รักไม่สามารถมีลูกได้อาจเป็นเพราะความแปลกอะไรบางอย่างที่ส่งผลต่อภาวการณ์การเจริญวัย ทำให้ไม่สามารถที่จะมีการปฏิสนธิได้ตามธรรมชาติ โดยอาจมีสาเหตุจากฝ่ายหญิงหรือฝ่ายชาย หรือทั้งสองฝ่าย ไหมรู้ปัจจัยศูนย์รักษาผู้มีบุตรยาก
Vielen Dank! Perfekt, macht genau das was ich suchte!!
Enter comment here.
Enter comment here.
Enter comment here.
Nützlicher Artikel, danke! Ich arbeite gerade an der Seite zet casino https://zet-casino.de/ und nutzen alle modernen Technologien. Das Konzept des adaptiven Designs impliziert das Vorhandensein eines solchen Website-Designs, das es ermöglicht, Seiten auf jedem Bildschirmformat gleichermaßen korrekt anzupassen und zu laden.