jquery live update

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

  • jquery live update

    HiHo,

    Ich würde gerne den Status in der Datenbank von 0 auf 1 setzten per ajax.
    Dazu würde ich gerne jquery nutzen. Ich habe mir dazu ein vorhandenes Script genommen ryancoughlin.com/2008/11/04/use-jquery-to-submit-form/ das mit input Feldern arbeitetund versucht es anzupassen.
    Es sollte Anstatt den Inhalt eines Input Feldes eine ID übermittel, dies tut es aber nicht. Ich denke mal der Ansatz ist nicht verkerht braucht aber noch ein wenig Feinschliff.

    Hier mal meinen Code

    Quellcode

    1. <script type"text/javascript">
    2. $(document).ready(function(){
    3. $("form#submit").submit(function() {
    4. // we want to store the values from the form input box, then send via ajax below
    5. var fname = $('#button2').attr('value');
    6. $.ajax({
    7. type: "POST",
    8. url: "update.php",
    9. data: "fname="+ fname,
    10. success: function(){
    11. $('form#submit').hide();
    12. //$('form#submit :input').val("");
    13. $('div.success').fadeIn();
    14. }
    15. });
    16. return false;
    17. });
    18. });
    19. </script>
    Alles anzeigen


    Quellcode

    1. <form id="submit" method="post" name="submit" action="">
    2. {$STATUS_ID} <button type="submit" id="button2" value="2"><img src="./theme/images/ok.png"></button>
    3. </form>
    4. <div class="success" style="display:none;">
    5. <p>Client has been added.</p>
    6. </div>


    In desem Fall soll er die ID 2 an update.php übermitteln.
    Wie müsste es richtig aussehen?
  • Hi,

    warum steckt denn deine ID in deinem Button? Das ist nicht besonders schön, erstell hierfür lieber einen neuen Container.

    Quellcode

    1. <button type="submit" id="button2" value="2">



    Ansonsten sieht es richtig aus, wie du es gemacht hast. Wo liegt deine update.php? Wird diese korrekt aufgerufen? Das kannst du ganz schnell herausfinden, wenn du die Debug- Javascriptkonsole des Browsers (ich empfehle Chrome oder Safari) öffnest und beim Netzwerk/Network Reiter schaust, was dein Request verschickt, aufgerufen und zurückbekommen hat. (Vermutung : 500 Internal Server Error)
  • HiHo,

    Habe mich nun doch für eine bessere Variante entschieden aber dort gibt es ein Problem, er übermittelt den POST wert nicht
    Hier erstmal der Code

    Quellcode

    1. <script type="text/javascript">
    2. function performAjaxSubmission() {
    3. $.ajax({
    4. url: 're_update.php',
    5. method: 'POST',
    6. data: {
    7. val: $(this).attr("db_value")
    8. },
    9. success: function() {
    10. alert("success!");
    11. }
    12. });
    13. return false; // <--- important, prevents the link's href (hash in this example) from executing.
    14. }
    15. jQuery(document).ready(function() {
    16. $(".linkToClick").click(performAjaxSubmission);
    17. });
    18. </script>
    Alles anzeigen


    Quellcode

    1. <a href="" class="linkToClick" db_value="41"><img src="./theme/images/ok.png" /></a>


    Quellcode

    1. $DB->sql('UPDATE ' . INVOICES . ' SET `status_id` = 1 WHERE `r_id` = ' . $_POST['db_value']);
    2. $DB->execute();
    3. $DB->free();


    Er übermittelt die ID 41 einfach nicht. WHERE `r_id` = 41 das klappt, also kann es nur an dem JS Code liegen.
  • Wenn ich das richtig sehe, übermittelst du die Variable 'val' mit dem Wert.
    val: $(this).attr("db_value")

    Du müsstest also val: mit 'db_value': ersetzen.

    Schreibe ansonsten mal ein var_dump($_POST); vor die Datenbankabfrage. Außerdem solltest du ganz dringend etwas zum Thema MySQL Injection lesen: de.wikipedia.org/wiki/SQL-Injection
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [IMG:http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!
  • Jan Thurau schrieb:



    Du müsstest also val: mit 'db_value': ersetzen




    Leider brachte dies kein Erfolg.

    Ein var_dump davor bringt array(0) { } zum vorschein. Also der POST Parameter wird weiterhin nicht übermittelt.
    Beim Klick auf den Link wird die re_update.php definitiv aufgerufen. Ersetze ich $_POST['db_value'] durch 41 im SQL und klicke auf den Link wird der status auf 1 gesetzt.



    OT:

    Jan Thurau schrieb:





    Außerdem solltest du ganz dringend etwas zum Thema MySQL Injection lesen: de.wikipedia.org/wiki/SQL-Injection


    Hehe ne, den $_POST habe ich nur für das Forum hier direkt in den SQL geschrieben, zur besseren Übersicht ;)

    So sieht es in wirklichkeit aus



    Quellcode

    1. $DB->sql('UPDATE ' . INVOICES . ' SET `status_id` = 1 WHERE `r_id` =:1');
    2. $DB->execute($_POST['db_value']);




    :1 wird ersetzt durch $_POST['db_value'], :2 durch einen weiteren Parameter im execute. Dort durchläuft er Automatisch mysql_real_escape_string und falls magic_quotes aktiviert ist auch stripslashes

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