Ajax/PHP/MySQL: Selecten aus DB

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

  • Ajax/PHP/MySQL: Selecten aus DB

    Hallo Leute!

    Ich bin neu hier und nach langen Suchen nach einer Lösung bin ich auf euren Forum gestossen.
    Ich hoffe, ihr könnt mir weiter helfen. Mein Ziel ist es Ajax zu erlernen. Gewisse Vorkenntnisse in HTML, PHP und MySQL habe ich.
    Bin jedoch kein Profi und mache das als Hobby.

    Nun zu meinem Problem. Ich habe 3 Dateien: ajax.php, func.php und eine db-connect.php
    Nun wollte ich mein 1.Beispiel-Script mit Ajax+PHP+MySQL selber coden, was nicht gleich einwandfrei klappt.

    Es soll folgendes passieren: In einer DB habe ich eine Tabelle "ajax" mit 3 spalten angelegt (id, ja, nein).
    In der Eingabemaske kann ich zwischen JA und NEIN wählen. Wenn ich JA auswähle, soll aus der Spalte "ja" aus der DB ein Text unter der Eingabemaske erscheinen.
    Wenn ich NEIN auswähle, soll ein Text aus der Spalte "nein" unter der Eingabemaske erscheinen, ohne halt, dass sich die Seite neu lädt, also alles asynchron.

    Folgendes habe ich bereits coden können........ajax.php:

    HTML-Quellcode

    1. <html><head>
    2. <title>AJAX-Beispiel</title>
    3. <script type="text/Javascript">
    4. <!--
    5. function createXMLHttpRequest() {
    6. var ua;
    7. if(window.XMLHttpRequest) {
    8. try {
    9. ua = new XMLHttpRequest();
    10. } catch(e) {
    11. ua = false;
    12. }
    13. } else if(window.ActiveXObject) {
    14. try {
    15. ua = new ActiveXObject("Microsoft.XMLHTTP");
    16. } catch(e) {
    17. ua = false;
    18. }
    19. }
    20. return ua;
    21. }
    22. var req = createXMLHttpRequest();
    23. function sendRequest() {
    24. id = document.getElementById('dropdown').value;
    25. req.open('get', 'func.php?s='+ id);
    26. req.onreadystatechange = handleResponse;
    27. req.send(null);
    28. }
    29. function handleResponse() {
    30. if(req.readyState == 4){
    31. document.getElementById('inhalt').innerHTML = req.responseText;
    32. }
    33. else
    34. alert("loading" + ajax.readyState);
    35. }
    36. //-->
    37. </script>
    38. </head>
    39. <body>
    40. <p />Wählen Sie einen Eintrag aus um den Inhalt zu laden
    41. <select name="auswahl" id="dropdown" onchange="sendRequest()">
    42. <option value="ja">Ja</option>
    43. <option value="nein">Nein</option>
    44. </select>
    45. <div id="inhalt"></div>
    46. </body></html>
    Alles anzeigen

    und hier die func.php:

    Quellcode

    1. <?
    2. include("db-connect.php");
    3. //Inhalte laden
    4. if ($auswahl == "ja")
    5. $result = mysql_query("SELECT ja FROM tbl_ajax WHERE id = '".$_GET['s']."'; ");
    6. while($row = mysql_fetch_object($result))
    7. {
    8. echo '<p /><b>'.$row->ja.'</b><br />';
    9. }
    10. else if ($auswahl == "nein")
    11. $result2 = mysql_query("SELECT nein FROM tbl_ajax WHERE id = '".$_GET['s']."'; ");
    12. while($row2 = mysql_fetch_object($result2))
    13. {
    14. echo '<p /><b>'.$row2->nein.'</b>';
    15. }
    16. ?>
    Alles anzeigen


    Das Ganze funktioniert jedoch irgendwie nicht, und ich weiß nicht warum. :(

    Könnt ihr mir bitte weiter helfen?

    Gruß,
    Surfer
  • Also wenn ich das eingebe:

    func.php?s=ja

    ...kommt nichts raus, also weiße Seite.

    Also wie gesagt, es soll so sein, dass wenn ich in der Eingabemaske JA auswähle, dass der Text aus der JA-Spalte einer DB ausgelesen und unter der Eingabemaske ausgegeben wird. Genau das Ganze mit NEIN...

    Bis jetzt sehe ich wie gesagt eine weiße Seite, egal, ob ich JA oder NEIN auswähle, oder ob ich func.php?s=ja eingebe.

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

  • Quellcode

    1. <?
    2. include("db-connect.php");
    3. $auswahl = $_GET['s'];
    4. // !!! Hier validierung ergänzen
    5. //Inhalte laden
    6. if ($auswahl == "ja") {
    7. $result = mysql_query("SELECT ja FROM tbl_ajax WHERE id = '".$auswahl."'; ");
    8. while($row = mysql_fetch_object($result))
    9. echo '<p /><b>'.$row->ja.'</b><br />';
    10. } else if ($auswahl == "nein") {
    11. $result2 = mysql_query("SELECT nein FROM tbl_ajax WHERE id = '".$auswahl."'; ");
    12. while($row2 = mysql_fetch_object($result2))
    13. echo '<p /><b>'.$row2->nein.'</b>';
    14. }
    15. ?>
    Alles anzeigen


    Klammern waren irgendwie komisch. Habe es zwar nicht probiert, aber denke so sollte das gehen.


    Gruß,
    X-Eon



    Edit: Verdammt ^^ Das Einrücken ist im Editor aber auch komisch ...
  • Also ich habe jetzt folgendes unter func.php stehen:

    Quellcode

    1. <?
    2. include("auth.inc");
    3. $auswahl = $_GET['s'];
    4. if ($auswahl == "ja")
    5. {
    6. $result = mysql_query("SELECT ja FROM tbl_ajax WHERE id = 'ja'; ");
    7. while($row = mysql_fetch_object($result))
    8. echo '<p /><b>'.$row->ja.'</b><br />';
    9. }
    10. else if ($auswahl == "nein")
    11. {
    12. $result2 = mysql_query("SELECT nein FROM tbl_ajax WHERE id = 'ja'; ");
    13. while($row2 = mysql_fetch_object($result2))
    14. echo '<p /><b>'.$row2->nein.'</b>';
    15. }
    16. ?>
    Alles anzeigen


    ...und so sieht jetzt ajax.php aus:

    Quellcode

    1. <html><head>
    2. <title>AJAX-Beispiel</title>
    3. <script type="text/Javascript">
    4. <!--
    5. function createXMLHttpRequest() {
    6. var ua;
    7. if(window.XMLHttpRequest) {
    8. try {
    9. ua = new XMLHttpRequest();
    10. } catch(e) {
    11. ua = false;
    12. }
    13. } else if(window.ActiveXObject) {
    14. try {
    15. ua = new ActiveXObject("Microsoft.XMLHTTP");
    16. } catch(e) {
    17. ua = false;
    18. }
    19. }
    20. return ua;
    21. }
    22. var req = createXMLHttpRequest();
    23. function sendRequest() {
    24. id = document.getElementById('auswahl').value;
    25. req.open('get', 'func.php?s='+ id);
    26. req.onreadystatechange = handleResponse;
    27. req.send(null);
    28. }
    29. function handleResponse() {
    30. if(req.readyState == 4){
    31. document.getElementById('inhalt').innerHTML = req.responseText;
    32. }
    33. else
    34. alert("loading" + ajax.readyState);
    35. }
    36. //-->
    37. </script>
    38. </head>
    39. <body>
    40. <p />Wählen Sie einen Eintrag aus um den Inhalt zu laden
    41. <select name="auswahl" id="auswahl" onchange="sendRequest()">
    42. <option value="ja">ja</option>
    43. <option value="nein">nein</option>
    44. </select>
    45. <div id="inhalt"></div>
    46. </body></html>
    Alles anzeigen


    Aber immer noch weiße Seite....
  • Also ich habe das Script umprogrammiert und jetzt klappt es!

    Eine Frage habe ich jedoch noch. Und zwar im jetzigen Script wähle ich mit Hilfe von <select> zwischen JA und NEIN.
    Ich möchte jedoch anstatt <select> mit Links wählen. Das kriege ich nicht hin. Könnt ihr mir bitte helfen?

    Hier ist die ajax.html:

    Quellcode

    1. Ajax-Beispiel<html>
    2. <title>Ajax-Beispiel</title>
    3. <body>
    4. <script language="javascript" type="text/javascript">
    5. <!--
    6. //Browser Support
    7. function ajaxFunction()
    8. {
    9. var ajaxRequest;
    10. try{
    11. //Opera 8.0+, Firefox, Safari
    12. ajaxRequest = new XMLHttpRequest();
    13. } catch (e){
    14. //Internet Explorer Browsers
    15. try{
    16. ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    17. } catch (e) {
    18. try{
    19. ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    20. } catch (e){
    21. //Fehlerausgabe
    22. alert("Dein Browser ist kaputt!");
    23. return false;
    24. }
    25. }
    26. }
    27. //Funktion, die gesendete Daten aus dem Server bekommt
    28. ajaxRequest.onreadystatechange = function()
    29. {
    30. if(ajaxRequest.readyState == 4)
    31. {
    32. var ajaxDisplay = document.getElementById('ajaxAusgabe');
    33. ajaxDisplay.innerHTML = ajaxRequest.responseText;
    34. }
    35. }
    36. var bewertung = document.getElementById('bewertung').value;
    37. var queryString = "?bewertung=" + bewertung;
    38. ajaxRequest.open("GET", "function.php" + queryString, true);
    39. ajaxRequest.send(null);
    40. }
    41. //-->
    42. </script>
    43. Gefällt dir das Foto?
    44. <select id='bewertung' onchange='ajaxFunction()' />
    45. <option selected>Bitte auswählen</option>
    46. <option value="Ja">Ja</option>
    47. <option value="Nein">Nein</option>
    48. </select>
    49. <div id='ajaxAusgabe'></div>
    50. </body>
    51. </html>
    Alles anzeigen
  • :) Wenn ich dich richtig verstanden habe ...

    Quellcode

    1. <a href="#" onclick="ajaxFunction('Ja')">Ja</a>
    2. <a href="#" onclick="ajaxFunction('Nein')">Nein</a>


    Quellcode

    1. <script language="javascript" type="text/javascript">
    2. <!--
    3. //Browser Support
    4. function ajaxFunction(param)
    5. {
    6. var ajaxRequest;
    7. try{
    8. //Opera 8.0+, Firefox, Safari
    9. ajaxRequest = new XMLHttpRequest();
    10. } catch (e){
    11. //Internet Explorer Browsers
    12. try{
    13. ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    14. } catch (e) {
    15. try{
    16. ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    17. } catch (e){
    18. //Fehlerausgabe
    19. alert("Dein Browser ist kaputt!");
    20. return false;
    21. }
    22. }
    23. }
    24. //Funktion, die gesendete Daten aus dem Server bekommt
    25. ajaxRequest.onreadystatechange = function()
    26. {
    27. if(ajaxRequest.readyState == 4)
    28. {
    29. var ajaxDisplay = document.getElementById('ajaxAusgabe');
    30. ajaxDisplay.innerHTML = ajaxRequest.responseText;
    31. }
    32. }
    33. var bewertung = param;
    34. var queryString = "?bewertung=" + bewertung;
    35. ajaxRequest.open("GET", "function.php" + queryString, true);
    36. ajaxRequest.send(null);
    37. }
    38. //-->
    39. </script>
    Alles anzeigen


    So in etwa sollte das schon möglich sein.
  • Super! Danke euch! Es klappt nun alles...

    Eine Frage habe ich noch: Könnt ihr bitte gucken, ob die beiden Scripts (ajax.html und function.php) auch sicher gegen Hacker sind ?
    Evtl. Kommentare korrigieren. "ajax.html" findet man im vorigen Beitrag.

    Und hier die function.php:

    Quellcode

    1. <?php
    2. include('db-connect.php');
    3. //ID
    4. $bewertung = $_GET['bewertung'];
    5. //Schutz?
    6. $bewertung = mysql_real_escape_string($bewertung);
    7. if($bewertung == "Ja")
    8. {
    9. $query = "SELECT ja, jcount FROM tbl_ajax";
    10. mysql_query("UPDATE tbl_ajax SET jcount = (jcount+1) WHERE ja = $bewertung");
    11. }
    12. else if ($bewertung == "Nein")
    13. {
    14. $query = "SELECT nein, ncount FROM tbl_ajax";
    15. mysql_query("UPDATE tbl_ajax SET ncount = (ncount+1) WHERE nein = $bewertung");
    16. }
    17. else
    18. {
    19. echo "Du hast keine Wahl getroffen.";
    20. }
    21. //Endabfrage
    22. $qry_result = mysql_query($query) or die(mysql_error());
    23. //Ergebnis-Strings
    24. $display_string = "<table>";
    25. $display_string .= "<tr>";
    26. $display_string .= "<td></td>";
    27. $display_string .= "</tr>";
    28. //Ausgabe
    29. while($row = mysql_fetch_array($qry_result))
    30. {
    31. $display_string .= "<tr><b>Bewertung:</b>";
    32. $display_string .= "<td>$row[ja]</td>";
    33. $display_string .= "<td>$row[jcount]</td>";
    34. $display_string .= "<td>$row[nein]</td>";
    35. $display_string .= "<td>$row[ncount]</td>";
    36. $display_string .= "</tr>";
    37. }
    38. //echo "Abfrage: " . $query . "<br />";
    39. $display_string .= "</table>";
    40. echo $display_string;
    41. ?>
    Alles anzeigen


    Vielen Dank!
  • Wenn register_globals aus ist, sollte das sicher sein.
    Du machst mit dem Parameter nur etwas in der Datenbank, wenn dieser genau Ja bzw. Nein entspricht. Das ist gut.


    Allerdings, wenn du register_globals an hast, und der User die URL so aufruft:
    function.php?bewertung=boese&query=<Boeses Query>

    Würde der Parameter query als $query verfügbar gemacht und da $bewertung weder Ja noch Nein entspricht (sondern "boese") wuerde $query nicht mehr überschrieben.
    Nach der If-elseif-else Bedingung würde dann das Query ausgeführt. Sichererer wäre es jedenfalls das query mit in die Bedingung zu ziehen, oder eine neue Bedingung dafür
    zu bauen.

    z.B. if($bewertung == "Ja" || $bewertung == "Nein")


    Gruß,
    X-Eon


    Edit: Oder im else Zweig das query zu löschen ^^
  • Hab nochmal nachgedacht :)
    Einfach das query zu überschreiben würde zwar gehen, ist aber nicht besonderst schön, da du dann immer ein leeres Query an mysql_query übergibst.

    Das einfachste wäre es, wenn du in deinen else-Zweig ein exit nach der Ausgabe machst.
    Falls das Script aber trotzdem durchlaufen soll, würde ich es so machen ...

    Quellcode

    1. <?php
    2. include('db-connect.php');
    3. //ID
    4. $bewertung = $_GET['bewertung'];
    5. //Schutz?
    6. $bewertung = mysql_real_escape_string($bewertung);
    7. if($bewertung == "Ja")
    8. {
    9. $query = "SELECT ja, jcount FROM tbl_ajax";
    10. mysql_query("UPDATE tbl_ajax SET jcount = (jcount+1) WHERE ja = $bewertung");
    11. }
    12. else if ($bewertung == "Nein")
    13. {
    14. $query = "SELECT nein, ncount FROM tbl_ajax";
    15. mysql_query("UPDATE tbl_ajax SET ncount = (ncount+1) WHERE nein = $bewertung");
    16. }
    17. else
    18. {
    19. echo "Du hast keine Wahl getroffen.";
    20. //exit; Hier vllt ein exit?
    21. }
    22. if($bewertung == "Ja" || $bewertung == "Nein") {
    23. //Endabfrage
    24. $qry_result = mysql_query($query) or die(mysql_error());
    25. //Ergebnis-Strings
    26. $display_string = "<table>";
    27. $display_string .= "<tr>";
    28. $display_string .= "<td></td>";
    29. $display_string .= "</tr>";
    30. //Ausgabe
    31. while($row = mysql_fetch_array($qry_result))
    32. {
    33. $display_string .= "<tr><b>Bewertung:</b>";
    34. $display_string .= "<td>$row[ja]</td>";
    35. $display_string .= "<td>$row[jcount]</td>";
    36. $display_string .= "<td>$row[nein]</td>";
    37. $display_string .= "<td>$row[ncount]</td>";
    38. $display_string .= "</tr>";
    39. }
    40. //echo "Abfrage: " . $query . "<br />";
    41. $display_string .= "</table>";
    42. echo $display_string;
    43. } // Ende der If.
    44. ?>
    Alles anzeigen