4 Select mit 2 Ajax MySql abfragen füllen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 4 Select mit 2 Ajax MySql abfragen füllen

    Hallo habe nun schon 2 mal das Forum um [coderwiki]HowTos/AJAX[/coderwiki] durchgemacht aber bist jetzt keine Klarheit.

    Das Tut mit den Select Feldern habe ich für mein Projekt übernommen und tw. geht es schon aber nun hänge ich fest.

    Ich will folgendes erreichen.

    Die Seite wird geladen und die erste Select Feld wird mit den Kunden geladen nun wenn man einen anklickt dann werden die Projekte zum Kunden in der 2ten Select angezeigt, nun wenn man ein Projekt wählt sollen die select 3 und 4 mit Bauteilen und Stundensätzen gefüllt werden. Leider wird dies nicht gemacht!

    Ich dachte das ich die func.php und formular.php mehrmals includiere die jeweiligen functionen vom Namen her anpasse aber dem war nicht so. Wer kann mir einen Tip geben wie ich das besser hinbekomme?
  • Ok 3 Felder werden gefüllt aber das 4 Feld das die Abhängigkeit wie das 3 vom 2 hat wird nicht gefüllt.

    Dann noch was im FF geht alles so weit nur im [coderwiki]Informationen/Internet Explorer[/coderwiki] kommt der Fehler:
    'ajax' ist undefiniert Zeile 114

    Das ist der Abschnitt:

    Quellcode

    1. function handleResponseProjekte() {
    2. if(req.readyState == 4){
    3. document.getElementById('Projekte').innerHTML = req.responseText;
    4. }
    5. else
    6. alert("loading" + ajax.readyState);
    7. }
  • gib uns das nächste mal bitte gleich den code..
    du verwendest den alten code aus dem thread - nicht den code aus dem wiki

    im Wiki ist ein besser code..
    Ich habe deine 2 JavaScript mal in eine bessere [coderwiki]Informationen/Funktion[/coderwiki] zusammengefasst

    Quellcode

    1. function sendRequest(choice) {
    2. try {
    3. req = window.XMLHttpRequest?new XMLHttpRequest():
    4. new ActiveXObject("Microsoft.XMLHTTP");
    5. } catch (e) {
    6. //Kein AJAX Support
    7. }
    8. if(choice == "Projekte") {
    9. req.onreadystatechange = handleResponse;
    10. req.open("GET", 'includes/function/ajax/projekte.php?s='+ document.getElementById('Projekte').value);
    11. } else if(choice == "Bauteile") {
    12. req.onreadystatechange = handleResponse;
    13. req.open("GET", 'includes/function/ajax/bauteile.php?s='+ document.getElementById('Bauteile').value);
    14. }
    15. req.send(null);
    16. }
    17. function handleResponse() {
    18. if ((req.readyState == 4) && (req.status == 200)) {
    19. var update = new Array();
    20. var response = req.responseText;
    21. if(response.indexOf('||' != -1)) {
    22. update = response.split('||');
    23. document.getElementById(update[0]).innerHTML = update[1];
    24. }
    25. }
    26. }
    Alles anzeigen


    Für dich ändern tut sich dabei:
    statt der bisherigen ausgabe von includes/function/ajax/projekte.php?s=1

    "alte Ausgabe" schrieb:

    <option value="1">c-klasse2</option>
    <option value="3">test</option>


    musst du nun folgende Ausgabe erzielen

    "neue Ausgabe" schrieb:

    Kunden||<option value="1">c-klasse2</option>
    <option value="3">test</option>


    Der Teil vor den doppelten Pipes wird als DIV [coderwiki]Informationen/ID[/coderwiki] verwendet
    in der bauteile.php musst du natürlich stattdessen ein "Bauteile||" voranstellen

    außerdem habe ich den Parameter deiner sendRequest geändert
    es heißt nun nicht mehr

    "alt" schrieb:

    onChange="sendRequestKunden()"
    sondern

    "alt" schrieb:

    onChange="sendRequest('Kunden')"


    das selbe natürlich auch mit Projekte
    So sollte hoffentlich alles auch mit dem Internet Explorer funktionieren

    Mit den 4 DIVs bitte ich dich mit dem neuen Code ein bisschen zu experimentieren, sollte nun hoffentlich etwas leichter von der Hand gehen
    wenn du nicht weiter kommst, helfen wir hier natürlich wieder
  • Also sorry für die dumme Nachfrage aber ich stehe gerade auf dem schlauch!

    Meine ajax.js statt der 2 davor:

    Quellcode

    1. function sendRequest(choice) {
    2. try {
    3. req = window.XMLHttpRequest?new XMLHttpRequest():
    4. new ActiveXObject("Microsoft.XMLHTTP");
    5. } catch (e) {
    6. //Kein AJAX Support
    7. }
    8. if(choice == "Projekte") {
    9. req.onreadystatechange = handleResponse;
    10. req.open("GET", 'includes/function/ajax/projekte.php?s='+ document.getElementById('Kunden').value);
    11. } else if(choice == "Bauteile") {
    12. req.onreadystatechange = handleResponse;
    13. req.open("GET", 'includes/function/ajax/bauteile.php?s='+ document.getElementById('Projekte').value);
    14. }
    15. req.send(null);
    16. }
    17. function handleResponse() {
    18. if ((req.readyState == 4) && (req.status == 200)) {
    19. var update = new Array();
    20. var response = req.responseText;
    21. if(response.indexOf('||' != -1)) {
    22. update = response.split('||');
    23. document.getElementById(update[0]).innerHTML = update[1];
    24. }
    25. }
    26. }
    Alles anzeigen


    Der Bereich der gesendet wird und gefüllt werden soll:

    Quellcode

    1. <form method="post" action="includes/function/functionuser/taetigkeit/inserttaetigkeit.php" name="Eingabeformular"><table border="0" cellpadding="0" cellspacing="0">
    2. <tr>
    3. <td>Kunde:</td>
    4. <td><select name="hersteller" id="Kunden" onChange="sendRequest('Projekte')" size="1">
    5. <?php
    6. $sql = 'SELECT * FROM kunde where kunde_status = "1"';
    7. $ergebnis = mysql_query($sql);
    8. while($data = mysql_fetch_array($ergebnis)){
    9. ?>
    10. <option value="<?php echo $data["kunde_id"]; ?>"
    11. <?php if ($data["kunde_id"] == $kunde) {?> selected <?php } ?>><?php echo $data["kunde_nr"]; ?>&nbsp;-&nbsp;<?php echo $data["kunde_name"]; ?></option>
    12. <?php } ?>
    13. </select></td>
    14. </tr>
    15. <tr>
    16. <td>Projekt:</td>
    17. <td><select name="projekt" id="Projekte" onChange="sendRequest('Bauteile')" size="1">
    18. </select></td>
    19. </tr>
    20. <tr>
    21. <td>Bauteil:</td>
    22. <td><select name="bauteil" id="Bauteile" size="1">
    23. </select></td>
    24. </tr>
    25. <tr>
    26. <td>Art der Tätigkeit:</td>
    27. <td><select name="art" size="1">
    Alles anzeigen


    Und die 2 Dateien die per [coderwiki]Informationen/Ajax[/coderwiki] geladen werden

    Quellcode

    1. <?php
    2. //Kunden laden
    3. include_once("../../../config/configdaten.php");
    4. include_once("../../checkuser.php");
    5. echo 'Bauteile||';
    6. $result = mysql_query('SELECT * FROM bauteil WHERE bauteil_projektid = "'.$_GET['s'].'" AND bauteil_status = "1";');
    7. while($row = mysql_fetch_object($result))
    8. {
    9. echo '<option value="'.$row->bauteil_id.'">'.$row->bauteil_bezeichnung.'</option>';
    10. }
    11. ?>
    Alles anzeigen

    Quellcode

    1. <?php
    2. //Kunden laden
    3. include_once("../../../config/configdaten.php");
    4. include_once("../../checkuser.php");
    5. echo 'Projekte||';
    6. $result = mysql_query('SELECT * FROM projekt WHERE projekt_kundenid = "'.$_GET['s'].'" AND projekt_aktiv = "1";');
    7. while($row = mysql_fetch_object($result))
    8. {
    9. echo '<option value="'.$row->projekt_id.'">'.$row->projekt_bezeichung.'</option>';
    10. }
    11. ?>
    Alles anzeigen

    Ok bin zwar nicht so fit in JS aber durch die Funktion handleResponse wird bewirkt das den jeweiligen Objekt das zugewiesen wird das gleich ??|| vorangestellt worden ist.

    Aber dennoch kommt da nichts.
    Dennoch was zu freuen:
    Der Fehler im IE ist weg! :)
  • Quellcode

    1. function handleResponseProjekte() {
    2. if(req.readyState == 4){
    3. document.getElementById('Projekte').innerHTML = req.responseText;
    4. }
    5. else
    6. alert("loading" + ajax.readyState);
    7. }
    8. function handleResponseBauteile() {
    9. if(req.readyState == 4){
    10. document.getElementById('Bauteile').innerHTML = req.responseText;
    11. }
    12. else
    13. alert("loading" + ajax.readyState);
    14. }
    Alles anzeigen


    Kann man diese alten Functionen nach deinen Umbau so einbauen? Vielleicht geht es ja mit diesen?
  • der neue ajax code ist auf jeden fall besser
    in den 2 php-dateien ist dir noch vor das php tag ein leerzeichen gerutscht
    so ist die ID natürlich falsch (" Projekte" statt "Projekte")

    und zusätzlich ergänze noch das <div> Tag - selbst wenn es dein IE kann
    das workaround kommt direkt von Microsoft:
    http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
  • Ok das letzte mal zum Verständniss:

    Ich habe 4 Select Felder das erste hat die ID Kunden hier wähle ich einen Kunden aus.

    Dann wird per sendRequest"Projekte" die projekte.php?s=(ID des select Feldes Kunden) aufgerufen und sollte per handleResponse an das Feld
    <select><div id="Projekte"></div></select>
    die Daten der phpDatei übergeben (Projekte||<option>test</option>)
    Danach wähle ich aus den nun komplett erzeugten <select> das nächste aus und damit werden die anderen letzten beiden <select> gefüllt.

    Dies habe ich doch so richtig verstanden?
  • nee mit Firefoc keine Probleme! Wenn du noch die Daten hast kannst du mal schauen wenn nicht gebe ich Sie dir nochmal!

    Das Problem mit den Leerzeichen hing mit den Daten die ich per includ reingenommen habe zusammen.

    Sonst finde dich dienen Code klasse. Habe mich drüber gemacht das auch mein 4 gefüllt wird und glaube das ich schon auf den richtigen Weg bin. :D