Übergabe eines Value zur Datenbankabfrage !?

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

  • Übergabe eines Value zur Datenbankabfrage !?

    HI!

    Bin neu hier u. starte gerade meinen ersten Versuch mit ajax. Wer kann mir eine ganz einfache Übergabe eines Values anhand folgendem Code zeigen u. erklären!?

    Die zweite Frage ist ob das ganze so funktioniert in Bezug auf auf die PHP-Abfrage u. dem Auslesen mehrerer Werte!?

    Bin echt dankbar wenn mir das jemand anhand dieses Codes erklären kann:

    HTML - file

    Quellcode

    1. <div style="float: left; margin-right: 30px;">
    2. <label for="select1">Please select</label>
    3. <br />
    4. <select id="select1" size="5" onchange="checkNumber(value)">
    5. <option value="1">Player 1</option>


    PHP-file

    Quellcode

    1. <?
    2. function checkNumber(value)
    3. {
    4. pg_connect("host=localhost dbname=liverpoolfc user=u045724235 password=12") or die("Connection to database failed!\n");
    5. $tbl_players="players";
    6. $query=pg_fetch_object(pg_query("SElECT number, name, position FROM $tbl_players WHERE number='".$_POST["value"]."'"));
    7. $player_number = $query->number;
    8. $player_name = $query->name;
    9. $player_position = $query->position;
    10. echo $player_number;
    11. echo $player_name;
    12. echo $player_position;
    13. }
    14. ?>
    Alles anzeigen


    JS-file

    Quellcode

    1. function checkNumber() {
    2. var url = "getPlayers.php";
    3. //url = url + "?dummy=" + new Date().getTime();
    4. request.open("GET", url, true);
    5. request.onreadystatechange = updatePage;
    6. request.send(null);
    7. }
    8. function updatePage() {
    9. if (request.readyState == 4)
    10. {
    11. if (request.status == 200)
    12. {
    13. var newnumber = request.responseText;
    14. var newname = request.responseText;
    15. var newposition = request.responseText;
    16. var numberEl = document.getElementById("number");
    17. var nameEl = document.getElementById("name");
    18. var positionEl = document.getElementById("position");
    19. replaceText(numberEl, newnumber);
    20. replaceText(playerEl, newname);
    21. replaceText(positionEl, newposition);
    22. }
    23. else
    24. {
    25. var message = request.getResponseHeader("Status");
    26. if ((message == null) || (message.length <= 0))
    27. {
    28. alert("Error! Request status is " + request.status);
    29. } else {
    30. alert(message);
    31. }
    32. }
    33. }
    34. }
    Alles anzeigen


    So, wo und was muss ich ändern???

    VIELEN DANK
    Jens
  • hast du den code selbst geschrieben oder kopiert?
    wenn du mit ajax mehre inhalte aus einer datei laden willst, dann schau dir besser mal dieses how to an

    [coderwiki]HowTos/Ajax-Inhalte-mit-PHP-nachladen[/coderwiki]

    falls du mit deinem code weiterarbeiten willst
    * nutzt du wirklich postgresql?
    * warum weist du mehreren javascript variablen den selben inhalt zu?
    * was machst du dann mit dem javascript inhalt?
    * du hast die php-funktion nicht aufgerufen
  • Hi,

    Ja, wir nutzen hier an der uni [coderwiki]Informationen/PostgreSQL[/coderwiki] - leider..

    Wir sollen uns an dem Code von "Head Rush Ajax" orientieren.

    Das Problem für mich ist der value u. der damit verbundene PHP-Funktionsaufruf

    So soll das Ganze aussehn:

    Quellcode

    1. <form name="ajaxtest" id="ajaxtest" method="post" action="#" onsubmit="return false;">
    2. <div style="float: left; margin-right: 30px;">
    3. <label for="select1">Please select</label>
    4. <br />
    5. <select id="select1" size="5" onchange="getNumber(this)">
    6. <option value="1">Player 1</option>
    7. <option value="2">Player 2</option>
    8. <option value="3">Player 3</option>
    9. <option value="4">Player 4</option>
    10. <option value="5">Player 5</option>
    11. <option value="6">Player 6</option>
    12. </select>
    13. </div>
    14. </form>
    15. <div id="players">
    16. <table>
    17. <tr>
    18. <td>Player Number</td>
    19. <td>Name</td>
    20. <td>Position</td>
    21. </tr>
    22. <tr>
    23. <td><span id="number">1</span></td>
    24. <td><span id="name">Jerzy Dudek</span></td>
    25. <td><span id="position">Goalkeeper</span></td>
    Alles anzeigen


    ok, geht das denn hier eher in die richtung bezgl. der value übergabe!?

    Quellcode

    1. function getNumber( objSelect )
    2. {
    3. var strURL = objSelect.options[ objSelect.options.selectedIndex ].value;
    4. getPlayer( strURL );
    5. }
    6. function getPlayer() {
    7. var url = "getPlayers.php";
    8. //url = url + "?dummy=" + new Date().getTime();
    9. request.open("POST", url, true);
    10. request.onreadystatechange = updatePage;
    11. request.send(null);
    12. }
    13. function updatePage() {
    14. if (request.readyState == 4)
    15. {
    16. if (request.status == 200)
    17. {
    18. var newnumber = request.responseText;
    19. var newname = request.responseText;
    20. var newposition = request.responseText;
    21. var numberEl = document.getElementById("number");
    22. var nameEl = document.getElementById("name");
    23. var positionEl = document.getElementById("position");
    24. replaceText(numberEl, newnumber);
    25. replaceText(nameEl, newname);
    26. replaceText(positionEl, newposition);
    27. }
    Alles anzeigen


    und so sieht die dom geschichte aus:

    Quellcode

    1. function replaceText(el, text) {
    2. if (el != null) {
    3. clearText(el);
    4. var newNode = document.createTextNode(text);
    5. el.appendChild(newNode);
    6. }
    7. }
    8. function clearText(el) {
    9. if (el != null) {
    10. if (el.childNodes) {
    11. for (var i = 0; i < el.childNodes.length; i++) {
    12. var childNode = el.childNodes[i];
    13. el.removeChild(childNode);
    14. }
    15. }
    16. }
    17. }
    18. function getText(el) {
    19. var text = "";
    20. if (el != null) {
    21. if (el.childNodes) {
    22. for (var i = 0; i < el.childNodes.length; i++) {
    23. var childNode = el.childNodes[i];
    24. if (childNode.nodeValue != null) {
    25. text = text + childNode.nodeValue;
    26. }
    27. }
    28. }
    29. }
    30. return text;
    31. }
    Alles anzeigen



    Quellcode

    1. <?
    2. pg_connect("host=localhost dbname=liverpoolfc user=u045724235 password=12") or die("Connection to database failed!\n");
    3. $tbl_players="players";
    4. $query=pg_fetch_object(pg_query("SElECT number, name, position FROM $tbl_players WHERE number='".$_POST["value"]."'"));
    5. $player_number = $query->number;
    6. $player_name = $query->name;
    7. $player_position = $query->position;
    8. echo $player_number;
    9. echo $player_name;
    10. echo $player_position;
    11. ?>
    Alles anzeigen


    Hoffe es gibt dennoch eine einfach Lösung hier !?
  • Danke, werd mich gleich nochmal ran machen.

    Habe diese checkNumber() in umbenannt in getNumber() u. verändert, so das diese dann die getPlayers() aufruft. Ist dieser Weg auch möglich?

    Werde es jetzt jedenfalls mal so versuchen wie du es beschrieben hast.
    Und die checkNumber() muss im php-file ausgegeben werden, oder!?

    Kannst du mir noch ein Hinweis geben was genau geändert werden muss???

    Will u. muss das heute noch zum laufen bekommen irgendwie eben :(
  • Ok, ich hab versucht die einzelnen Schritte nachzuvollziehn u. bin zu diesem Ergebnis (oder was auch immer) gekommen:
    Muss hinzufügen das ich den bisherigen Code umgeschmissen habe.

    1. bei Klick auf z.B "Player 2" wird die JS-Function getNumber() aufgerufen:
    Allerdings weiss ich nicht ob hier (this) oder (value) eingetragen werden muss!? Wird sich hoffentlich noch klären.

    Quellcode

    1. <form name="ajaxtest" id="ajaxtest" method="post" action="#" onsubmit="return false;">
    2. <div style="float: left; margin-right: 30px;">
    3. <label for="select1">Please select</label>
    4. <br />
    5. <select id="select1" size="5" onchange="getNumber(this)"> <!-- calls JavaScript function getNumber(THIS oder VALUE????) -->
    6. <option value="1">Player 1</option>
    7. <option value="1">Player 1</option>




    2. JS-file "player.js"

    Hier ist mir jetzt nicht klar ob etwas in in getNumber() eingetragen werden muss da ich mit select1 nicht weiss was anfangen!?

    Quellcode

    1. function getNumber() {
    2. var url = "getPlayers.php?select="+document.getElementById('select1'); <-- Für was benötigt??? -->
    3. request.open("GET", url, true);
    4. request.onreadystatechange = updatePage;
    5. request.send(null);
    6. }
    7. function updatePage() {
    8. if (request.readyState == 4)
    9. {
    10. if (request.status == 200) <-- hier sollen die Element der Tabelle ausgetauscht werden -->
    11. {
    12. var newnumber = request.responseText;
    13. var newname = request.responseText;
    14. var newposition = request.responseText;
    15. var numberEl = document.getElementById("number");
    16. var nameEl = document.getElementById("name");
    17. var positionEl = document.getElementById("position");
    18. replaceText(numberEl, newnumber);
    19. replaceText(nameEl, newname);
    20. replaceText(positionEl, newposition);
    21. }
    22. else
    23. {
    24. var message = request.getResponseHeader("Status");
    25. if ((message == null) || (message.length <= 0))
    26. {
    27. alert("Error! Request status is " + request.status);
    28. } else {
    29. alert(message);
    30. }
    31. }
    32. }
    33. }
    Alles anzeigen



    3. PHP-file "getPlayer.php"
    Was wird hier jetzt übergeben der "value" 2 aus dem tag "option" oder der Wert von " ?select="+document.getElementById('select1') " aus der JS-Funktion!?

    Folglich welcher Wert wird verwendet zum abgleichen der Daten aus der DB und wie sieht das hier aus???

    Quellcode

    1. <?
    2. pg_connect("host=localhost dbname=liverpoolfc user=u045724235 password=12") or die("Connection to database failed!\n");
    3. $tbl_players="players";
    4. $query=pg_fetch_object(pg_query("SElECT number, name, position FROM $tbl_players WHERE number='".$_GET['select']."'"));
    5. $player_number = $query->number;
    6. $player_name = $query->name;
    7. $player_position = $query->position;
    8. echo $player_number; <-- Datenausgabe -->
    9. echo $player_name;
    10. echo $player_position;
    11. }
    12. ?>
    Alles anzeigen


    4. DOM-file text-utils.js
    Hier müssten keine Änderungen vorgenommen werden, oder???

    Quellcode

    1. function replaceText(el, text) {
    2. if (el != null) {
    3. clearText(el);
    4. var newNode = document.createTextNode(text);
    5. el.appendChild(newNode);
    6. }
    7. }
    8. function clearText(el) {
    9. if (el != null) {
    10. if (el.childNodes) {
    11. for (var i = 0; i < el.childNodes.length; i++) {
    12. var childNode = el.childNodes[i];
    13. el.removeChild(childNode);
    14. }
    15. }
    16. }
    17. }
    18. function getText(el) {
    19. var text = "";
    20. if (el != null) {
    21. if (el.childNodes) {
    22. for (var i = 0; i < el.childNodes.length; i++) {
    23. var childNode = el.childNodes[i];
    24. if (childNode.nodeValue != null) {
    25. text = text + childNode.nodeValue;
    26. }
    27. }
    28. }
    29. }
    30. return text;
    31. }
    Alles anzeigen


    Wär echt Klasse wenn mir jemand weiterhilft, dann kann ich morgen nachmittag doch noch was präsentieren....

    Cheers
    Jens
  • <select id="select1" size="5" onchange="getNumber(this)">

    das this musst du nicht übergeben - du liest es ja direkt mit getElementById aus
    var url = "getPlayers.php?select="+document.getElementById('select1'); <-- Für was benötigt??? -->

    weder kannst du die php funktion direkt aufrufen, noch kann php auf die JS variablen zugreifen. daher übergibst du den wert per GET

    [...]ion;
    }
    ?>

    wo kommt denn die geschweifte klammer her?

    in der text-utils.js würd ich lieber den inhalt eines divs mit innerHtml ändern.
    mit createTextNode wird ja immer was neues erstellt..
    bei 10 änderungen in der <select> wirst du also 10 elemente untereinander haben, oder?