Datenbankabfrage funktioniert nicht mit AJAX

Hallo Leute
Ich brauche hilfe bei einer Datenabfrage mit Ajax und PHP.
Ich hab heute zum ersten mal AJAX benutzt und möchte nun, dass nachdem man in einen Textfeld ein Begriff eingibt und mit onchange mit AJAX in meiner Datenbank gesucht werden soll.
Aus irgend einen Grund findet der mit den Operanten = (in der SQL-Abfrage) nichts (auch wenn ich ein Begriff eingebe der 1 zu 1 in der Datenbank in der entschrechenden Tabelle steht). Kurios wird es erst, wenn ich in der SQL-Abfrage LIKE %....% einbaue; dann werden nähmlich alle Datensätze der Spalte ausgeben.

HTML-Quellcode:
HTML:
<html>
<script type="text/javascript">
function abfrageStarten(textfeld){
    if(window.XMLHttpRequest){
        var abfrage = new XMLHttpRequest();
    }
    else{
        abfrage = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    abfrage.onreadystatechange=function(){
        document.getElementById(textfeld).value = abfrage.responseText;
    }

    abfrage.open("POST","datensuche.php",true);
    abfrage.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    abfrage.send("textfeld="+ textfeld + "&daten=" + document.getElementById(textfeld).value);
}

</script>
<body>
<input type="text" id="beschreibung" onchange="abfrageStarten(this.id)">
</body>
</html>
PHP-Quellcode:
PHP:
<?php
header('Content-Type: text/html; charset=utf-8'); // sorgt für die korrekte Kodierung
header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0'); // ist mal wieder wichtig wegen IE

mysql_connect("localhost","root")
    or die("Fehler beim verbinden mit dem Datenbankserver!!");    
mysql_select_db("datenbank")
    or die("Fehler dem verbinden mit der Datenbank!!!");

$suche = mysql_query("SELECT * FROM werkzeug WHERE ".$_POST["textfeld"]." LIKE '".$_POST["daten"]."%'");
while($daSa = mysql_fetch_assoc($suche)){
    echo $daSa["beschreibung"];
}
?>

Weiss einer warum das so ist und wie man das Problem beheben kann?
 
Zuletzt bearbeitet:
In solchen Fällen hilft es oft, wenn man sich mit Firebug die gesendeten Anfragen anschaut. Dann sieht man meistens recht schnell, ob die Requests richtig erzeugt werden, ob die Rückgabewerte stimmen oder ob irgendwo ein Fehler im Code ist.

Außerdem solltest du deine Datenbankabfrage dahingehend modifizieren, dass die Eingabevariablen nicht ohne Prü+fung in das SQL Statement übernommen werden (siehe SQL Injections).
 
Code:
logging("SELECT * FROM werkzeug WHERE ".$_POST["textfeld"]." LIKE '".$_POST["daten"]."%'");
und nach Query-Ausführung:
Code:
logging(mysql_errno() . ": " . mysql_error() . "\n");
ggf sollte man beim Entwickeln noch error_reporting auf E_ALL setzen.

PS: als Anti-Injection eignen sich die:
Prepared statement - Wikipedia, the free encyclopedia ganz gut.
Auch wenn diese noch ziemlich bleeding edge sind (gibt es erst mit php 5.1 und damit seit gerade mal knapp 8 Jahren - deshalb wird es wohl im deutschsprachigen "Anti-SQL-Injection-Manual" nicht erwähnt :rolleyes: )

PHP: Prepared Statements - Manual
 
Danke für den Tipp!
Ich hab die Request von Ajax mit Temper Data abgefangen und bemerkt, dass eine Variabel nicht mit geschickt wurde.
Nun konnte ich das Problem lösen^^
Und um die Sicherheitslücke werde ich mich auch gleich kümmen^^
Also Danke nochmal^^
 
Zurück
Oben