Hirdetés

Új hozzászólás Aktív témák

  • Sk8erPeter
    nagyúr

    nem sikerül összehoznom...
    mobil.php fájlom ahol a form található...

    <div data-role="page" id="mailcsere">
    <div data-role="header">
    <h1>E-mail módosítás</h1>
    </div>
    <div data-role="content">
    <form action='/' method='post' id="mailcsere">
    <input type='text' name='email' />
    <input type='submit' value='Módosítás' />
    </form>
    <script>
    /* attach a submit handler to the form */
    $("#mailcsere").submit(function(event) {

    /* stop form from submitting normally */
    event.preventDefault();

    /* get some values from elements on the page: */
    var $form = $( this ),
    term = $form.find( 'input[name="email"]' ).val(),
    url = $form.attr( 'action' );

    /* Send the data using post and put the results in a div */
    $.post( 'login/mailcsere.php', { email: term },
    function( data ) {
    var content = $( data ).find( '#content' );
    $( "#result" ).empty().append( content );
    }
    );
    });
    </script>
    </div>
    <div data-role="footer">
    <h4>Page Footer</h4>
    </div>
    </div>

    mailcsere.php

    <?
    session_start();
    $felhasznalo=$_SESSION['felhasznalo'];
    require_once ('connect.php');
    $email=$_POST['email'];
    $sql = "UPDATE `felhasznalok` SET email='$email' WHERE user='$felhasznalo';";
    if (mysql_query($sql)) {
    echo "<script type='text/javascript'>window.location='mobil.php?szerkezt=sikeres'</script>";
    exit;
    }
    else {
    echo "<script type='text/javascript'>window.location='mobil.php?szerkezt=sikertelen'</script>";
    }
    ?>

    a mobil.php fájlom azért néz ki így mert phonegap-el dolgozom, ezért is bajlódom a formokkal :W

    Ez a kód már csak azért is fájó, mert olyan könnyen támadható az oldalad SQL Injectionnel, mint az állat. Nem ártana escape-elni a felhasználótól érkező tartalmat - soha ne bízz meg abban az adatban, ami a felhasználótól közvetlenül érkezik...

    Másrészt ha kódot illesztesz be, akkor jelöld ki a kódodat itt a szövegmezőben, majd kattints a "Programkód" gombra, pont arra való, hogy valami normálisan átlátható formában legyenek a kódok.

    Harmadrészt: a mailcsere.php fájlban abszolúte semmi értelme JavaScripttel átirányítani a felhasználót, arra ott a PHP header() függvénye is - felesleges tehát kiíratni bármit is.
    Ahogy a példában van:
    header('Location: http://www.example.com/');
    de ezelőtt ne legyen SEMMILYEN kiíratás.
    DE (!!!) ezt NE TEDD BELE!! Egyáltalán ne rakj bele semmilyen átirányítást, mert most AJAX-os kommunikáció zajlik, lásd később a magyarázatot.

    Aztán menjünk tovább.
    Ez van most a kódodban:
    /* Send the data using post and put the results in a div */
    $.post( 'login/mailcsere.php', { email: term },
    function( data ) {
    var content = $( data ).find( '#content' );
    $( "#result" ).empty().append( content );
    }
    );

    Ez most azt csinálja, hogy a login/mailcsere.php fájlnak elküldi a term-ben található adatot, az emailbe objektumba begyűjtve, ez majd PHP-oldalon is megjelenik.
    A sikeres (!) adatküldés esetén (pl. létezik a fájl, elérhető, nem dobott vissza hibát, stb.) a content változóba úgy pakolja be az adatot, hogy a visszakapott adatokból kikeresi a "content" id-val rendelkező DOM-elemet (!), aztán a content változó tartalmát bepakolja a "result" id-val rendelkező HTML-elembe.

    Egyrészt: amit Te visszaadsz a PHP-fájllal, abba nem raksz bele semmi olyat, amiben "content" id-val rendelkező elem van, másrészt egyáltalán nincs "result" id-vel rendelkező elemed az oldalon.
    Sőt, a PHP-fájlban csak azt a JavaScriptes visszairányítós részt íratod ki, ami AJAX-os kommunikáció esetén eleve felesleges.

    Először próbáld csak úgy, hogy kiíratod echo-val, hogy "siker" vagy "hiba", aztán a $.post részt egyelőre (!) így módosítod:
    var content = $( data ).find( '#content' );
    $( "#result" ).empty().append( content );

    HELYETT
    var content = $( data );
    $( "#result" ).empty().append( content );

    Ezenkívül még tegyél be a mobil.php fájlba egy ilyet valahova a végére mondjuk:
    <div id="result"></div>

    Ide fogja pakolni az AJAX-kommunikáció eredményét.

Új hozzászólás Aktív témák