Problem mit Dynamischen Aufbau von SELECT Feldern

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

  • Problem mit Dynamischen Aufbau von SELECT Feldern

    Hallo Gemeinde,

    ich bin neu hier und nicht wirklich bewandert in PHP und AJAX. Mir wurde die Aufgabe zuteil ein Modul zu schreiben bei dem ich Druckerdaten aus einer Datenbank auslesen soll. Ich habe mich an dem Beispiel hier versucht und komme aber nicht weiter.

    Posting

    Mein Code schlägt einfach nicht auf die dritte Select Box um.

    Hier meine Form.php

    Quellcode

    1. [code]<html><head>
    2. <script type="text/Javascript">
    3. <!--
    4. function sendRequest(digit) {
    5. try {
    6. req = window.XMLHttpRequest?new XMLHttpRequest():
    7. new ActiveXObject("Microsoft.XMLHTTP");
    8. } catch (e) {
    9. //Kein AJAX Support
    10. }
    11. minus = digit-1;
    12. inhalt = document.getElementById('source' + minus );
    13. req.onreadystatechange = handleResponse;
    14. req.open('GET', 'func.php?dest='+ digit + '&s=' + inhalt.value);
    15. req.send(null);
    16. }
    17. function sendRequest2(digit) {
    18. try {
    19. req = window.XMLHttpRequest?new XMLHttpRequest():
    20. new ActiveXObject("Microsoft.XMLHTTP");
    21. } catch (e) {
    22. //Kein AJAX Support
    23. }
    24. minus = digit-1;
    25. inhalt = document.getElementById('source' + minus );
    26. req.onreadystatechange = handleResponse;
    27. req.open('GET', 'func2.php?dest='+ digit + '&s=' + inhalt.value);
    28. req.send(null);
    29. }
    30. function handleResponse() {
    31. if(req.readyState == 4){
    32. var response = req.responseText;
    33. var update = new Array();
    34. if(response.indexOf('||' != -1)) {
    35. update = response.split('||');
    36. for(i=0; i<update.length; i+=2) {
    37. document.getElementById(update[i]).innerHTML = update[i+1];
    38. }
    39. }
    40. }
    41. else
    42. alert("loading" + ajax.readyState);
    43. }
    44. function handleResponse2() {
    45. if(req.readyState == 4){
    46. var response = req.responseText;
    47. var update = new Array();
    48. if(response.indexOf('||' != -1)) {
    49. update = response.split('||');
    50. for(i=0; i<update.length; i+=2) {
    51. document.getElementById(update2[i]).innerHTML = update2[i+1];
    52. }
    53. }
    54. }
    55. else
    56. alert("loading" + ajax.readyState);
    57. }
    58. //-->
    59. </script>
    60. </head>
    61. <body>
    62. <form method="post" action="">
    63. <div style="float:left" id="select1">
    64. <select name="source1" id="source1" onChange="sendRequest(2)">
    65. <option value="">Bitte Hersteller wählen</option>
    66. <?php
    67. //CAT = 0 könntest du verwenden um dein hauptmenü zu kennzeichnen
    68. $sql = "SELECT * FROM brand WHERE TYPE='OEM' AND IMPORTANCE='1' AND IDBRAND LIKE '20000%' ORDER BY NAME";
    69. $res = mysql_query($sql) or exit('<p>Fehler beim Auslesen der Daten.</p>' . mysql_error());
    70. // Initialisierung des Datenarrays
    71. $data = array();
    72. // Füllen des Datenarrays
    73. while($data[] = mysql_fetch_assoc($res));
    74. array_pop($data);
    75. foreach($data as $key) {
    76. echo '<option value="' . $key['IDBRAND'] . '">' . $key['NAME'] . '</option>';
    77. echo "\n";
    78. }
    79. ?>
    80. </select>
    81. </div>
    82. <div style="float:left" id="select2" name="select2">
    83. </div>
    84. <div style="float:left" id="select3" name="select3">
    85. </div>
    86. </form>
    87. </body></html>[/code]
    Alles anzeigen


    Die Verbindungseinstellungen habe ich weggelassen.

    und hier meine func.php

    Quellcode

    1. [code]switch($_GET['dest'])
    2. {
    3. case '2':
    4. $sql = "SELECT * FROM item WHERE IDBRAND='" .$_GET['s']."' AND IDTYPE='group' order by DESCRIPTION";
    5. $res = mysql_query($sql) or exit('<p>Fehler beim Auslesen der Daten.</p>' . mysql_error());
    6. // Initialisierung des Datenarrays
    7. $data = array();
    8. // Füllen des Datenarrays
    9. while($data[] = mysql_fetch_assoc($res));
    10. array_pop($data);
    11. break;
    12. case '3':
    13. // Auslesen der Daten
    14. $sql = "SELECT i2i.IDPARITEM, i2i.IDITEM, i.IDITEM, i.DESCRIPTION FROM item2item i2i, item i WHERE i.IDITEM=i2i.IDITEM AND i2i.IDPARITEM='" .$_GET['s']."' ORDER BY DESCRIPTION";
    15. $res = mysql_query($sql) or exit('<p>Fehler beim Auslesen der Daten.</p>' . mysql_error());
    16. // Initialisierung des Datenarrays
    17. $data = array();
    18. // Füllen des Datenarrays
    19. while($data[] = mysql_fetch_assoc($res));
    20. array_pop($data);
    21. echo $_GET['s'];
    22. break;
    23. }
    24. $next = $_GET['dest']+1;
    25. echo 'select'.$_GET['dest'].'|| ';
    26. if($_GET['dest'] > 3)
    27. die('<input type="submit" value="Auswahl senden" >');
    28. echo '<select name="source'.$_GET['dest'].'" id="source'.$_GET['dest'].'" onChange="sendRequest('.$next.')">';
    29. echo '<option value=""></option>';
    30. foreach($data as $key) {
    31. echo '<option value="' . $key['IDITEM'] . '">' . $key['DESCRIPTION'] . '</option>';
    32. echo "\n";
    33. }
    34. echo '</select>';
    35. //Nächste Select Felder nullen
    36. $anzahl_der_select_felder = 3;
    37. for($i=$next; $i<=$anzahl_der_select_felder+1; $i++) {
    38. echo '||select'.$i.'|| ';
    39. }
    40. ?>[/code]
    Alles anzeigen


    Ich wäre froh, wenn mir jemand helfen kann, damit ich dieses Modul zum laufen bekomme.

    MfG

    Andreas
  • Öähm.
    Ich sehe atm nirgends, dass du #select2 oder #select3 anzeigen lässt?
    Du schreibst HTML-Code dort rein (Zeile 61?), aber die Container bleiben nach wievor aufgrund 'style="display: none;"' versteckt.

    Anzeigen kannst du die mittels:

    Quellcode

    1. document.getElementById('select2').style.display = 'block';



    Übrigens würde ich dir dringend empfehlen, dir jQuery anzuschauen ;D. Dort wird der ganze AJAX-Request-Krams in 1-2 Zeilen abgefrühstückt und das Ansprechen von Elementen geht auch weitaus einfacher. Zudem ist bei einigen Befehlen die Browserkompatibilität höher.

    Außerdem könnetst du für $anzahl_der_select_felder eine Konstante statt eine Variable nehmen, da du ja sicherlich nicht möchtest, dass der Wert innerhalb der Laufzeit geändert wird ;).

    Quellcode

    1. define('ANZAHL_DER_SELECT_FELDER', 3);
    2. echo ANZAHL_DER_SELECT_FELDER; //gibt 3 aus