2016-07-04 3 views
2

Dies ist Mysql DB connection.phpWie Daten abgerufen und übergeben werden. in Form und Reaktion Kundenname onkeyup oder keydown json und PHP

<?php 
    $conn = new mysqli("localhost", 'root', "", "laravel"); 
    $query = mysqli_query($conn,"select * from customers"); 

    while ($result2=mysqli_fetch_assoc($query)) { 
     $data[] = $result2['customername']; 
    } 
    echo json_encode($data); 
?> 

Die json nicht reagiert onkeyup oder keyDown es die gesamte Ausgabe anzeigt. Aber ich möchte nur die aktuellen übereinstimmenden Namen anzeigen. Ich war neu bei JSON und AJAX. Ich denke, Ajax und Json antworten beide gleich.

<form action=""> 
    First name: <input type="text" id="txt1" onkeyup="showHint(this.value)"> 
    </form> 

    <p>Suggestions: <span id="txtHint"></span></p> 

    <script> 
    function showHint(str) { 
     var xhttp; 
     if (str.length == 0) { 
     document.getElementById("txtHint").innerHTML = ""; 
     return; 
     } 
     xhttp = new XMLHttpRequest(); 
     xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
      document.getElementById("txtHint").innerHTML = xhttp.responseText; 
     } 
     }; 
     xhttp.open("GET", "connection.php?q="+str, true); 
     xhttp.send(); 
    } 
</script>  

Vielen Dank für Ihre Vorschläge. Alle Vorschläge sind willkommen.

Wie in Form und Antwort auf Keyup oder Keydown und die damit verbundenen Vorschläge Kundenname sollte nach unten zeigen. Ich bin neu auf JSON und Javascript und Beispiele Websites. Danke im Voraus. Alle Vorschläge sind willkommen.

Antwort

0

Sie haben ein paar Optionen;


Einer ist, dass Sie wieder ziehen alle Daten in einem Ajax-Aufruf durch das Textfeld Eingabe in die SQL-Abfrage in einem "WHERE name LIKE %" . $input . "%'"; anhängt, aber dies wird in Bezug auf die Geschwindigkeit ein Netzwerkverkehr teuer sein.


Eine weitere Option und die, die ich für sich entscheiden würde, alle Namen in einer SELECT bekommen, wie Sie getan haben, dann RegEx in Javascript, unter Verwendung der Ergebnisse gezeigt zu filtern.

Hier ist ein guter Link zur Verwendung von regulären Ausdrücken. https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions


Edit: Nichts davon getestet wird, wie ich jetzt nicht die Mittel haben, zu testen.

Für das erste Beispiel, ich werde Sie übergeben die Abfrage über die GET und somit in Ihrer PHP-Datei zu übernehmen Sie den Code ändern, um wie folgt:

<?php 
    // Your DB connection 
    $conn = new mysqli("localhost", 'root', "", "laravel"); 
    // Initialise the query string 
    $qString = "SELECT * FROM customers"; 
    // Providing a parameter is sent in the GET request to the PHP page, look for names 
    // containing that string 
    isset($_GET['q']) ? $qString .= " WHERE customername LIKE '%" . $_GET['q'] . "%'" : ""; 

    $qHandler = mysqli_query($conn, $qString); 

    while ($qResult = mysqli_fetch_assoc($qHandler)) { 
     $data[] = $qResult['customername']; 
    } 
    echo json_encode($data); 
?> 

Also, wenn eine Anfrage über gemacht Aufruf von showHint (str) es wird diese str an die Abfrage in einer "like" -Anweisung mit den %% Wildcards anhängen. Also stellst du 'art' in das Textfeld, es werden Namen wie 'bART', 'mARTher' usw. zurückgegeben.

+0

Bitte löse deine Antwort – JBK

+0

@JBK Ich habe den obigen Kommentar erweitert, hoffe das hilft? – JokerDan

+0

Danke mein Code funktioniert nach Änderung mit Ihrem Code. Vielen Dank Herr JokerDan – JBK

Verwandte Themen