0

私は非常にイライラする問題を抱えています。サーバーに登録フォームを送信するクライアントがあります。ハンドラーは php ファイルです。

問題は次のとおりです。クライアントはフォーム データを php に送信し、php はそれを mysql データベースに保存します。しかし、スペースを含む名前を指定しようとすると (理由はわかりません)、データベース内のパスワードの長さが 2 分の 1 になります。

何時間も探しましたが、何も見つかりませんでした。私は狂気の瀬戸際にいるので、問題を見つけるのを手伝ってくれるようお願いしたいと思います.

登録フォームは次のとおりです。

<!-- REGISTRATION -->
    <div data-role="page" id="regScreen">
        <div data-role="content">
            <div class="profileCircle">
                <img src="img/iskola.jpg" />
            </div>
            <div class="space"></div>
            <form action="" method="post" id="regForm" name="regForm">
                <input type="text" name="nev" id="regName" placeholder="Teljes név" data-mini="true"/>
                <input type="email" name="mail" id="regEmail" placeholder="Email cím" data-mini="true"/>
                <input type="password" name="jelszo" id="regPassword" placeholder="Jelszó" data-mini="true"/>
                <input type="submit" data-inline="true" data-mini="true" value="Regisztráció" name="rendben" id="rendben" />
            </form>
        </div>
        <a href="#loginScreen"><div class="circle leftBottom c1">
            <img src="img/ikonok/vissza.png" />
        </div></a>
    </div>

これは、クライアント側で登録を処理するスクリプトです。

function registration(){
var name = $('#regForm #regName').val();
var email = $('#regForm #regEmail').val();
var password = $('#regForm #regPassword').val();
if((password == "" || password == null) || (email == "" || email == null)){
    navigator.notification.alert("Nem töltött ki minden adatot!", function(){}, "Figyelem!");
}else{
    $.ajax({
        url: host + "regisztracio.php",
        type: 'post',
        dataType: 'json',
        data: {rendben:'ok', nev: name, mail: email, jelszo: password},                      
        success: function(data){
            if(data.ok){
                    navigator.notification.alert('Sikeresen regisztrált!\nMostmár be tud jelentkezni a saját felhasználónevével!',function(){
                    $.mobile.changePage("#loginScreen");
                },'Üdvözöljük!');
            }else{
                navigator.notification.alert(data.uzenet,function(){},'Figyelem!');
                if(data.help){
                    navigator.notification.confirm('Kívánja, hogy új jelszót küldjünk erre az email címre?',function(){
                        console.log(button);
                    }, 'Segíthetünk?', 'Igen, Nem');
                }
            }
        },
        error: function(err){
            console.log('jajj');
            navigator.notification.alert(err.message,function(){},'Hiba!');
        }
    });
}
}

最後に、php コードを次に示します。

<?php
if (isset($_POST['rendben'])) {

require("mysql.php");

$nev   = $_POST['nev'];
$mail = $_POST['mail'];
$jelszo = $_POST['jelszo'];

if (empty($_POST['nev']) OR empty($_POST['mail']) OR empty($_POST['jelszo'])) { 
    $string = array("ok" => false, "uzenet" => "Nem töltött ki minden adatot!");
    echo json_encode($string);
}else{
    $sql = "SELECT *
        FROM felhasznalok
        WHERE mail = '{$mail}'";
    $eredmeny = mysql_query($sql);
    if (mysql_num_rows($eredmeny) == 0) {
        $sql = "INSERT INTO felhasznalok
                (nev, mail, jelszo, kep)
                VALUES
                ('{$nev}', '{$mail}', '{$jelszo}', '{$kep}')";
        mysql_query($sql);
        $string = array("ok" => true);
        echo json_encode($string);
    }else{
        $string = array("ok" => false, "help" => true, "uzenet" => "Ezzel az email címmel már regisztráltak, lehet, hogy elfelejtette a jelszavát?");
        echo json_encode($string);
    }
}
}?>

必要に応じて、データベース テーブルから画像をアップロードします。

あなたが私を助けてくれることを願っています。

4

2 に答える 2

1

完全な回答ではないことをご容赦ください。ただし、書式設定はコメントよりも優れています。

他の人がすでに示唆しているように:

  1. SQL ステートメントをエコーし​​ます。これは、結局のところ、dbに格納されているものです。これにより、問題がデータがデータベースに保存される前か後にあるかがわかります。

  2. var_dump($_POST) これは、データの受信と DB への保存の間のコードをチェックするため、SQL が良好な場合 - スクリプトが実際に送信する内容を確認できます。

  3. 「SQL インジェクション」を防ぐためにテキストをエスケープする - クライアント ページをいつ変更するかわからないため、常にテキストをエスケープします。その方が安全です。あなたのケースは、クライアントからのデータを決して信頼しない理由の代表的な例です。

FWIIW、問題は JavaScript にあると思われます。jquery のようなライブラリーを使用する際の問題の 1 つは、それらのライブラリーが実際には簡単なことを簡単にしないということです。彼らはそれをより複雑にします。計算尺に少し似ていますが、一度学べば、複雑なものも簡単なものよりも難しくありません。コードの移植性の利点もあります。

それでも、私見、単純な ajax 呼び出しの場合、実際には純粋な JS を使用する方が良いでしょう。確かに初心者です。w3schools.com には、優れた AJAX チュートリアルとコード例があります。

mysql_* 拡張機能は非推奨です。mysqli_ (ほぼ同じ) または PDO を学ぶのが賢明でしょう。

于 2013-06-09T20:12:05.507 に答える