You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, April 29th 2011, 11:18am

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

PHP Quellcode

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


Die Verbindungseinstellungen habe ich weggelassen.

und hier meine func.php

PHP Quellcode

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


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

MfG

Andreas

2

Friday, April 29th 2011, 11:38am

Öä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:

JavaScript Code

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 ;).

PHP Quellcode

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

3

Friday, April 29th 2011, 12:14pm

Hallo,

ich hab jetzt versucht es so einzubauen das er es anzeigt aber nichts passiert. Kannst du mir evtl sagen, wo ich das einzubauen hab, damit der mir das Ding anzeigt.

MfG

4

Friday, April 29th 2011, 3:56pm

Ich würd sagen, Zeile 44 in der ersten Datei.
Bin mir nicht zu 100% sicher, ob das der richtige Code ist, weil ich es so lang nicht mehr gemacht habe^ ^. Bei jQuery wäre es:

JavaScript Code

1
$('#select2').show();

Similar threads

Social bookmarks