1. Ajaxformular

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

  • 1. Ajaxformular

    Hallo zusammen,

    Ich fange gerade an mit Ajax zu arbeiten und habe leider ein Problem bei dem ich um eure Hilfe bitte.

    Um es kurz zu machen. Ich habe ein Formular mit drei Dropdown Boxen. Zwei dieser Boxen sind statisch. Die dritte wird vom Javascript gefüllt. Ziel des Formulars ist es, einen Preis aus einer Datenbank auszulesen und diesen sobal eine der Dropdownboxen verändert wird über Ajax zu aktualisieren.

    Das Problem:
    Die dritte Box soll Ihre Werte ebensfalls aus der Datenbank erhalten. Das klappt auch wunderbar. ICh hole die Werte mit PHP und scheibe sie dann per Javasript in einen Div-Tag. Nur leider kann das Javascript anschließend keinen gültigen Wert aus diesem Feld auslesen.

    Danke im Voraus für eure Hilfe

    und hier der Quellcode:

    index.html

    Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2. "http://www.w3.org/TR/html4/loose.dtd">
    3. <html>
    4. <head>
    5. <title>Flaggentool</title>
    6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    7. <script type="text/javascript" src="flaggentool.js"></script>
    8. </head>
    9. <body onLoad="getFormat();">
    10. <form name="form1">
    11. <select id="menge" name="menge" onChange="sndReq();">
    12. <option>1</option>
    13. <option>2</option>
    14. <option>3</option>
    15. <option>4</option>
    16. <option>5</option>
    17. <option>6</option>
    18. <option>7</option>
    19. <option>8</option>
    20. <option>9</option>
    21. <option>10</option>
    22. <option>11</option>
    23. <option>12</option>
    24. </select><br>
    25. <select id="fahnenart" name="fahnenart" onChange="getFormat();">
    26. <option>hochformat</option>
    27. <option>querformat</option>
    28. </select><br>
    29. <div id="format"></div>
    30. <br>
    31. <div id="gesamtpreis"></div>
    32. </form>
    33. </body>
    34. </html>
    Alles anzeigen


    js:

    Quellcode

    1. function createRequestObject() {
    2. var ro;
    3. var browser = navigator.appName;
    4. if(browser == "Microsoft Internet Explorer") {
    5. ro = new ActiveXObject("Microsoft.XMLHTTP");
    6. } else {
    7. ro = new XMLHttpRequest();
    8. }
    9. return ro;
    10. }
    11. var http = createRequestObject();
    12. function getFormat(){
    13. var fahnenart = document.getElementById('fahnenart').value;
    14. if(fahnenart == "") fahnenart = hochformat;
    15. http.open('get', 'getFormat.php?fahnenart=' + fahnenart);
    16. http.onreadystatechange = handleResponse;
    17. http.send(null);
    18. sndReq();
    19. }
    20. function sndReq() {
    21. var menge = document.getElementById('menge').value;
    22. var fahnenart = document.getElementById('fahnenart').value;
    23. var format = document.getElementById('format').value;
    24. alert(format);
    25. http.open('get', 'flaggentool.php?menge='+ menge +'&fahnenart=' + fahnenart +'&format=' + format);
    26. http.onreadystatechange = handleResponse;
    27. http.send(null);
    28. }
    29. function handleResponse() {
    30. if(http.readyState == 4) {
    31. var response = http.responseText;
    32. var update = new Array();
    33. if(response.indexOf('|' != -1)) {
    34. update = response.split('|');
    35. document.getElementById(update[0]).innerHTML = update[1];
    36. }
    37. }
    38. }
    Alles anzeigen
  • Hallo,

    inzwischen bin ich weiter. Es funktioniert, dass ich aus einer Dropdownbox einen Wert auslese und durch diesen Wert neue Werte aus der DB hole. Die schreibe ich dann in einen DIV-Tag und kann sie auch auslesen.

    Allerdings, und jetzt kommt das für meine Begriffe kuriose, funktioniert dies nur wenn ich eine alert Meldung in meiner sndReq Funktion habe. Sobald ich diese entferne, wird die Seite nicht mehr richtig aktualiesiert. Dabei ist egal an welcher Stelle in der Funktion diese Message ausgegeben wird und welchen Wert sie ausgibt.

    Hier der Quelltext:

    index.html:

    Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2. "http://www.w3.org/TR/html4/loose.dtd">
    3. <html>
    4. <head>
    5. <title>Flaggentool</title>
    6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    7. <script type="text/javascript" src="flaggentool.js"></script>
    8. </head>
    9. <body onLoad="getFormat();">
    10. <form name="form1">
    11. <table width="400" border="0" cellspacing="0" cellpadding="0">
    12. <tr>
    13. <td width="200px">Menge:</td>
    14. <td><select id="menge" name="menge" onChange="sndReq();">
    15. <option>1</option>
    16. <option>2</option>
    17. <option>3</option>
    18. <option>4</option>
    19. <option>5</option>
    20. <option>6</option>
    21. <option>7</option>
    22. <option>8</option>
    23. <option>9</option>
    24. <option>10</option>
    25. <option>11</option>
    26. <option>12</option>
    27. </select></td>
    28. <td rowspan="4" width="200px"><div id="bild"></div>
    29. </tr>
    30. <tr>
    31. <td width="200px">Fahnenart:</td>
    32. <td><select id="fahnenart" name="fahnenart" onChange="getFormat();">
    33. <option>hochformat</option>
    34. <option>querformat</option>
    35. </select></td>
    36. </tr>
    37. <tr>
    38. <td width="200px">Format:</td>
    39. <td><div id="format_div"></div>
    40. </td>
    41. </tr>
    42. <tr>
    43. <td width="200px">Gesamtpreis:</td>
    44. <td><div id="gesamtpreis"></div></td>
    45. </tr>
    46. </table>
    47. </form>
    48. </body>
    49. </html>
    Alles anzeigen


    js:

    Quellcode

    1. // JavaScript Document
    2. function createRequestObject() {
    3. var ro;
    4. var browser = navigator.appName;
    5. if(browser == "Microsoft Internet Explorer") {
    6. ro = new ActiveXObject("Microsoft.XMLHTTP");
    7. } else {
    8. ro = new XMLHttpRequest();
    9. }
    10. return ro;
    11. }
    12. var http = createRequestObject();
    13. function getFormat(){
    14. var fahnenart = document.getElementById('fahnenart').value;
    15. if(fahnenart == "") fahnenart = hochformat;
    16. http.open('get', 'getFormat.php?fahnenart=' + fahnenart);
    17. http.onreadystatechange = handleResponse;
    18. http.send(null);
    19. sndReq();
    20. }
    21. function sndReq() {
    22. alert("test");
    23. var menge = document.getElementById('menge').value;
    24. var fahnenart = document.getElementById('fahnenart').value;
    25. var format = document.getElementById('format').value;
    26. http.open('get', 'flaggentool.php?menge='+ menge +'&fahnenart=' + fahnenart +'&format=' + format);
    27. http.onreadystatechange = handleResponse;
    28. http.send(null);
    29. }
    30. function handleResponse() {
    31. if(http.readyState == 4) {
    32. var response = http.responseText;
    33. var update = new Array();
    34. if(response.indexOf('|' != -1)) {
    35. update = response.split('|');
    36. document.getElementById(update[0]).innerHTML = update[1];
    37. }
    38. }
    39. }
    Alles anzeigen


    ich hoffe das ist schonmal eine Hilfe zu der 1. Frage bezüglich der Dropdownboxen und hoffe es hat jemand eine Antwort wie ich das Problem mit der Meldung lösen kann.
    Danke im Voraus[/url]
  • flaggentool.php

    Quellcode

    1. <?
    2. include 'db.php';
    3. $menge = $_GET[menge];
    4. $fahnenart = $_GET[fahnenart];
    5. $format = $_GET[format];
    6. if($menge == "")$menge = "1";
    7. if($fahnenart == "")$fahnenart = "hochformat";
    8. if($format == "" || $format == "undefined")$format = "80x200";
    9. function preis($art, $groeße, $stufe)
    10. {
    11. $sql = "SELECT $stufe
    12. FROM $art
    13. WHERE format = '$groeße'";
    14. $result = mysql_query($sql) OR die(mysql_error());
    15. while($row = mysql_fetch_assoc($result))
    16. { $preis = $row[$stufe];}
    17. return $preis;
    18. }
    19. function ergebnis($menge, $fahnenart, $format)
    20. {
    21. if($fahnenart == "hochformat")
    22. {
    23. if($format == "80x200" && $menge == "1")
    24. {$ergebnis = preis($fahnenart, $format, "preistufe1");}
    25. if($format == "80x200" && $menge >= "2")
    26. {$ergebnis = preis($fahnenart, $format, "preistufe2");}
    27. if($format == "80x200" && $menge >= "7")
    28. {$ergebnis = preis($fahnenart, $format, "preistufe3");}
    29. if($format == "100x300" && $menge == "1")
    30. $ergebnis = preis($fahnenart, $format, "preistufe1");
    31. if($format == "100x300" && $menge >= "4")
    32. $ergebnis = preis($fahnenart, $format, "preistufe2");
    33. if($format == "100x300" && $menge >= "7")
    34. $ergebnis = preis($fahnenart, $format, "preistufe3");
    35. if($format == "120x300" && $menge == "1")
    36. $ergebnis = preis($fahnenart, $format, "preistufe1");
    37. if($format == "120x300" && $menge >= "3")
    38. $ergebnis = preis($fahnenart, $format, "preistufe2");
    39. if($format == "120x300" && $menge >= "6")
    40. $ergebnis = preis($fahnenart, $format, "preistufe3");
    41. if($format == "150x400" && $menge == "1")
    42. $ergebnis = preis($fahnenart, $format, "preistufe1");
    43. if($format == "150x400" && $menge >= "2")
    44. $ergebnis = preis($fahnenart, $format, "preistufe2");
    45. if($format == "150x400" && $menge >= "4")
    46. $ergebnis = preis($fahnenart, $format, "preistufe3");
    47. if($format == "150x500" && $menge == "1")
    48. $ergebnis = preis($fahnenart, $format, "preistufe1");
    49. if($format == "150x500" && $menge == "2")
    50. $ergebnis = preis($fahnenart, $format, "preistufe2");
    51. if($format == "150x500" && $menge >= "3")
    52. $ergebnis = preis($fahnenart, $format, "preistufe3");
    53. }
    54. if($fahnenart == "querformat")
    55. {
    56. if($format == "120x80" && $menge == "1")
    57. $ergebnis = preis($fahnenart, $format, "preistufe1");
    58. if($format == "120x80" && $menge >= "2")
    59. $ergebnis = preis($fahnenart, $format, "preistufe2");
    60. if($format == "120x80" && $menge >= "10")
    61. $ergebnis = preis($fahnenart, $format, "preistufe3");
    62. if($format == "145x100" && $menge == "1")
    63. $ergebnis = preis($fahnenart, $format, "preistufe1");
    64. if($format == "145x100" && $menge >= "2")
    65. $ergebnis = preis($fahnenart, $format, "preistufe2");
    66. if($format == "145x100" && $menge >= "10")
    67. $ergebnis = preis($fahnenart, $format, "preistufe3");
    68. }
    69. $gesamtpreis = $ergebnis * $menge;
    70. return $gesamtpreis;
    71. }
    72. $total = ergebnis($menge, $fahnenart, $format);
    73. if($total != ""){
    74. $point = ".";
    75. $result_string = strchr($total, $point);
    76. $length = strlen($result_string);
    77. if(($length <= 2) && ($length > 0))
    78. {$total .= "0&euro;";}
    79. if($length == 0)
    80. {$total .= ".00&euro;";}}
    81. else{
    82. $total = "Kombination nicht m&ouml;glich";
    83. }
    84. echo 'gesamtpreis|'.$total;
    85. ?>
    Alles anzeigen


    getFormat.php

    Quellcode

    1. <?
    2. include 'db.php';
    3. $fahnenart = $_GET[fahnenart];
    4. if($fahnenart == "") $fahnenart = "hochformat";
    5. $sql = "SELECT format
    6. FROM $fahnenart";
    7. $result = mysql_query($sql) OR die(mysql_error());
    8. echo"format_div|<select id='format' name='format' onChange='getFormat();getFlag();sndReq();'>";
    9. while($row = mysql_fetch_assoc($result))
    10. {echo"<option value='".$row[format]."'>".$row[format]."</option>";}
    11. echo"</select>";
    12. ?>
    Alles anzeigen


    getFlag.php

    Quellcode

    1. <?
    2. include 'db.php';
    3. $format = $_GET[format];
    4. $fahnenart = $_GET[fahnenart];
    5. if($fahnenart == "")$fahnenart = "hochformat";
    6. if($format == "")
    7. $format = "80x200";
    8. $sql = "SELECT bild
    9. FROM $fahnenart
    10. WHERE format = '$format'";
    11. $result = mysql_query($sql) OR die(mysql_error());
    12. while($row = mysql_fetch_assoc($result)){
    13. echo"bild|<img src='".$row[bild]."' width='200px'></img>";
    14. }
    15. ?>
    Alles anzeigen


    So das sind alle PHP dateien. ich hoffe Ihr könnt mir helfen. Und danke für eure Mühe und Zeit die Ihr schon investiert habt.
  • Hallo,

    die gute Nachricht ist, ich habe mein Formular im Firefox genauso wie ich es haben wollte ans Laufen gebracht.
    Dummerweise funktioniert es im IE noch nicht.
    Das Problem:
    Wenn ich mit dieser Zeile Werte auslesen möchte, bekomme ich beim IE einfach gar nichts.

    Quellcode

    1. var format = document.getElementById('format').value;

    Kann mir jemand da vielleicht einen Tipp geben?

    Danke im Voraus
  • aber es ist wirklich nur diese zeile?
    ich hätte die ajax initialisierung auf unsere wiki version mit try-catch umgestellt

    Quellcode

    1. function createRequestObject() {
    2. try {
    3. req = window.XMLHttpRequest?new XMLHttpRequest():
    4. new ActiveXObject("Microsoft.XMLHTTP");
    5. } catch (e) {
    6. req = null;
    7. }
    8. return req;
    9. }


    ansonsten hab ich auch keine idee, warum das mit .value nicht geht...
    ich hab mal von einem workaround gepostet, weil der Internet Explorer mit innerHTML nicht auf select zugreifen kann

    http://www.easy-coding.de/4-select-mit-2-ajax-mysql-abfragen-fuellen-t1021.html#3773

    PS: in getflag.php hast du ne while schleife

    Quellcode

    1. while($row = mysql_fetch_assoc($result)){
    2. echo"bild|<img src='".$row[bild]."' width='200px'></img>";
    3. }


    die ist ja überflüssig