Ankündigung

Einklappen
Keine Ankündigung bisher.

AJAX Suche

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AJAX Suche

    Hi,

    befasse mich seit kurzem mit PHP, AJAX usw. und habe folgende Problemstellung:

    Auf einer HTML Seite soll ein Suchfeld angelegt werden bei dem nach dem Namen gesucht werden kann. Sobald zwei Buchstaben eingegeben sind, soll eine AJAX-Abfrage an eine PHP-Anwendung gesendet werden. Suchkriterium ist wie oben bereits genannt der Name. Sämtliche, mit den ersten zwei Buchstaben, übereinstimmenden Datensätze sollen selektiert werden, in folgende XML Struktur gepackt werden und an das Javascript zurückgemeldet werden.

    XML Struktur:

    <?xml version=“1.0“ encoding=“UTF-8“?> <ergebnis>
    <person>
    <name>Mustermann</name>
    <vorname>Max</name>
    <bereich>Bereich1</bereich>
    <bereich>Bereich2</bereich>
    <sprachen>Russisch</sprachen>
    <sprachen>Spanisch</sprachen>
    <gehalt>50000</gehalt>
    </person>

    Im Javascript (AJAX Teil) sollen diese Daten geparst werden und in die HTML Datei, in strukturierter Form, ausgegeben werden.

    Die Daten 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 kein Problem. Lediglich der Teil mit der XML Struktur und der Ausgabe bereitet mir Probleme. Vielleicht kann mir diesbezüglich jemand weiterhelfen wie sich die XML strukturierte Ausgabe realisieren lässt.

    Danke.

  • #2
    Soll es ein Autocomplete werden oder nur eine Liste/Tabelle aktualisieren?

    Was genau ist denn so schwierig für dich beim Generieren des XML? Letztlich ist das ja auch nur eine Zeichenkette, die du im einfachsten Fall mit echo ausgeben kannst.
    "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

    Kommentar


    • #3
      Eben, im einfachsten Fall:
      PHP-Code:
      <?php
      echo'<?xml version=“1.0“ encoding=“UTF-8“?> <ergebnis>\n';
      while(
      $person mysql_fetch_object($daten_der_user)) {
      echo
      "<person>
      <name>"
      .$person->name."</name>
      <vorname>"
      .$person->vorname."</name>
      ...
       "
      ;
      }
      Und den Ajaxteil (Ich würde empfehlen, dass mit jQuery zu machen):
      Code:
      <script type="text/javascript">
      function get_users(first_chars) {
           $.ajax({ url: 'url_zur.php', data: 'f_char='+first_chars, success: 
           function(data) {
                parse_xml_users(data);
           } });
      
      }
      </script>
      In der Funktion parse_xml_users musst du das XML dann in HTML "umwandeln" und vorher musst du, wenn die Eingabe mehr als 2 Buchstaben enthält, get_users mit der Textfeldvalue als Parameter aufrufen.
      [URL="http://eipert-artwork.com"]Bastian Eipert Artwork [/URL]

      Kommentar


      • #4
        Hi,

        die Ausgabe usw. funktioniert nun einwandfrei so wie ich sie haben wollte.
        Leider werden mir jedoch alle Umlaute als Fragezeichen angezeigt. Die Datenbank ist auf UTF8-General eingestellt was laut Google eigentlich das richtige sein soll. Kann es an meinem Code selbst liegen?

        Hier mal der Code der index.html

        Code:
        <html>
        <head>
        	<title>Ajax Suche</title>
        	<script type="text/javascript">
        		function searchFor(suchbegriff){
        			var xmlHttp = null;
        			// Mozilla, Opera, Safari sowie Internet Explorer 7
        			if (typeof XMLHttpRequest != 'undefined') {
        				xmlHttp = new XMLHttpRequest();
        			}
        			if (!xmlHttp) {
        				// Internet Explorer 6 und älter
        				try {
        					xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
        				} catch(e) {
        					try {
        						xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
        					} catch(e) {
        						xmlHttp  = null;
        					}
        				}
        			}
        			// Wenn das Objekt erfolgreich erzeugt wurde			
        			if (xmlHttp) {
        				var url = "suche.php";
        				var params = "suchbegriff="+suchbegriff;
        				
        				xmlHttp.open("POST", url, true);
        				
        				//Headerinformationen für den POST Request
        				xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        				xmlHttp.setRequestHeader("Content-length", params.length);
        				xmlHttp.setRequestHeader("Connection", "close");					
        			
        				xmlHttp.onreadystatechange = function () {
        					if (xmlHttp.readyState == 4) {
        						// Zurückgeliefertes Ergebnis wird in den DIV "ergebnis" geschrieben
        						document.getElementById("ergebnis").innerHTML = xmlHttp.responseText;
        					}
        				};				
        				xmlHttp.send(params);
        			}			
        		}
        	</script>
        </head>
        <body>
        	<input type="text" onKeyUp="(this.value.length >= 2) ? searchFor(this.value) : '';">
        	<div id="ergebnis"></div>
        </body>
        </html>
        und hier der Code der suche.php

        PHP-Code:
        <?php
            
        // Verbindung
            
        $server "localhost";
            
        $benutzername "user1";
            
        $passwort "";    
            
            
        $datenbank "test";

            
        // Server Verbindung herstellen
            
        mysql_connect($server,$benutzername,$passwort) or 
            die (
        "Keine Verbindung moeglich");
            
            
        // Datenbank Verbidung
            
        mysql_select_db($datenbank) or
            die (
        "Die Datenbank existiert nicht");

            
        $tabelle "manager";
            
            if (
        $_POST["suchbegriff"]){
                
        // Mysql Abfrage wird gespeichert mit den Notwendigen Parameter
                
        $sql "SELECT * FROM ".$tabelle." WHERE Name LIKE ('%".mysql_real_escape_string(utf8_decode($_POST["suchbegriff"]))."%')";
                
                
        // Mysql Abfrage wird durchgeführt
                
        $result mysql_query($sql);
                
                
        // Suchbegriff wird ausgegeben
                
        echo "Sie Suchten nach: ".$_POST["suchbegriff"]."<br/><br/>";
                
                
        // Ergebnis wird ausgegeben mit Zeilenumbruch
                //while($row = mysql_fetch_object($result)){
                    //echo utf8_encode($row->Name);
                    //echo "<br/>";
                    

        echo'<?xml version="1.0" encoding="UTF-8"?> <ergebnis>';
        while(
        $person mysql_fetch_object($result)) {
        echo
        "<person>
        <name>"
        .$person->Name."</name>;<br/>
        <vorname>"
        .$person->Vorname."</vorname>;<br/>
        <branchenerfahrung>"
        .$person->Branchenerfahrung."</branchenerfahrung>;<br/>
        <sprachen>"
        .$person->Sprachen."</sprachen>;<br/>
        <gehaltsvorstellung>"
        .$person->Gehaltsvorstellung."</gehaltsvorstellung>;<br/>
        </person>"
        ;
                
                        
                }
            }
        ?>
        Ansonsten funktioniert jetzt alles so wie es sein sollte. Vielen Dank hierfür nochmal.

        Kommentar


        • #5
          Nicht nur die Datenbank, sondern auch das PHP oder HTML muss auf UTF umgestellt werden:
          Code:
          <meta http-equiv="content-type" content="text/html;charset=utf-8">
          PHP-Code:
          header('content-type: text/html; charset=utf-8'); 
          [URL="http://eipert-artwork.com"]Bastian Eipert Artwork [/URL]

          Kommentar


          • #6
            Und die Verbindung ... steht aber so in ziemlich jedem Thread hier zu UTF-8-Problemen.
            "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

            Kommentar

            Lädt...
            X