• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Stehe vor einem Problem mit "select" mysql und JavaScript

funnix

New member
Hallo zusammen,

sorry bi auch nur ein Newbe habe aber folgendes Problem.

ich lese aus einer MySql Kunden Daten aus, Name Adresse Anschrift email usw.... Mit der Selectbox wähle ich einen Kunden aus und übergebe das
value der Kundennummer. Ich möchte aber jetzt, wenn ich den Kunden ausgewählt habe, andere Felder des Formulars mit den Kundendaten aus der SQL füllen. Mit ist nur ichzt klar wie? Ich habe zwar eine funktion gebastelt: textChange in der ich z.B: "document.getElementById("plz").value = plz;" setze, aber wie bekomme ich aus der select die Daten an die Funktion übergeben? Denn der Datensat, wird ja erst nach Auswahl klar, und ich kann das Value nicht erweitern, womit ich mit this.value nichts anfangen kann........


Hat jeman eine Idee für mich????


Danke schon mal

Gruß Funnix
 
Mir ist das noch nicht klar. Bitte poste mal quelltext, dann kann man dir besser helfen.

Sinnvollstes vorgehen wäre aber wohl:
1) Abrufen der id und des namens und darstellen in einer select-box
2) Beim onchange rufst du einen ajax-request auf, welcher per get die daten zu der id (die du beim reuqest per GET übergibst) zurückgibt
3) Diese Daten aus dem Request nun anzeigen.

An welcher Stelle liegen nun deine Probleme? :)

Lg Kasalop
 
Hallo Kasalop,

danke erst mal für deine Antwort....
Ich habe im Moment keine Idee, wie ich die Daten aus dem Ajax Script zurück bekomme und wie ich dann die Felder update?!?!?!?
Ich habe mir die Funktion gebastelt, die ich mit onChange aus der Select aufrufe! (Aus der Select übergebe ich nur die KundenID)
Code:
function update_form(sel) {
   var id = sel.options[sel.selectedIndex].value;
    if ((id.value != '0') && (id.value != 'new'))
     {
        xmlhttp=new XMLHttpRequest();
        xmlhttp.open("GET", "inc/get_organizer.inc.php?veran_id=" + id, true);
        xmlhttp.send();
     }
}
in dem get_organizer.inc.php lese ich einfach nur die DB des Kunden mit der ID aus. Nur habe ich keine Ahnung wie ich die korrekt zurückgebe...
Ich muss ja irgendwie die Felder (vorname, nachname,str,ort,plz usw. ) verwertbar wieder zurück geben..

Hast Du einen Tipp für mich???

Danke Gruß funnix
 
Zuletzt bearbeitet:
Statt dem schnipp bitte die [ CODE ] - Tags verwenden, dafür sind sie da (siehe auch 'erweiterte Antwort schreiben').

Zu deinem Datenproblem: Evtl. liesen sich die Daten als JSON zurückgeben!?
 
Hallo miniA4kuser

so besser? ;-) Kannst Du zu JSON noch etwas mehr sagen? Denn auf dem Gebiet habe ich noch gar keine Erfahrung

Danke schon mal
 
Code:
        xmlhttp=new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
                if(xmlhttp.readyState==4 && xmlhttp.status==200) {
                        alert(xmlhttp.responseText);
                }
        }
        xmlhttp.open("GET", "inc/get_organizer.inc.php?veran_id=" + id, true);
        xmlhttp.send();

aber besser wäre eine eigene funktion für ajax requests zu schreiben, oder gleich ein framework wie jQuery zu verwenden. damit geht es deutlich einfacherer.

Lg Kasalop
 
Ja so ist es besser ;)

Zum Thema JSON kannst du dich auf JSON_org und Wikipedia informieren. Welche Browser das JSON-Objekt nativ unterstützen, aknnst du auf Can I use JSON parsing? nachgucken.

