3 Select abhängigkeit 1 zu 2, 2 zu 3

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

  • 3 Select abhängigkeit 1 zu 2, 2 zu 3

    Moin Leute,

    seit ca Freitag kaue ich auf dem selben Problem rum.
    Folgender Fall: Ich habe 3 selectboxen, die mit werten aus der Datenbank gefüllt werden. Diese sind voneinander abhängig (die zweite von der ersten, die dritte von der zweiten und ersten). Habe bei euch einen Code gefunden, mitdem hat es auch wudnerbar geklappt.
    Bis... Ich den Internetexplorer die Seite geöffnet hab. Mit Opera, Firefoxund Safari läuft das Problemlos. Nur beim Internetexplorer hängts.
    Also workaround. Bin dann soweit gekommen das ich die selects mit in die zuladende PHP dateien eingebunden hab. Funktioniert bei zwei selectboxen auch wunderbar.

    Nun Folgender fall: Meine zweite selectbox soll, wie die erste, per onChange ein script aufrufen. Das script ist aber leider in die php-site "Tagesansicht" eingebunden. jetzt denk ihr, lager das script doch aus und lade es dann in die nachzuladende php.
    Leider bin ich auf JS echt schlecht, sehr schlecht... Habs einfach nicht hinbekommen. Der letzte error war dann n "header already sent", soweit ich mich erinnern kann.

    Nun meine Frage:
    1. Gibt es eine möglichkeit mit dem IE fehlerfrei die selects anzeigen zu lassen, ohne das <select> in die nachzuladende phpdatei auszulagen? Sodas ich dann per onChange das script auf der Hauptseite ("Tagesansicht") öffnen kann? Wenn ja in wiefern muss ich meinen Code abändern damit is (als noob) es auch schaffe...

    ich poste euch mal meinen Code:

    Quellcode

    1. //Tagesansciht.php
    2. <?php
    3. /*Es wird eine Datei eingebunden, die das Login checkt */
    4. /*vebindung zur db anders uwnichtiges zeug*/
    5. ?>
    6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
    7. <html>
    8. <head>
    9. //bla bla
    10. //hier das erste script
    11. <script type="text/javascript">
    12. <!--
    13. function sendRequest1()
    14. {
    15. var req;
    16. try
    17. {
    18. req = window.XMLHttpRequest?new XMLHttpRequest():
    19. new ActiveXObject("Microsoft.XMLHTTP");
    20. }
    21. catch (e)
    22. {
    23. //Kein AJAX Support
    24. }
    25. req.onreadystatechange = function()
    26. {
    27. if ((req.readyState == 4) && (req.status == 200))
    28. {
    29. document.getElementById('inhalt3').innerHTML = req.responseText;
    30. }
    31. };
    32. var id = document.getElementById('dropdown2').value;
    33. req.open('get', 'func1.php?s='+ id + '&anti_cache=' + Math.random());
    34. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    35. req.send('s='+ id);
    36. }
    37. //-->
    38. </script>
    39. //hier das zweite script
    40. <script type="text/javascript">
    41. <!--
    42. function sendRequest2()
    43. {
    44. var req;
    45. try
    46. {
    47. req = window.XMLHttpRequest?new XMLHttpRequest():
    48. new ActiveXObject("Microsoft.XMLHTTP");
    49. }
    50. catch (e)
    51. {
    52. //Kein AJAX Support
    53. }
    54. req.onreadystatechange = function()
    55. {
    56. if ((req.readyState == 4) && (req.status == 200))
    57. {
    58. document.getElementById('inhalt2').innerHTML = req.responseText;
    59. }
    60. };
    61. var id = document.getElementById('inhalt3').value;
    62. req.open('get', 'func2.php?s='+ id + '&anti_cache=' + Math.random());
    63. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    64. req.send('s='+ id);
    65. }
    66. //-->
    67. </script>
    68. </head>
    69. <body>
    70. <div id="Inhalt">
    71. //bla bla
    72. <p>
    73. <form name="form" method="post" action="">
    74. <select id="dropdown2" onChange="sendRequest1()">
    75. <option value="">Jahr</option>
    76. <?
    77. /*Abfrage für die Jahre*/
    78. $result = mysql_query("SELECT
    79. id,
    80. datum
    81. FROM
    82. ".$rofl."_kunde
    83. GROUP BY datum
    84. HAVING count(datum)>0
    85. " );
    86. //hier passier ganz viel, aber unwichtig
    87. //und solange option felder angelegt wie $new groß ist!
    88. for($i=0; $i<$count3; $i++)
    89. {
    90. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    91. };
    92. ?>
    93. </select>
    94. <b id="inhalt3"></b>
    95. <b id="inhalt2"></b>
    96. <input type="submit" name="Anzeigen" value="anzeigen">
    97. </form>
    98. </p>
    99. </div>
    100. </body>
    101. </html>
    Alles anzeigen

    Die selects werden durch <b id=""></b> reingeladen... Ja bissl komisch, aber sobald ich divs benutzt hab, hat er mir die selects nichtmehr nebeneinander angezeigt, sondern untereinander



    Quellcode

    1. //func1.php erste nachzuladende PHP
    2. <?php
    3. //paar includes, verbindung zur db, sonstiges gedöhns
    4. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    5. WHERE
    6. datum like '".$_GET[s]."%'
    7. GROUP BY datum
    8. HAVING count(datum)>0 ") or die(mysql_error());
    9. //hier passiert ganz viel
    10. ?>
    11. <select id="inhalt3" onChange="sendRequest2()">
    12. <option>Monat</option>
    13. <?
    14. //und solange option felder angelegt wie $new groß ist!
    15. for($i=0; $i<$count3; $i++)
    16. {
    17. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    18. };
    19. ?>
    20. </select>
    Alles anzeigen


    Quellcode

    1. //func2.php zweite nachzuladende PHP
    2. <?php
    3. //paar includes verbindung zur db, sonstiges gedöhns
    4. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    5. WHERE
    6. datum like ' ".$jahr."%".$monat."%'
    7. GROUP BY datum
    8. HAVING count(datum)>0 ") or die(mysql_error());
    9. //ganz viel gedöhns
    10. ?>
    11. <select id="inhalt2">
    12. <option>Tag</option>
    13. <?
    14. //und solange option felder angelegt wie $new groß ist!
    15. for($i=0; $i<$count3; $i++)
    16. {
    17. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    18. };
    19. ?>
    20. </select>
    Alles anzeigen


    in func1.php versuche ich mit onChange ein script aufzurufen das es auf der seite nicht gibt, ich weiß, das war noch, als ich versucht hab das script in die func1.php einzubinden. Möchte das select komplett aus den func"x".php raus haben.

    Ich hoffe ihr könnt mir helfen, kaue nun schon ewig drauf rum und komm nicht weiter...
    soll ich den unnötigen code rausschneiden? dann wirds vllt übersichtlicher
    edit: ok habs rausgenommen :)

    vielen Dank

    grüße Timo
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von eseL ()

  • Ich hab mehrere Fehler gefunden. Da ich aber jetzt nicht die Zeit habe alle aufzulisten nur folgende Tips:

    1) Laß dir das HTML mal validieren
    2) Schalte alle Fehlermeldungen für PHP ein

    Außerdem ist es sinnvoll ordentlich einzurücken. Sonst macht das Lesen deines Codes keinen Spaß. ;)

    Zuguterletzt: laß dir mal document.getElementById('dropdown2').value mittels alert() ausgeben ...
  • die validierung is mir ehrlich gesagt in der grobschlachterphase ganz egal, wenn ich n auto plane und grad den motor bau, mach ich mir keine gedanken über das interieur. und angenommen ich würde das interieur für den bau des motors benötigen, würde ich sicher kein weißes leder verwenden sondern notdürftige rohstahlplatten... :)

    error reporting hab ich, nur wurde das wie 95% der restlichen syntax von mir rausgenommen, weils hiermit grade gar nix zu tun hat... :) und aller php code funzt wunderbar, mir gehts hier ums JS

    das einrücken vom code haste recht is mir nicht aufgefallen das es bei copy und paste irgendwie verloren ging.. naja is ja nimmer viel code, wichtig is ja eigntl nur der JS code oben und den hab ich so gut es geht grade eingerückt..
    hoffe isr nun angenehmer zu lesen

    grüße
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • so funktioniert mein code einwandfrei, allerdings nur mit firefox, opera und safari, nicht mit dem ie...

    Quellcode

    1. //tagesansicht
    2. <?php
    3. /*Es wird eine Datei eingebunden, die das Login checkt */
    4. //includes verbindung zur DB
    5. ?>
    6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
    7. <html>
    8. <head>
    9. <title>Wilkommen bei der Online-verbrauchsübersicht</title>
    10. <style type="text/css">
    11. //ein bissl css
    12. </style>
    13. <script type="text/javascript">
    14. <!--
    15. function sendRequest1()
    16. {
    17. var req;
    18. try {
    19. req = window.XMLHttpRequest?new XMLHttpRequest():
    20. new ActiveXObject("Microsoft.XMLHTTP");
    21. } catch (e)
    22. {
    23. //Kein AJAX Support
    24. }
    25. req.onreadystatechange = function()
    26. {
    27. if ((req.readyState == 4) && (req.status == 200))
    28. {
    29. document.getElementById('inhalt3').innerHTML = req.responseText;
    30. }
    31. };
    32. var id = document.getElementById('dropdown2').value;
    33. req.open('get', 'func1.php?s='+ id + '&anti_cache=' + Math.random());
    34. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    35. req.send('s='+ id);
    36. }
    37. //-->
    38. </script>
    39. <script type="text/javascript">
    40. <!--
    41. function sendRequest2()
    42. {
    43. var req;
    44. try
    45. {
    46. req = window.XMLHttpRequest?new XMLHttpRequest():
    47. new ActiveXObject("Microsoft.XMLHTTP");
    48. } catch (e)
    49. {
    50. //Kein AJAX Support
    51. }
    52. req.onreadystatechange = function()
    53. {
    54. if ((req.readyState == 4) && (req.status == 200))
    55. {
    56. document.getElementById('inhalt2').innerHTML = req.responseText;
    57. }
    58. };
    59. var id = document.getElementById('inhalt3').value;
    60. req.open('get', 'func2.php?s='+ id + '&anti_cache=' + Math.random());
    61. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    62. req.send('s='+ id);
    63. }
    64. //-->
    65. </script>
    66. </head>
    67. <body>
    68. <ul id="Navigation">
    69. //links
    70. </ul>
    71. <div id="Info">
    72. //unwichtig
    73. </div>
    74. <div id="Inhalt">
    75. <p>
    76. <form name="form" method="post" action="">
    77. <select id="dropdown2" onChange="sendRequest1()">
    78. <option value="">Jahr</option>
    79. <?
    80. /*Abfrage für die Jahre*/
    81. $result = mysql_query("SELECT
    82. id,
    83. datum
    84. FROM
    85. ".$rofl."_kunde
    86. GROUP BY datum
    87. HAVING count(datum)>0
    88. " );
    89. /*unwichtig*/
    90. for($i=0; $i<$count3; $i++)
    91. {
    92. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    93. };
    94. ?>
    95. </select>
    96. <select id="inhalt3" onChange="sendRequest2()">
    97. <option>Monat</option>
    98. </select>
    99. <select id="inhalt2">
    100. <option>Tag</option>
    101. <input type="submit" name="Anzeigen" value="anzeigen">
    102. </form>
    103. </p>
    104. </div>
    105. </body>
    106. </html>
    Alles anzeigen





    Quellcode

    1. //func1.php
    2. <?php
    3. include_once 'checkLogin.inc.php';
    4. include_once 'config.inc.php';
    5. //verbindung zur db
    6. $rofl = $_SESSION['kundennummer'];
    7. $_SESSION['s'] = $_GET[s];
    8. $query = mysql_real_escape_string($_POST['s']);
    9. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    10. WHERE
    11. datum like '".$_GET[s]."%'
    12. GROUP BY datum
    13. HAVING count(datum)>0 ") or die(mysql_error());
    14. /*unwichtig*/
    15. for($i=0; $i<$count3; $i++)
    16. {
    17. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    18. };
    19. ?>
    Alles anzeigen





    Quellcode

    1. <?php
    2. include_once 'checkLogin.inc.php';
    3. include_once 'config.inc.php';
    4. //verbindung zur db
    5. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    6. WHERE
    7. datum like '%".$monat."%'
    8. GROUP BY datum
    9. HAVING count(datum)>0 ") or die(mysql_error());
    10. /*unwichtig*/
    11. for($i=0; $i<$count3; $i++)
    12. {
    13. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    14. };
    15. ?>
    Alles anzeigen
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von eseL ()

  • eseL schrieb:

    die validierung is mir ehrlich gesagt in der grobschlachterphase ganz egal, ...

    Sollte es aber!

    Quellcode

    1. <select id="inhalt2">
    2. <option>Tag</option>

    Hier fehlt zum Beispiel das schließende </select>. Was ist dann aber document.getElementById('inhalt2').innerHTML???

    eseL schrieb:

    error reporting hab ich ... mir gehts hier ums JS

    OK, geschenkt ...

    eseL schrieb:

    hoffe isr nun angenehmer zu lesen

    Danke!

    Probier mal folgendes ...

    Quellcode

    1. var id = document.getElementById('dropdown2').value;
    2. alert(id);
    3. req.open('get', 'func1.php?s='+ id + '&anti_cache=' + Math.random());


    Quellcode

    1. var id = document.getElementById('inhalt3').value;
    2. alert(id);
    3. req.open('get', 'func1.php?s='+ id + '&anti_cache=' + Math.random());


    und lies dir dann folgende Seite durch:
    de.selfhtml.org/javascript/objekte/options.htm
  • eseL schrieb:

    in func1.php versuche ich mit onChange ein script aufzurufen das es auf der seite nicht gibt, ...

    Das ist ja auch kein Problem.

    eseL schrieb:

    Möchte das select komplett aus den func"x".php raus haben.

    Warum? Das ist aber die beste Möglichkeit. Siehe support.microsoft.com/?scid=kb%3Ben-us%3B276228&x=18&y=10

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Marcus Gnaß ()

  • Ja das hab ich mir schon mehrmals angeschaut bevor ich mich dazu entschlossen hab hier nen Thread zu erstellen... Ich peil das nich so ganz was die meinen... ^^

    ich würde die selectes gerne raushaben, da sonst der onchange handler für das 3. select in der func2.php steht, und das script dann auch da rein muss... dann werde ich überflutet von fehlern... oder gibt es eine möglichkeit bei onChange, einen pfad oder eine datei für das auszuführende script anzugeben ?(

    grüße timo
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Wenn dir dieser Bug bekannt war hättest du ihn erwähnen können ... grumpf!

    Ohne es jetzt nochmal ausprobiert zu haben gehe ich davon aus, daß es kein Problem ist das Select-Tag in deiner func1.php stehen zu haben (was der Workaround für den beschriebenen Bug ist). Du mußt dann natürlich (das hast du richtig erkannt) auch in diesem Tag das onclick-Event definieren. Die JS-Funktion muß aber nicht in der func1.php stehen! Sie ist ja bereits in deiner Hauptdatei definiert und das Ergebnis von funcX.php wird ja nur in das vorhandene Dokument eingebettet.

    Zu einem Problem würde dieses Konstrukt nur dann führen, wenn du funcX.php noch in andere "Hauptseiten" einbinden möchtest die dieses Verhalten (den EventHandler) nicht unterstützen/fordern.

    dann werde ich überflutet von fehlern

    Welche Fehler sind das?
  • Hi Marcus,

    Quellcode

    1. Tagesansicht.php
    2. <?php
    3. /*Es wird eine Datei eingebunden, die das Login checkt */
    4. /*includes verbindung zur db*/
    5. ?>
    6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
    7. <html>
    8. <head>
    9. <title>Wilkommen bei der Online-verbrauchsübersicht</title>
    10. <style type="text/css">
    11. /*css gedöhns*/
    12. </style>
    13. <script type="text/javascript">
    14. <!--
    15. function sendRequest1()
    16. {
    17. var req;
    18. try {
    19. req = window.XMLHttpRequest?new XMLHttpRequest():
    20. new ActiveXObject("Microsoft.XMLHTTP");
    21. } catch (e)
    22. {
    23. //Kein AJAX Support
    24. }
    25. req.onreadystatechange = function() {
    26. if ((req.readyState == 4) && (req.status == 200)) {
    27. document.getElementById('inhalt3').innerHTML = req.responseText;
    28. }
    29. };
    30. var id = document.getElementById('dropdown2').value;
    31. alert(id);
    32. req.open('get', 'func1.php?s='+ id + '&anti_cache=' + Math.random());
    33. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    34. req.send('s='+ id);
    35. }
    36. //-->
    37. </script>
    38. <script type="text/javascript">
    39. <!--
    40. function sendRequest2()
    41. {
    42. var req;
    43. try {
    44. req = window.XMLHttpRequest?new XMLHttpRequest():
    45. new ActiveXObject("Microsoft.XMLHTTP");
    46. } catch (e)
    47. {
    48. //Kein AJAX Support
    49. }
    50. req.onreadystatechange = function() {
    51. if ((req.readyState == 4) && (req.status == 200)) {
    52. document.getElementById('inhalt2').innerHTML = req.responseText;
    53. }
    54. };
    55. var id = document.getElementById('inhalt3').value;
    56. alert(id);
    57. req.open('get', 'func2.php?s='+ id + '&anti_cache=' + Math.random());
    58. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    59. req.send('s='+ id);
    60. }
    61. //-->
    62. </script>
    63. </head>
    64. <body>
    65. <div id="Inhalt">
    66. <p>
    67. <form name="form" method="post" action="">
    68. <select id="dropdown2" onChange="sendRequest1()">
    69. <option value="">Jahr</option>
    70. <?
    71. /*Abfrage für die Jahre*/
    72. $result = mysql_query("SELECT
    73. id,
    74. datum
    75. FROM
    76. ".$rofl."_kunde
    77. GROUP BY datum
    78. HAVING count(datum)>0
    79. " );
    80. /*blablub*/
    81. //und solange option felder angelegt wie $new groß ist!
    82. for($i=0; $i<$count3; $i++)
    83. {
    84. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    85. };
    86. ?>
    87. </select>
    88. [color=#ff0000]
    89. <div id="inhalt3"></div>
    90. <div id="inhalt2"></div>
    91. [/color]
    92. <input type="submit" name="Anzeigen" value="anzeigen">
    93. </form>
    94. </div>
    95. </p>
    96. </body>
    97. </html>
    Alles anzeigen


    Quellcode

    1. func1.php
    2. <?php
    3. /*includes usw*/
    4. $_SESSION['s'] = $_GET[s];
    5. $query = mysql_real_escape_string($_POST['s']);
    6. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    7. WHERE
    8. datum like '".$_GET[s]."%'
    9. GROUP BY datum
    10. HAVING count(datum)>0 ") or die(mysql_error());
    11. /*blablub*/
    12. [color=#ff0000]
    13. ?>
    14. <select onChange="sendRequest2()">
    15. <option>Monat</option>
    16. <?
    17. //und solange option felder angelegt wie $new groß ist!
    18. for($i=0; $i<$count3; $i++)
    19. {
    20. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    21. };
    22. ?>
    23. </select>
    24. [/color]
    Alles anzeigen



    Quellcode

    1. func2.php
    2. <?php
    3. /*includes und so*/
    4. $_SESSION['ss'] = $_GET[s];
    5. $rofl = $_SESSION['kundennummer'];
    6. $jahr = $_SESSION['s'];
    7. $monat = $_SESSION['ss'];
    8. $query = mysql_real_escape_string($_POST['s']);
    9. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    10. WHERE
    11. datum like '".$jahr."-".$monat."%'
    12. GROUP BY datum
    13. HAVING count(datum)>0 ") or die(mysql_error());
    14. /*blablub*/
    15. [color=#ff0000]
    16. ?>
    17. <select >
    18. <option>Tag</option>
    19. <?
    20. //und solange option felder angelegt wie $new groß ist!
    21. for($i=0; $i<$count3; $i++)
    22. {
    23. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    24. };
    25. ?>
    26. </select>
    27. [/color]
    Alles anzeigen


    habe nun die selects ausgelagert in die funcX dateien. Diese werden dann durch die div mit der richtigen id (die selbe wie die selects vorher hatten) eingebunden. Das läuft auch, select 1 und 2 werden mir gefüllt, nur sobald ich auf select 2 klicke wird in der func1.php der onChange handler aufgerufen. Dieser möchte das script starten (sendRequest2()), das wiederum die func2.php nachläd und die ergebnisse der func2 in das dritte select feld einträgt.
    Kann immo nicht funzen, da der onChange handler, das script sendRequest2() vergeblich in der func1.php suchen kann, denn es liegt in der tagesansicht.
    Einbinden in die func1.php bringt meiner meinung nach nichts, da sendRequest2() auf die werte des ersten selects zugreift, und diese liegen ebenso in der tagesansicht.php und nicht in der func1.php.

    Allerdings reichen meine kenntnisse nicht aus, um das sendRequest2() richtig in die func1.php einzubinden...

    kann ich nun dem onchange sagen, wo das script liegt? also das er in der tagesansciht.php das script aufrufen soll?! ne oder...

    dann bleibt ja nurnoch das script in die func1.php einzubinden. inwiefern müsste ich denn meinen code hier ändern:

    Quellcode

    1. func1.php
    2. <script type="text/javascript">
    3. <!--
    4. function sendRequest2()
    5. {
    6. var req;
    7. try {
    8. req = window.XMLHttpRequest?new XMLHttpRequest():
    9. new ActiveXObject("Microsoft.XMLHTTP");
    10. } catch (e)
    11. {
    12. //Kein AJAX Support
    13. }
    14. req.onreadystatechange = function() {
    15. if ((req.readyState == 4) && (req.status == 200)) {
    16. document.getElementById('inhalt2').innerHTML = req.responseText;
    17. }
    18. };
    19. var id = document.getElementById('inhalt3').value;
    20. alert(id);
    21. req.open('get', 'func2.php?s='+ id + '&anti_cache=' + Math.random());
    22. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    23. req.send('s='+ id);
    24. }
    25. //-->
    26. </script>
    27. <?php
    28. /*includes und so*/
    29. $rofl = $_SESSION['kundennummer'];
    30. $_SESSION['s'] = $_GET[s];
    31. $query = mysql_real_escape_string($_POST['s']);
    32. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    33. WHERE
    34. datum like '".$_GET[s]."%'
    35. GROUP BY datum
    36. HAVING count(datum)>0 ") or die(mysql_error());
    37. /*blablubb*/
    38. ?>
    39. <select onChange="sendRequest2()">
    40. <option>Monat</option>
    41. <?
    42. //und solange option felder angelegt wie $new groß ist!
    43. for($i=0; $i<$count3; $i++)
    44. {
    45. echo '<option value="'.$new[$i].'">'.$new[$i].'</option>';
    46. };
    47. ?>
    48. </select>
    Alles anzeigen


    edit:
    ok das mit der color hat wohl nicht geklappt wollte dir die stellen bissl hervorheben wo ich die divs angebracht hab... ok nicht weiter beachten..

    seitdem ich die selects ausgelagert habe, popt er mir durch den alert, beim ersten select den richtigen wert, beim zweiten steht nun nur noch "udnefined"... liegt das daran das select 3 noch nicht gefüllt ist?
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von eseL ()

  • eseL schrieb:

    Kann immo nicht funzen, da der onChange handler, das script sendRequest2() vergeblich in der func1.php suchen kann, denn es liegt in der tagesansicht.


    Ich glaube genau das ist dein Mißverständnis. Sobald du sendRequest1() ausgeführt hast wird das Ergebnis von func1.php (das Select) Teil (!!!) der tagesansicht und hat somit Zugriff auf sendRequest2(). Bitte teste das einfach mal.
  • Hab ich, die erten beiden selects gehen, das dritte bleibt leer!

    die selects werden ja nacheinander erstellt, bei klick in das erste, kommt das zweite usw... Sobald ich in das zweite klicke kommt ein drittes hinzu, leider ohne inhalt! also der onchange funzt dann wohl, sonst würde das dritte select nicht aus dem nichts auftauchen :)

    edit:
    Ok geht nun zur hälfte! habe aus meinen mysql query die where klausel rausgenommen, dann wird mir auch das dritte gefüllt!


    Hier das statement aus der func2.php...
    $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    WHERE
    datum like '".$jahr."-".$monat."%'

    GROUP BY datum
    HAVING count(datum)>0 ") or die(mysql_error());


    $jahr und $monat sind variablen die ich der session übergeben habe.

    in func 1 folgendermaßen:

    Quellcode

    1. ....
    2. $_SESSION['s'] = $_GET[s];
    3. $query = mysql_real_escape_string($_POST['s']);
    4. ...


    in func 2 so:

    Quellcode

    1. ...
    2. $_SESSION['ss'] = $_GET[s];
    3. $jahr = $_SESSION['s'];
    4. $monat = $_SESSION['ss'];
    5. $query = mysql_real_escape_string($_POST['s']);
    6. ...



    wo liegt der fehler? er gibt mir durch den altert im ersten select im popup den richtigen wert an, nämlich das jahr! sobald ich in das zweite select klicke, sollte er mit den monat ausgeben, gibt allerdings nur "undefined" aus...
    *verzweifel*

    das komische ist, wenn ich die selects nicht auslagere, dann funzt es ohne probleme... aber was haben die ausgelagerten selects mit den variablen $_POST['s'] und mit dem übergeben an die session zu tun ?!
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von eseL ()

  • Nee leider nicht...

    Ich schreibe in der funnc1.php als erstes mit

    Quellcode

    1. $_SESSION['s'] = $_GET[s];

    den wert des ersten selects in die sessionvariable.

    in der func 2 schreibe ich dann zuerstmal

    Quellcode

    1. $_SESSION['ss'] = $_GET[s];

    den wert des zweiten selects in die session.

    Im anschluss sieht mein Sql statement in der func2.php folgendermaßen aus:

    Quellcode

    1. $jahr = $_SESSION['s']
    2. $monat = $_SESSION['ss']
    3. $result = mysql_query("SELECT id,datum FROM ".$rofl."_kunde
    4. WHERE
    5. datum like '".$jahr."-".$monat."%'
    6. GROUP BY datum
    7. HAVING count(datum)>0 ") or die(mysql_error());


    in der Tagesansicht.php gebe ich mir die sessionvariablen aus:

    Quellcode

    1. <?
    2. $JahrT = $_SESSION['s'];
    3. $MonatT = $_SESSION['ss'];
    4. echo "Jahr -> $JahrT<br>";
    5. echo "Monat -> $MonatT";
    6. ?>


    Das Jahr also $_SESSION['s'] wird korrekt in die session geschrieben. Nur den Monat möchte er nicht haben.. Popt mir auch immer durch alert "undefined" auf.
    Ich denke mal das er am "$_GET['s']" ins hapern kommt. Ich les ja in beiden funcs, also func1 und func2, das select durch "$_GET['s']" aus.
    vllt kommt er da wirklich durcheinander. Soll ich mal in der func2 das zweite select mit "$_GET[irgendwas]" auslesen?
    Inwiefern muss ich das script hier dann ändern?

    Quellcode

    1. <script type="text/javascript">
    2. <!--
    3. function sendRequest2()
    4. {
    5. var req;
    6. try {
    7. req = window.XMLHttpRequest?new XMLHttpRequest():
    8. new ActiveXObject("Microsoft.XMLHTTP");
    9. } catch (e)
    10. {
    11. //Kein AJAX Support
    12. }
    13. req.onreadystatechange = function() {
    14. if ((req.readyState == 4) && (req.status == 200)) {
    15. document.getElementById('inhalt2').innerHTML = req.responseText;
    16. }
    17. };
    18. var id = document.getElementById('inhalt3').value;
    19. alert(id);
    20. req.open('get', 'func2.php?s='+ id + '&anti_cache=' + Math.random());
    21. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    22. req.send('s='+ id);
    23. }
    24. //-->
    25. </script>
    Alles anzeigen


    das $_GET steht nur in hochkomma [' '] weil er mirs sonst durchstreicht[s]...
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von eseL ()

  • ne leider nicht bin hier im Betrieb da geht das leider nicht...

    alternativ könnt ich aber den firebug installieren und dir das fehlerlog posten!

    ich mach mal :)

    edit: öh ganz durchsteigen tu ich da nich...?(

    grüße
    Timo
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von eseL ()

  • Vllt nochmal zum Verständniss für die, die nicht so viel lesen möchten.

    Ich hab eine selectbox, nach auswahl in der ersten Selectbox, füllt sich die zweite automatisch mit Abhängigkeit von der ersten. Indem ich in der func1 per $_POST["s"] die Daten aus dem ersten select feld fülle. Dann schreibe ich $_SESSION['s'] = $_POST['s'] den Wert als Sessionvariable.

    Das dritte selectfeld soll abhängig von der ersten und der zweiten Box sein. Also braucht die DB abfrage die werte aus der ersten und der zweiten Selectbox, um mit dem Ergebnis die dritte zu füllen.

    Also in der func2 hole ich mir erstmal aus der session den Wert der ersten. So ungefähr: $jahr = $_SESSION['s'];. Das klappt Prima, den wert habe ich!

    Dann möchte ich in der func2 auch den wert aus der zweiten select box holen. Wie in der func1 über exakt das selbe prinzip. $_SESSION['ss'] = $_POST['s'] (und ich denke hier kommt er durcheinander).

    Nun müsste in $_SESSION['s'] der Wert des ersten und in $_SESSION['ss'] der wert der zweiten box stehen. Ist aber leider nicht der fall :- / Er bekommt den wert aus der zweiten selectbox einfach nicht. Durch alert(id); popt mir ein fenster mit dem Inhalt "undefined" auf. Also er hat halt kein Wert aus der zweiten um die dritte korrekt zu füllen!
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Ich würd dir vllt mal empfehlen, die ganzen Ajaxabfragen mit einem Framework wie Prototype oder jQuery zu überarbeiten.
    Damit sparst du platz, es ist übersichtlicher und ich persönlich fände die fehlersuche würde sich leichter gestalten. Aber okay das kann auch nur die persönliche meinung sein.



    Desweiteren du arbeitest mit sessions?
    Wieso sieht man nirgends wo du sessions definierst oder abfragst session_start(); ? Hast du sehrwarscheinlich der übersichtlichkeit entfernt?


    EDIT://

    Quellcode

    1. var id = document.getElementById('inhalt3').value;
    2. und
    3. <div id="inhalt3"></div>


    geht meines wissens nach nicht... value geht bei formularfeldern wie textarea und input, select usw...bei div's muss es innerHTML heißen

    div's haben nämlich kein value ;)

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Snowflake ()

  • YES habe die Lösung! Danke an alle... war ein wirklich peinlicher Fehler.. höhö

    also ich habe ja den Workaround von MS machen müssen und dann mit divs gearbeitet. In die divs wurden dann die func dateien geladen und in denen wurde das selectfeld generiert!
    In meinen zweiten script, das die werte aus dem zweiten selectfeld saugen soll und damit die abfrage für die dritte schreiben gab es folgenden fehler:
    In der zeile in der ich mir den ausgewählten Inhalt der zweiten selectbox hole, nämlich:

    Quellcode

    1. var id = document.getElementById('func1').value;


    war unter getElementById('irgendwas') nicht die ID der selectbox aus der nachzuladenden func datei, sondern die ID des DIV's. hab dann einfach in der func1.php dem select ne id gegeben und die id im script eingetragen. Funzt wunderbar!
    danke an snowflake, wegen dir habe ich mir die zeile nochmal genau angeschaut!

    ihr hört aber sicher nochmal von mir!

    EDIT:
    Ok das wirklich gestörte daran ist, das es im IE 6 einwandfrei funzt, im IE7, Opera und Firefox nicht!!!
    ;(



    grüße
    Timo
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von eseL ()