Ajax Suche

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Hallo zusammen :) ,

    ich wollte fürs Intranet die Telefonliste schön übersichtlich ausgeben. Da es ja vor allem zur Erleichterung dienen soll, währe eine PHP Suche nicht sehr komfortabel. Die Benutzer sollten also "Ha" eingeben können und während sie schreiben sollen alle Einträge aus der Liste mit "Ha" oder "ha" ausgegeben werden. Soweit kein Problem, hatte diesbezüglich eine schöne Suche unter blog.mynotiz.de/programmieren/…einer-mysql-datenbank-15/ (Unten die beiden Dateien angepasst) gefunden.

    Jetzt habe ich jedoch das Problem, dass
    1. Kein Inhalt angezeigt wird, wenn die Suche leer ist. Sollte lieber so sein, dass ich vordefinierten Inhalt ausgeben könnte und erst wenn in die Suchzeile vom Benutzer angefangen wird was einzugeben sollen nur noch die Suchergebnisse erscheinen. (Also z.B. vorher die ganze Liste ausgeben und wenn man was eingibt wird der Filter eingesetzt)

    2. Ich habe die Personen auf der Telefonliste in verschiedene Abteilungen eingeteilt (Eine Tabellenspalte in MySQL) und nun versuche ich hinter der input-box der Suchleiste auch eine Auswahlbox mit den Abteilungen einzufügen. Somit will ich noch eine Art zusätzlichen Filter einstellen, bei dem man nicht nur in allen Abteilungen sondern nach einem Suchbegriff auch nur in einer bestimmten Abteilung suchen kann (Wie der Where Befehl bei MySQL)


    In PHP könnte ich das vielleicht noch einigermaßen mir zusammen bauen dass es funktioniert, in Ajax (weil noch nie benutzt) jedoch bin ich völliger Anfänger und habe keine Ahnung wie ich an den vorhandenen Code (blog.mynotiz.de/howTo/PHP-AjaxLiveSuche/code/index.txt und blog.mynotiz.de/howTo/PHP-AjaxLiveSuche/code/suche.txt) so modifizieren muss, dass meine beiden Probleme gelößt werden...

    Ich hoffe ihr habt mein Problem bzw. meine Frage verstanden und würde mich über z.B. Codebeispiele beim von mir gezeigten Code freuen :thumbsup:

    Lg,
    der Tobbe
  • Wenn du die Seite selbst per PHP generierst, kannst du einfach als Standart in den Div die ganze Liste reinmachen. Alternativ kannst du das auch einfach mit AJAX lösen.

    Ich weiß nicht direkt, wie das jetzt bei deiner Tabelle aussieht.
    Die Tabelle hat also (z.B.) die Spalten user, department, ...
    Per AJAX schickst du dann wohl per POST/GET:

    Quellcode

    1. user=Max&dep=Abteilung1

    Dann verarbeitest du die Variablen.

    Quellcode

    1. $user = (preg_match("/[A-Za-z0-9_-]*/",$_POST['user'])) ? $_POST['user'] : ""; //Variable bereinigen
    2. $departments = array("Abteilung1","Abteilung2",...); //Liste der zugelassenen Abteilungen
    3. $dep = (in_array($_POST['dep'],$departments)) ? $_POST['dep'] : ""; //Variable bereinigen
    4. $user .= "*";

    Und kannst du per SQL so abfragen:

    Quellcode

    1. SELECT * FROM `phonelist` WHERE `user` LIKE '".$user."' AND `department` = '".$dep."'
  • Danke für die klasse Antwort! :)
    Irgendwie bekomme ich es aber nicht hin, dass in mein Skript einzubauen... Damit ihr mir besser helfen könnt, poste ich hier mal den Code wodrum es geht:

    Quellcode

    1. <?php
    2. echo '<input type="text" class="search-bar" />
    3. <select name="field03">
    4. <option value="">Alle (800)</option>
    5. <option value="">Azubis (10)</option>
    6. </select>
    7. <input type="submit" value="Suchen"/>
    8. </div>
    9. <ul class="tabs-actions">
    10. <table border="0" style="height:10px;">
    11. <tr><td width="80px">Allgemein:</td>
    12. <td>
    13. <li><a href="#alle">Alle</a>, &nbsp;</li>
    14. <li><a href="#azubis">Azubis</a></li>
    15. </td>
    16. </tr></table>
    17. </ul>
    18. <div id="alle">
    19. <table id="tablesorter">
    20. <thead>
    21. <tr>
    22. <th width="105">Nachname</th>
    23. <th width="105">Vorname</th>
    24. <th width="50">Intern</th>
    25. <th width="60">PC-Fax</th>
    26. <th width="110">Privat</th>
    27. <th width="110">Handy</th>
    28. </tr>
    29. </thead>
    30. <tbody>';
    31. $sqlbefehl='
    32. SELECT status, nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    33. FROM user
    34. ORDER by nachname ASC';
    35. $ergebnis = mysql_query($sqlbefehl);
    36. while($row = mysql_fetch_object($ergebnis))
    37. {
    38. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    39. }
    40. echo '</tbody>
    41. </table>
    42. </div>
    43. <div id="azubis">
    44. <table id="tablesorter">
    45. <thead>
    46. <tr>
    47. <th width="105">Nachname</th>
    48. <th width="105">Vorname</th>
    49. <th width="50">Intern</th>
    50. <th width="60">PC-Fax</th>
    51. <th width="110">Privat</th>
    52. <th width="110">Handy</th>
    53. </tr>
    54. </thead>
    55. <tbody>';
    56. $sqlbefehl='
    57. SELECT status, nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    58. FROM user
    59. WHERE status = "azubi"
    60. ORDER by nachname ASC';
    61. $ergebnis = mysql_query($sqlbefehl);
    62. while($row = mysql_fetch_object($ergebnis))
    63. {
    64. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    65. }
    66. echo'</tbody>
    67. </table>
    68. </div>';
    69. ?>
    Alles anzeigen


    Der Code funktioniert auch soweit, sodass eine Tabelle mit allen Adressen standardmäßig aufgerufen wird und durch einen klick auf "Azubis" werden nur die Auszubildenen ausgegeben.

    Das Suchfeld ist ganz am Anfang auch schon definiert mit der Auswahlbox für "Alle" und "Azubi" (Insgesamt 26 Abteilungen). Nur wie binde ich die Beispieldateien von (blog.mynotiz.de/howTo/PHP-AjaxLiv…/code/index.txt und blog.mynotiz.de/howTo/PHP-AjaxLiv…/code/suche.txt) so ein, dass es funktioniert?

    Bedanke mich für jede Hilfe! :thumbup:
  • Danke, weiß aber leider immer noch nicht wie ich das genau einbauen muss :(

    Aber fragen wir mal so: Wir haben jetzt folgende beide Codes: blog.mynotiz.de/howTo/PHP-AjaxLiveSuche/code/index.txt und blog.mynotiz.de/howTo/PHP-AjaxLiveSuche/code/suche.txt

    Verbindung steht, Eingabe klappt, Ergebnisse werden erfolgreich nach der Eingabe angezeigt. Wie schaffe ich es, dort eine Ajax-Bedienung einzubetten? Bei einem normalen PHP Formular würde das ja so aussehen:

    Quellcode

    1. <?php
    2. if(isset($_POST['abschicken']))
    3. {
    4. // Ajax Suchergebnisse anzeigen
    5. }
    6. else
    7. {
    8. // Ganze Liste der Adressen anzeigen
    9. }
    10. ?>

    Klappt nur bei der Ajax-Suche nicht :(
  • Ok, habe den Code jetzt so zusammen gepackt, damit ihr den auch zum testen benutzen könnt und habe die Ajax-Suche jetzt so integriert wie es soll:

    index.php:

    Quellcode

    1. <?php
    2. mysql_connect ("localhost","root", "") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
    3. mysql_select_db("intranet") or die ("Die Datenbank existiert nicht.");
    4. echo ' <script type="text/javascript">
    5. function searchFor(suchbegriff){
    6. var xmlHttp = null;
    7. // Mozilla, Opera, Safari sowie Internet Explorer 7
    8. if (typeof XMLHttpRequest != \'undefined\') {
    9. xmlHttp = new XMLHttpRequest();
    10. }
    11. if (!xmlHttp) {
    12. // Internet Explorer 6 und älter
    13. try {
    14. xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    15. } catch(e) {
    16. try {
    17. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    18. } catch(e) {
    19. xmlHttp = null;
    20. }
    21. }
    22. }
    23. // Wenn das Objekt erfolgreich erzeugt wurde
    24. if (xmlHttp) {
    25. var url = "suche.php";
    26. var params = "suchbegriff="+suchbegriff;
    27. xmlHttp.open("POST", url, true);
    28. //Headerinformationen für den POST Request
    29. xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    30. xmlHttp.setRequestHeader("Content-length", params.length);
    31. xmlHttp.setRequestHeader("Connection", "close");
    32. xmlHttp.onreadystatechange = function () {
    33. if (xmlHttp.readyState == 4) {
    34. // Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
    35. document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
    36. }
    37. };
    38. xmlHttp.send(params);
    39. }
    40. }
    41. </script>
    42. <div id="search-bar">
    43. <input type="text" class="search-bar" onkeyup="searchFor(this.value);"/>
    44. <select name="field03">
    45. <option value="">Alle (130)</option>
    46. <option value="">Azubis (10)</option>
    47. <option value="">Buchhaltung (50)</option>
    48. <option value="">EDV (30)</option>
    49. <option value="">Leitung (40)</option>
    50. </select>
    51. <input type="submit" value="Suchen" class="btn-140" />
    52. </div>
    53. <ul class="tabs-actions">
    54. <table border="0" style="height:10px;">
    55. <tr><td width="80px">Allgemein:</td>
    56. <td>
    57. <li><a href="#alle">Alle</a>, &nbsp;</li>
    58. <li><a href="#azubis">Azubis</a></li>
    59. </td>
    60. </tr>
    61. <tr><td valign="top">Abteilungen:</td>
    62. <td>
    63. <li><a href="#buchhaltung">Buchhaltung</a>, &nbsp;</li>
    64. <li><a href="#edv">EDV</a>, &nbsp;</li>
    65. <li><a href="#leitung">Leitung</a>, &nbsp;</li>
    66. </td>
    67. </tr></table>
    68. <div id="ergebnis"></div>
    69. </ul>
    70. <div id="alle">
    71. <table id="tablesorter">
    72. <thead>
    73. <tr>
    74. <th width="105">Nachname</th>
    75. <th width="105">Vorname</th>
    76. <th width="50">Intern</th>
    77. <th width="60">PC-Fax</th>
    78. <th width="110">Privat</th>
    79. <th width="110">Handy</th>
    80. </tr>
    81. </thead>
    82. <tbody>';
    83. $sqlbefehl='
    84. SELECT status, nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    85. FROM cpr_user
    86. ORDER by nachname ASC';
    87. $ergebnis = mysql_query($sqlbefehl);
    88. while($row = mysql_fetch_object($ergebnis))
    89. {
    90. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    91. }
    92. echo'</tbody>
    93. </table>
    94. </div>
    95. <div id="azubis">
    96. <table id="tablesorter">
    97. <thead>
    98. <tr>
    99. <th width="105">Nachname</th>
    100. <th width="105">Vorname</th>
    101. <th width="50">Intern</th>
    102. <th width="60">PC-Fax</th>
    103. <th width="110">Privat</th>
    104. <th width="110">Handy</th>
    105. </tr>
    106. </thead>
    107. <tbody>';
    108. $sqlbefehl='
    109. SELECT status, nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    110. FROM cpr_user
    111. Where status = "azubi"
    112. ORDER by nachname ASC';
    113. $ergebnis = mysql_query($sqlbefehl);
    114. while($row = mysql_fetch_object($ergebnis))
    115. {
    116. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    117. }
    118. echo'</tbody>
    119. </table>
    120. </div>';
    121. function bereiche ($var) {
    122. echo' <div id="'.$var.'">
    123. <table id="tablesorter">
    124. <thead>
    125. <tr>
    126. <th width="105">Nachname</th>
    127. <th width="105">Vorname</th>
    128. <th width="50">Intern</th>
    129. <th width="60">PC-Fax</th>
    130. <th width="110">Privat</th>
    131. <th width="110">Handy</th>
    132. </tr>
    133. </thead>
    134. <tbody>';
    135. $sqlbefehl="
    136. SELECT nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    137. FROM cpr_user
    138. WHERE abteilung = '".$var."'
    139. ORDER by nachname ASC";
    140. $ergebnis = mysql_query($sqlbefehl);
    141. while($row = mysql_fetch_object($ergebnis))
    142. {
    143. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    144. }
    145. echo '</tbody>
    146. </table>
    147. </div>';
    148. }
    149. bereiche("buchhaltung");
    150. bereiche("leitung");
    151. bereiche("edv");
    152. echo'<br/>
    153. <br/>
    154. <br/>
    155. </div>
    156. </li>
    157. </ul>
    158. </div>
    159. </div>';
    160. ?>
    Alles anzeigen


    suche.php:

    Quellcode

    1. <?php
    2. // Verbindung
    3. $server = "localhost";
    4. $benutzername = "root";
    5. $passwort = "";
    6. $datenbank = "cpr_intranet";
    7. // Server Verbindung herstellen
    8. mysql_connect($server,$benutzername,$passwort) or
    9. die ("Keine Verbindung moeglich");
    10. // Datenbank Verbidung
    11. mysql_select_db($datenbank) or
    12. die ("Die Datenbank existiert nicht");
    13. if ($_POST["suchbegriff"]){
    14. // Mysql Abfrage wird gespeichert mit den Notwendigen Parameter
    15. $sql = "SELECT * FROM cpr_user WHERE vorname LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    16. nachname LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    17. tel_intern LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    18. tel_pcfax LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    19. tel_privat LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    20. tel_handy LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    21. abteilung LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')";
    22. // Mysql Abfrage wird durchgeführt
    23. $result = mysql_query($sql);
    24. // Suchbegriff wird ausgegeben
    25. echo "Sie Suchten nach: ".$_POST["suchbegriff"]."<br/><br/>";
    26. echo '
    27. <table id="tablesorter">
    28. <thead>
    29. <tr>
    30. <th width="105">Nachname</th>
    31. <th width="105">Vorname</th>
    32. <th width="50">Intern</th>
    33. <th width="60">PC-Fax</th>
    34. <th width="110">Privat</th>
    35. <th width="110">Handy</th>
    36. </tr>
    37. </thead>
    38. <tbody>';
    39. // Ergebnis wird ausgegeben mit Zeilenumbruch
    40. while($row = mysql_fetch_object($result)){
    41. echo "<tr><td>".htmlentities($row->nachname)."</td><td>".htmlentities($row->vorname)."</td><td>".htmlentities($row->tel_intern)."</td><td>".htmlentities($row->tel_pcfax)."</td><td>".htmlentities($row->tel_privat)."</td><td>".htmlentities($row->tel_handy)."</td></tr>";
    42. }
    43. echo'</tbody>
    44. </table>
    45. </div>';
    46. }
    47. ?>
    Alles anzeigen



    Läuft auch ganz gut so wie ich mir das nun zusammen gelegt habe, nur habe ich genau die Probleme die ich im ersten Post schon angedeutet habe:
    Inhalt ausblenden
    Normalerweise werdeb ja in der index.php ja standardmäßig schon Listen angezeigt womit man bisher per Div hin und her switchen kann. Zusätzlich soll ja auch noch die Suche sein. Wenn man jetzt was eingibt, werden die Suchergebnisse einfach ausgegeben und der bisherige Inhalt wird nach unten unter die Ergebnisse geschoben. Das soll natürlich nicht sein, wenn man was in die Suchmaschine eingibt sollen NUR die Ergebnisse angezeigt werden und wenn die input-Box leer ist, soll der normale Inhalt angezeigt werden.

    Auswahlbox
    Ganz oben im Code bzw. in der Ausgabe der index.php sieht man eine Auswahlbox der gegebenen Abteilungen. Wenn man (wie standardmäßig ausgewählt) "Alle" auswählt, werden die Suchmaschine aus allen Datensätzen ausgegeben. Wird jedoch nur "EDV" ausgewählt, soll der Suchbegriff auch nur bei allen Datensätzen gesucht werden, die in der Spalte "abteilung" den Wert "edv" stehen haben.

    Ich hoffe ihr könnt mir da helfen!

    Danke! :)
  • Hi,
    die Anforderungen sind nun klar. Aber wo sind die Probleme bei der Umsetzung ;)

    Inhalt ausblenden. Wenn du mit zwei Containern arbeitest hast du den Vorteil, dass du zwischen diesen hin- und herspringen kannst. Je nachdem ob die Sucheingabe leer oder voll ist.

    Quellcode

    1. function switch(sucheingabe) {
    2. var x = document.getElementById('hauptcontainer');
    3. var y = document.getElementById('suchcontainer');
    4. x.style.display = sucheingabe == "" ? "block" : "none";
    5. y.style.display = sucheingabe != "" ? "block" : "none";
    6. }


    Auswahlbox.
    Gib deiner Auswahlbox eine ID. Diese kannst du dann einfach via ID ansprechen.
    Wenn du eine Mehrfachauswahl erlaubst, ist es nicht ganz so trivial, das mit JavaScript durchzugeben. Aber dazu habe ich mal ein JavaScript erstellt, siehe [wiki]Formulare mit AJAX.. und ohne[/wiki]
  • Danke, habe jetzt mal beim ersten Problem folgendes versucht:

    Quellcode

    1. <script type="text/javascript">
    2. function switch(sucheingabe) {
    3. var x = document.getElementById('hauptcontainer');
    4. var y = document.getElementById('suchcontainer');
    5. x.style.display = sucheingabe == "" ? "block" : "none";
    6. y.style.display = sucheingabe != "" ? "block" : "none";
    7. }
    8. </script>
    9. [.....]
    10. <input type="text" class="search-bar" onkeyup="searchFor(this.value);" onkeyup="switch(this.value);"/>
    11. [.....]
    12. <div id="hauptcontainer">Test</div>
    13. <div id="suchcontainer">Test2</div>
    Alles anzeigen


    Was mache ich falsch?
  • Ich weiß jetzt nicht, wie dein aktueller Quelltext aussieht, aber falls du die Funktion searchFor noch nicht implementiert hast, dann kann dies dazu führen, dass es bei dir nicht funktioniert.
    Versuche es einfach mal mit

    Quellcode

    1. <input type="text" class="search-bar" onkeyup="umschalter(this.value);" onkeyup="searchFor(this.value);" />

    Dann führt er zuerst umschalter() aus. Noch ein Tipp: Vor / kommt noch ein Leerzeichen, wie du oben siehst.
    Dank der toleranten Parser der Browser wird es wahrscheinlich auch ohne funktionieren, aber man sollte doch darauf achten korrektes (X)HTML zu schreiben.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Interessant, in der Reihenfolge klappt es wirklich! (Wobei sich das für mich jetzt nicht gerade logisch erklärt... :D)

    Wenn ich jetzt etwas eingebe erscheint "Test2" und wenn ich es aus dem Suchfeld wieder lösche "Test". Genau so soll es sein, jedoch werden beim Aufruf der Seite automatisch beide Container angezeigt? Möchte ja, dass wenn das Suchfeld leer ist (Was es ja beim Aufruf des Scriptes immer ist), dass dann die Standardtabelle (In dem Beispiel also "Test") angezeigt wird - Wie muss ich da den Code anpassen?

    Danke auf jeden Fall :D
  • Du könntest folgendes in deinen Code einfügen: <body onload="umschalter('')">
    Damit wird nach dem Laden der Seite die Funktion umschalter() ausgeführt. Ich habe dazu noch einen leeren String übergeben, damit die if-Abfrage korrekt arbeitet.

    Zu der Reihenfolge: Funktioniert searchFor() denn? Wenn du die Funktion noch nicht deklariert hast, dann kommt es zu einem Fehler, wodurch die weiteren onkeyup-Events nicht mehr ausgeführt werden.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Hey, super! Das klappt nun auch :)

    Das letzte Problem was ich jetzt habe ist, dass das Div für die Suchausgabe anscheinend nicht in den Container passt. Habe es so eingebaut:

    Quellcode

    1. <div id="suchcontainer"><div id="ergebnis"></div></div>
    2. <div id="hauptcontainer">
    3. [.... der andere Code ....]
    4. </div>


    Der Hauptcontainer wird auch angezeigt, nur wenn etwas ins Input-Feld eingegeben wurde wird nichts ausgegeben?! Tausche ich nun "<div id="ergebnis"></div>" ganz Stumpf mit dem Text "Test", wird Test jedoch ganz normal ausgegeben wenn ich etwas eingebe.

    PS: Die searchFor-Funktion ist vorhanden, siehe den Code: Ajax Suche
  • Ich weiß nicht ob ich dich richtig verstanden habe.

    Du gibst etwas ein und der Container wird eingeblendet, hat aber keinen Inhalt?
    Hast du schonmal versucht mit einem Debugger wie Firebug die Antwort des Servers abzufangen?

    Hat mir als ich mit Ajax rumhantiert habe echt geholfen xD

    Quellcode

    1. if (xmlHttp) {
    2. var url = "suche.php?suchbegriff="+suchbegriff;
    3. xmlHttp.open("POST", url, true);
    4. //Headerinformationen für den POST Request
    5. xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    6. xmlHttp.setRequestHeader("Content-length", params.length);
    7. xmlHttp.onreadystatechange = function () {
    8. if (xmlHttp.readyState == 4) {
    9. // Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
    10. document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
    11. }
    12. };
    13. }
    Alles anzeigen


    Versuch es mal so. Auf die Daten greifst du dann per $_GET zu.
    Sonst poste mal Link zu der Suche dann debugge ich das mal xD

    n0x-f0x
    </nobrain>
  • n0x-f0x schrieb:

    Ich weiß nicht ob ich dich richtig verstanden habe.

    Dann gebe ich euch mal meinen aktuellen Code, damit ihr mein Problem vielleicht besser versteht:

    index.php

    Quellcode

    1. <?php
    2. mysql_connect ("localhost","root", "") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch");
    3. mysql_select_db("cpr_intranet") or die ("Die Datenbank existiert nicht.");
    4. echo ' <script type="text/javascript">
    5. function searchFor(suchbegriff){
    6. var xmlHttp = null;
    7. // Mozilla, Opera, Safari sowie Internet Explorer 7
    8. if (typeof XMLHttpRequest != \'undefined\') {
    9. xmlHttp = new XMLHttpRequest();
    10. }
    11. if (!xmlHttp) {
    12. // Internet Explorer 6 und älter
    13. try {
    14. xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
    15. } catch(e) {
    16. try {
    17. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    18. } catch(e) {
    19. xmlHttp = null;
    20. }
    21. }
    22. }
    23. // Wenn das Objekt erfolgreich erzeugt wurde
    24. if (xmlHttp) {
    25. var url = "suche.php";
    26. var params = "suchbegriff="+suchbegriff;
    27. xmlHttp.open("POST", url, true);
    28. //Headerinformationen für den POST Request
    29. xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    30. xmlHttp.setRequestHeader("Content-length", params.length);
    31. xmlHttp.setRequestHeader("Connection", "close");
    32. xmlHttp.onreadystatechange = function () {
    33. if (xmlHttp.readyState == 4) {
    34. // Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
    35. document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
    36. }
    37. };
    38. xmlHttp.send(params);
    39. }
    40. }
    41. function umschalter(sucheingabe) {
    42. var x = document.getElementById(\'hauptcontainer\');
    43. var y = document.getElementById(\'suchcontainer\');
    44. x.style.display = sucheingabe == "" ? "block" : "none";
    45. y.style.display = sucheingabe != "" ? "block" : "none";
    46. }
    47. </script>
    48. <body onload="umschalter(\'\')">
    49. <div id="search-bar">
    50. <input type="text" class="search-bar" onkeyup="umschalter(this.value);" onkeyup="searchFor(this.value);" />
    51. <select name="field03">
    52. <option value="">Alle (130)</option>
    53. <option value="">Azubis (10)</option>
    54. <option value="">Buchhaltung (50)</option>
    55. <option value="">EDV (30)</option>
    56. <option value="">Leitung (40)</option>
    57. </select>
    58. <input type="submit" value="Suchen" class="btn-140" />
    59. </div>
    60. <div id="suchcontainer"><div id="ergebnis"></div></div>
    61. <div id="hauptcontainer">
    62. <ul class="tabs-actions">
    63. <table border="0" style="height:10px;">
    64. <tr><td width="80px">Allgemein:</td>
    65. <td>
    66. <li><a href="#alle">Alle</a>, &nbsp;</li>
    67. <li><a href="#azubis">Azubis</a></li>
    68. </td>
    69. </tr>
    70. <tr><td valign="top">Abteilungen:</td>
    71. <td>
    72. <li><a href="#buchhaltung">Buchhaltung</a>, &nbsp;</li>
    73. <li><a href="#edv">EDV</a>, &nbsp;</li>
    74. <li><a href="#leitung">Leitung</a>, &nbsp;</li>
    75. </td>
    76. </tr></table>
    77. </ul>
    78. <div id="alle">
    79. <table id="tablesorter">
    80. <thead>
    81. <tr>
    82. <th width="105">Nachname</th>
    83. <th width="105">Vorname</th>
    84. <th width="50">Intern</th>
    85. <th width="60">PC-Fax</th>
    86. <th width="110">Privat</th>
    87. <th width="110">Handy</th>
    88. </tr>
    89. </thead>
    90. <tbody>';
    91. $sqlbefehl='
    92. SELECT status, nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    93. FROM cpr_user
    94. ORDER by nachname ASC';
    95. $ergebnis = mysql_query($sqlbefehl);
    96. while($row = mysql_fetch_object($ergebnis))
    97. {
    98. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    99. }
    100. echo'</tbody>
    101. </table>
    102. </div>
    103. <div id="azubis">
    104. <table id="tablesorter">
    105. <thead>
    106. <tr>
    107. <th width="105">Nachname</th>
    108. <th width="105">Vorname</th>
    109. <th width="50">Intern</th>
    110. <th width="60">PC-Fax</th>
    111. <th width="110">Privat</th>
    112. <th width="110">Handy</th>
    113. </tr>
    114. </thead>
    115. <tbody>';
    116. $sqlbefehl='
    117. SELECT status, nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    118. FROM cpr_user
    119. Where status = "azubi"
    120. ORDER by nachname ASC';
    121. $ergebnis = mysql_query($sqlbefehl);
    122. while($row = mysql_fetch_object($ergebnis))
    123. {
    124. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    125. }
    126. echo'</tbody>
    127. </table>
    128. </div>';
    129. function bereiche ($var) {
    130. echo' <div id="'.$var.'">
    131. <table id="tablesorter">
    132. <thead>
    133. <tr>
    134. <th width="105">Nachname</th>
    135. <th width="105">Vorname</th>
    136. <th width="50">Intern</th>
    137. <th width="60">PC-Fax</th>
    138. <th width="110">Privat</th>
    139. <th width="110">Handy</th>
    140. </tr>
    141. </thead>
    142. <tbody>';
    143. $sqlbefehl="
    144. SELECT nachname, vorname, tel_intern, tel_pcfax, tel_privat, tel_handy
    145. FROM cpr_user
    146. WHERE abteilung = '".$var."'
    147. ORDER by nachname ASC";
    148. $ergebnis = mysql_query($sqlbefehl);
    149. while($row = mysql_fetch_object($ergebnis))
    150. {
    151. echo "<tr><td>$row->nachname</td><td>$row->vorname</td><td>$row->tel_intern</td><td>$row->tel_pcfax</td><td>$row->tel_privat</td><td>$row->tel_handy</td></tr>";
    152. }
    153. echo '</tbody>
    154. </table>
    155. </div>';
    156. }
    157. bereiche("buchhaltung");
    158. bereiche("leitung");
    159. bereiche("edv");
    160. echo'
    161. </div></div><br/>
    162. <br/>
    163. <br/>
    164. </div>
    165. </li>
    166. </ul>
    167. </div>
    168. </div>';
    169. ?>
    Alles anzeigen


    suche.php

    Quellcode

    1. <?php
    2. // Verbindung
    3. $server = "localhost";
    4. $benutzername = "root";
    5. $passwort = "";
    6. $datenbank = "cpr_intranet";
    7. // Server Verbindung herstellen
    8. mysql_connect($server,$benutzername,$passwort) or
    9. die ("Keine Verbindung moeglich");
    10. // Datenbank Verbidung
    11. mysql_select_db($datenbank) or
    12. die ("Die Datenbank existiert nicht");
    13. if ($_POST["suchbegriff"]){
    14. // Mysql Abfrage wird gespeichert mit den Notwendigen Parameter
    15. $sql = "SELECT * FROM cpr_user WHERE vorname LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    16. nachname LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    17. tel_intern LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    18. tel_pcfax LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    19. tel_privat LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    20. tel_handy LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')OR
    21. abteilung LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')";
    22. // Mysql Abfrage wird durchgeführt
    23. $result = mysql_query($sql);
    24. // Suchbegriff wird ausgegeben
    25. echo "Sie Suchten nach: ".$_POST["suchbegriff"]."<br/><br/>";
    26. echo '
    27. <table id="tablesorter">
    28. <thead>
    29. <tr>
    30. <th width="105">Nachname</th>
    31. <th width="105">Vorname</th>
    32. <th width="50">Intern</th>
    33. <th width="60">PC-Fax</th>
    34. <th width="110">Privat</th>
    35. <th width="110">Handy</th>
    36. </tr>
    37. </thead>
    38. <tbody>';
    39. // Ergebnis wird ausgegeben mit Zeilenumbruch
    40. while($row = mysql_fetch_object($result)){
    41. echo "<tr><td>".htmlentities($row->nachname)."</td><td>".htmlentities($row->vorname)."</td><td>".htmlentities($row->tel_intern)."</td><td>".htmlentities($row->tel_pcfax)."</td><td>".htmlentities($row->tel_privat)."</td><td>".htmlentities($row->tel_handy)."</td></tr>";
    42. }
    43. echo'</tbody>
    44. </table>
    45. </div>';
    46. }
    47. ?>
    Alles anzeigen


    In Zeile 70 und 77 beginnen dabei die Container. Der Hauptcontainer wird angezeigt, wenn ich jedoch nun etwas eingebe ins Feld. wird kein Content angezeigt?
  • Ich kann jetzt auf den ersten Blick keinen Fehler erkennen. Hast du denn mal überprüft, ob dein Ajax Request auch ausgeführt wird und du die erwartete Antwort bekommst? Sowas kann man, wie bereits erwähnt sehr gut mit Firebug und Firefox nach gucken.
    Ansonsten würde ich mich auch über ein Live Beispiel freuen, da wir ja nicht die Daten haben um ein funktionierendes Beispiel mit PHP zu erstellen. Also einfach mal die Dateien auf deinen Webspace hoch laden und den Link posten.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Ich würd mir ja gerade Daten ausdenken und alles auf einen Server tun wenn ich nicht gerade Ferien und wegefahren... (jaja, (deutsche Grammatik && Schüler) == SCHLECHT)

    wenn du das irgendwo hosten könntest wäre echt gut. Ich habe jz leider nicht die Zeit/Lust deinen ganzen Code durchzusuchen wobei ich es wahrscheinlich nach diesem Post eh tun werde xD

    Also, bitte mal i-wo hosten...

    n0x-f0x

    Edit : Ja, ich habe angefangen zu lesen xD
    AjaxFactoryPattern.js

    Quellcode

    1. function getXMLHttpRequestObject ()
    2. {
    3. if (window.XMLHttpRequest)
    4. {
    5. return new XMLHttpRequest();
    6. } else if (window.ActiveXObject)
    7. {
    8. var msxml = new Array ( 'Msxml2.XMLHTTP.5.0',
    9. 'Msxml2.XMLHTTP.4.0',
    10. 'Msxml2.XMLHTTP.3.0',
    11. 'Msxml2.XMLHTTP.6.0',
    12. 'Msxml2.XMLHTTP.7.0',
    13. 'Msxml2.XMLHTTP');
    14. for (var i = 0; i < msxml.length; i++)
    15. {
    16. try
    17. {
    18. return new ActiveXObject(msxml[i]);
    19. } catch (e) {}
    20. }
    21. }
    22. throw new Error('XMLHttpRequest Object can not be created');
    23. }
    Alles anzeigen


    JS für die index.php (versuch das mal zu debuggen oder hoste das & dann link)

    Quellcode

    1. <script type="text/javascript" language="javascript" src="AjaxFactoryPattern.js"></script>
    2. <script type="text/javascript">
    3. var xmlHttp = getXMLHttpRequestObject ()
    4. function searchFor(suchbegriff){
    5. if (suchbegriff != "")
    6. {
    7. // Wenn das Objekt erfolgreich erzeugt wurde
    8. if (xmlHttp) {
    9. var url = "suche.php";
    10. var params = "suchbegriff="+suchbegriff;
    11. xmlHttp.open("POST", url, true);
    12. xmlHttp.onreadystatechange = function () {
    13. if (xmlHttp.readyState == 4) {
    14. // Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
    15. umschalter(xmlHttp.responseText);
    16. }
    17. };
    18. //Headerinformationen für den POST Request
    19. xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    20. xmlHttp.send(params);
    21. } else {
    22. alert("Fehler Dings Bums!");
    23. }
    24. } else
    25. {
    26. umschalter(suchbegriff);
    27. }
    28. }
    29. function umschalter(suchergebniss) {
    30. var x = document.getElementById(\'hauptcontainer\');
    31. var y = document.getElementById(\'suchcontainer\');
    32. if(suchergebniss == "")
    33. {
    34. x.style.display = "block"
    35. y.style.display = "none";
    36. } else {
    37. document.getElementById("ergebnis").innerHTML = suchergebniss;
    38. y.style.display = "block"
    39. x.style.display = "none";
    40. }
    41. }
    42. </script>
    Alles anzeigen

    Wenn du das JS benutzt musst du umschalter(this.value) aus dem onkeyup vom input field nehmen, sonst wird einiges falsch laufen.

    wenn ich jedoch nun etwas eingebe ins Feld. wird kein Content angezeigt?

    Doch, der ist nur leer...

    PS: Das nächste mal wenn du in einem Forum ein Problem hast tu den Leuten doch den gefalllen und poste möglichst wenig Code... Man hätte als Beispiel die Formatierung (Tabellen) weglassen können, weil die Meisten oder vllt. bin ich auch der einzige, naja ich mag halt nicht unnützen Code lesen wo zu 99% kein Fehler drin steckt... Nicht böse gemeint ok?
    </nobrain>

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von n0x-f0x ()