Mittels json_encode kannst du aus PHP heraus das JSON übergeben:
PHP:
<?php
header('Content-type: text/html; charset=UTF-8');
// UTF-8 Prüfkommentar
$arr = array ('vorname' => 'John', 'nachname' => 'Doe', 'str' => 'Main street 1', 'ort' => 'Historytown', 'plz' => 01234);
echo json_encode($arr);
?>
In dem Browser sollte dann sowas hier als Zeichenkette (String) ankommen:
Code:
{"vorname":"John","nachname":"Doe","str":"Main street 1","ort":"Historytown","plz":668}
welches dann im xmlhttp.responseText gespeichert ist, siehe
Code:
function testJSON() {
    var xmlhttp = createRequest(),
        url = 'url_zu_deinem_script.php';

    xmlhttp.open("GET", url, true);
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
            parseJSON(xmlhttp.responseText);
        }
    };
    xmlhttp.send();
}
Hinter createRequest() verbirgt sich eine Funktion, welche je nach Browser das ünterstütze Objekt für den Request zurückgibt:
Code:
function createRequest() {
    var request;

    try {
        request = new XMLHttpRequest();
    } catch (trymicrosoft) {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (othermicrosoft) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed) {
                request = false;
            }
        }
    }
    if (!request) {
        alert("Error initializing XMLHttpRequest!");
    }
    return request;
}
Die Funktion parseJSON() ruft folgende Funktion auf, welche die Antwort vom Server (PHP) verarbeitet:
Code:
function parseJSON(data) {
    var x,
        obj = JSON.parse(data),
        html = '<table style="width:100%;"><thead><tr><th>object name<\/th><th>object value<\/th><\/tr><\/thead><tbody>';

    for (x in obj) {
        if (obj.hasOwnProperty(x)) {
            html += '<tr><td style="padding-left:15px;">' + x +
                '<\/td><td style="padding-left:15px;">' + obj[x] +
                '<\/td><\/tr>';
        }
    }
    html += '<\/tbody><\/table>';
    document.getElementById('content').innerHTML = html;
}
In meinem Beispiel wird eine Tabelle mit den Wertepaaren in einen <div>-Kontainer ausgegeben. Über JSON.parse(data) wird aus dem String, welcher vom Server (PHP) kommt, ein JavaScript-Objekt, welches ab sofort als obj ansprechbar ist. Wie du dann auf das Objekt zugreifen kannst sollte denke ich mal klar sein.

Für ältere Browser, wie z.B. IE7 und älter, muss beachtet werden, dass diese das JSON.parse() nicht kennen. Daher muss man es dem Browser beibringen, indem man folgendes zuerst ausführen lässt:
Code:
if (!window.JSON) {
    // JSON RegExp
    var rvalidchars = /^[\],:{}\s]*$/,
        rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
        rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
        rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g;

    window.JSON = {
        parse: function (data) {
            // Make sure leading/trailing whitespace is removed (IE can't handle it)
            data = data.trim();
            // Make sure the incoming data is actual JSON
            // Logic borrowed from http://json.org/json2.js
            if (rvalidchars.test(data.replace(rvalidescape, "@")
                    .replace(rvalidtokens, "]")
                    .replace(rvalidbraces, ""))) {
                return (new Function("return " + data))();
            }
            alert('JSON string error !!!');
        },
        stringify: function (obj) {
            var t = typeof (obj);
            if (t !== "object" || obj === null) {
                // simple data type
                if (t === "string") {
                    obj = '"' + obj + '"';
                }
                return String(obj);
            } else {
                // recurse array or object
                var n, v, json = [], arr = (obj && obj.constructor === Array);
                for (n in obj) {
                    if (obj.hasOwnProperty(n)) {
                        v = obj[n];
                        t = typeof (v);
                        if (t === "string") {
                            v = '"' + v + '"';
                        } else if (t === "object" && v !== null) {
                            v = JSON.stringify(v);
                        }
                        json.push((arr ? "" : '"' + n + '":') + String(v));
                    }
                }
                return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
            }
        }
    };
}
Die String-Methode .trim() entfernt überflüssige Leerzeichen, mit denen z.B. der IE sonst ein Problem hätte. Auch hier gilt, sofern nich nativ vom verwendeten Browser unterstützt, zuerst beibringen:
Code:
if (!String.prototype.trim) {
    String.prototype.trim = function () {
        return this.replace(/^\s+|\s+$/g, '');
    };
}


Sooo ... nun müssten aber alle Fragen beantwortet sein. Viel Spaß beim probieren.
 
Hi miniA4kuser,

