JavaScript Kleine Frage

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.397
Hallo Leute,

ich habe mich mal rangemacht und teste bzw. lerne Ajax zu verwenden.
Nun möchte ich eine Datenbankabfrage starten die mir bestimmte Dinge zurück gibt.
Das klappt auch allerdings möchte ich in meinem HTML Formular in bestimmten Inputboxen auch nur die dafür bestimmten Werte aus der SQL Abfrage haben.
Leider lies sich Google nicht wirklich dazu zu überreden mir das zu verraten.
Hier mal mein Code:
Code:
function getCustomers(){
    var ajaxRequest;  // The variable that makes Ajax possible!
    
    try{
        // Opera 8.0+, Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            document.Customers.first_name.value = ajaxRequest.responseText;
            document.Customers.last_name.value = ajaxRequest.responseText;
        }
    }
    var customer_id = document.getElementById('customer_id').value;
    var queryString = "?customer_id=" + customer_id;
    ajaxRequest.open("GET", "customer.php" + queryString, true);
    ajaxRequest.send(null); 
    }
Hier die PHP:
PHP:
<?php

//Verbindung zur Datenbank aufbauen
$connectionid = mysql_connect ('localhost','***','****'); 
    if (!mysql_select_db ('lls_wawi', $connectionid)){ 
        die ("Keine Verbindung zur Datenbank"); 
} 
$customer_id = $_REQUEST['customer_id'];

$sql = "SELECT * FROM lls_customers WHERE customer_id = '$customer_id'";
$result = mysql_query($sql);
$data = mysql_fetch_assoc($result);
echo $first_name = $data['first_name'];
echo $last_name = $data['last_name'];


?>
Und meine HTML:
Code:
<html>
<script src="ajax.js"></script>
<form name="Customers">
<label>Kundennummer: </label><input type="text" value="" id="customer_id" onChange="getCustomers()" />
<label>Vorname: </label><input type="text" value="" name="first_name" />
<label>Nachname: </label><input type="text" value="" name="last_name" />
<form>
</html>

Das Problem ist responseText allerdings möchte ich ungern auch responseXML umsteigen, da ich eine Datenbank brauche.
 
einfach die beiden asgaben durch ein Trennzeichen unterscheidbar machen!

z.B.
PHP:
echo $first_name = $data['first_name'];
echo "==";
echo $last_name = $data['last_name'];

dann in Javascript ausienader nehmen mit split()

und du hats nen array mit dem vorname und dem nachnamen ;)

aber was soll

$first_name = $data['first_name'];

eigentlich genau machen ??
müsste da nicht 1 oder true oder so rauskommen ?
du lässt da ja das ergebnis der zuweisung ausgeben....

echo $data['first_name'];

sollte es auch tun oder aber

echo $first_name . "=" . $data['first_name'];

dann frage ich mich ob du im JS teil die variable queryString nochmal bbrauchst. Wenn nicht würde ich sie rauskicken und die parameter direkt in den open() teil schreiben, spart speicherplatz ;)

zudem solltest du unbeingt einen login bauen oder irgendeine methode dich beim server zu identifizieren, so kann nämlich jeder der auf deine seite kommt gucken wohon der httprequest geht udn sie im Browser aufrufen, von sql injects mal ganz zu schweigen ;)
 
Zuletzt bearbeitet:
Ja im Moment läuft ja alles nur testbedingt, danke trotzdem schon mal für die hilfreiche Information, ich mach mich mal ans splitten.

Edit:

Ich weiß schon warum ich Javascript hasse, ich beiß mir daran echt die Zähne aus.
Bekomm das mit Split nicht hin.
Hab versucht mit split das Ergebnis in eine Variable zu schreiben und dann ausgeben zu lassen, geht aber gründlich in die Hose, weil Firebug aufeinmal meint das Element first_name würde nicht existieren.

Edit2: Habs hinbekommen blödes javascript -.-

Edit3: So ein kleines Problem habe ich noch, ich binde die Formularseite mittels PHP in die Index.php ein nun funktioniert es wieder nicht und ich verstehe nicht wieso...
Als Fehler wird mir immer gesagt document.Customer.first_name sei nicht definiert...
 
Zuletzt bearbeitet:
Ich hätte da zwei Tips für dich, die solche Ajax-Requests wesentlich vereinfachen: Benutze jQuery - damit sparst du dir unter anderem das ganze try/catch-Zeugs beim Erstellen des Request-Objekts. Und dann nimm als Rückgabeformat des PHP-Skripts JSON. Dann brauchst du auch nachher nichts mehr zu splitten, weil jQuery daraus automatisch ein Javascript-Objekt baut. Die Funktion getCustomers sähe dann zum Beispiel nur noch etwa so aus:

Code:
$.ajax({
    url: 'customer.php',
    data: {
        customer_id: $('#customer_id').val()
    },
    dataType: 'json',
    success: function(response) {
        // first_name und last_name unten sollen die id-Attribute der beiden Eingabefelder sein
        $('#first_name').val(response.first_name);
        $('#last_name').val(response.last_name);
    }
});

und das PHP-Skript würde einfach folgendes ausgeben:

PHP:
    echo json_encode($data);

Ich übernehme keine Garantie für die Funktionsfähigkeit dieses Codes ;) aber ich wollte mal demonstrieren, wie einfach das mit jQuery wird...
 
Danke für den Tipp. Es funktioniert wieder die Links auf meine Scripte waren plötzlich falsch gesetzt, dann ist es ja kein Wunder das es nicht klappt.
 
Zurück
Oben