super cool, das hat mich schon mal wirklich weiter gebracht, aber ich scheiter noch an :
Code:
function parseJSON(data) {
    var x,
        obj = JSON.parse(data),

da bekomme ich
Syntax Error:JSON.parse: unexpected Character, den string den ich übergebe sieht so aus:
Array{"vorname":"Hugo","nachame":"Mustermann","anschrift":null,"ort":"Musterstadt","plz":"D-12345"}

ich hänge also gerade daran den von Ajax zurück gegebenen String in brauchbares Format umwandel....

Gruß Funnix
 
@miniA4kuser: deine JSON.parse lässt manche Strings durch, die dann trotzdem einen Fehler werfen. Z.B. "[1".
...und ein Slash in einem HTML-String muss auch nicht maskiert werden... nur wenn du Inline-JS machst und den String "</script>" irgendwo brauchst.

EIDT: @funnix: Was hat das "Array" am Anfang deines Strings da verloren? Das ist da falsch.
 
Hallo kkapsner

das Array kommt aus PHP ! .... ich kann den String natürlich auch anders zusammen setzen... nur wie sollte der aussehen?

Code:
   $arr = array ("vorname" => $row['vorname'], "nachname" => $row['nachname'], "anschrift" => $row['anschrift'], "ort" => $row['ort'], "plz" => $row['plz']);
            }
   echo $arr;
   echo json_encode($arr);

Gruß funnix
 
Hallo kkapsner

das Array kommt aus PHP ! .... ich kann den String natürlich auch anders zusammen setzen... nur wie sollte der aussehen?

Code:
   $arr = array ("vorname" => $row['vorname'], "nachname" => $row['nachname'], "anschrift" => $row['anschrift'], "ort" => $row['ort'], "plz" => $row['plz']);
            }
   echo $arr;
   echo json_encode($arr);

Gruß funnix
 
Was ist das für eine Klammer da und warum machst du 2 mal das echo?
Code:
   $arr = array ("vorname" => $row['vorname'], "nachname" => $row['nachname'], "anschrift" => $row['anschrift'], "ort" => $row['ort'], "plz" => $row['plz']);
            [B][COLOR="#FF0000"]}[/COLOR][/B]
   [B][COLOR="#FF0000"]echo $arr;[/COLOR][/B]
   echo json_encode($arr);
 
Verbessern kann man immer ;-)

Aber hier brauche ich erstmal ne Optimierung ;-)
--
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data


Gruss Funnix:cool:


P.S.

super Forum hier wird einem wenigstens mal geholfen !!! Ohne viel BlaBla ....!!! Spitze!!!:d
 
Aber hier brauche ich erstmal ne Optimierung ;-)
--
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data
Was kommt denn nun genau in deinem Browser an? Hast du mal vor dem
Code:
parseJSON(xmlhttp.responseText);
versucht das Ergebnis via
Code:
alert(xmlhttp.responseText);
ausgeben zu lassen?


super Forum hier wird einem wenigstens mal geholfen !!! Ohne viel BlaBla ....!!! Spitze!!!:d
Wenn man ordentlich fragt bekommt man auch geholfen... ;)
 
@miniA4kuser: http://kkjs.kkapsner.de/modules/kkjs.JSON.js - so hab' ich das gelöst. Bei deiner Lösung ist mir auch nicht ganz klar, warum du über den Konstructor von Function gehst anstatt über eval... macht im Grunde genommen keinen Unterschied (eval ist ev. etwas schneller) - find' ich nur komisch.
Deine stringify Funktion hat auch ein paar kleine Bugs. So werden Strings nicht maskiert (will heißen '"' wird zu """, was invalides JSON ist - auch Sonderzeichen (\n, \t, ...) und Zeichen, die über den Codepoint dargestellt werden müssen werden nicht richtig übersetzt), Funktionen werden nicht rausgefiltert und rekursive Objekte führen zu einer Endlosschleife. Außerdem führt so etwas
Code:
var a = [1, 2];
a.test = "test";
a[3] = 3;
zu einem falschen Ergebniss.
Zu guter Letzt haben parse und stringify noch optionale Parameter, die du nicht implementiert hast.
 
Hallo

und danke an alle, es klappt jetzt alles...wenn man erstmal verstanden hat, wie es geht ist es ja auch recht einfach ;-)

Gruß Funnix
 
Zurück
Oben