0

stackoverflow これは私の最初の投稿です:D. さて、ビジネスに取り掛かるために、私はプライベートゲームサイトを作成しています.IPアドレスを取得します(それが合法かどうかはわかりませんが、合法である場合に備えてコードを実行したいので、サイトを立ち上げることができます)、それらを保存します名前はすでにテーブルにあるため、mysql データベース内。私はユーザー入力を取得するフォームを持っています。それは人の名前です:

                <form action="/PHP/MembersIP.php" method="post">
                In Game Name: <input type="text" name="Name">
                <input type="submit">

そして、私は私の外部phpファイルを持っています:

            //the queries are written into their values
            $selectname = "SELECT * from Members WHERE Name = " . $_POST['Name'];
            $updateIP = "UPDATE Members SET IP = " . $_SERVER['REMOTE_ADDR'] . "WHERE Name = " . $_POST['Name'];

            //check if the name is valid, if so add ip address in the row of the name given
            if (!mysql_query($selectname) ) {
            die('Your in game name was not found inside the database. Please check for misspellings, and try again. If problem persists please contact a guild official, or site manager. Inform them of the error: ' . mysql_error());
            } else {mysql_query($updateIP);}

名前に偽の値を入力すると、テスト中に正しい文字列が得られました。

 Your in game name was not found inside the database. Please check for misspellings, and try again.If problem persists please contact a guild official, or site manager. Inform them of the error: Unknown column 'lol' in 'where clause'

しかし、エラー コードが奇妙に見えたので、データベースに実際の名前を入力したところ、同じ結果が得られました。

 Your in game name was not found inside the database. Please check for misspellings, and try again. If problem persists please contact a guild official, or site manager. Inform them of the error: Unknown column 'name' in 'where clause'

したがって、列「名前」を呼び出して値を見つけるのに問題があるのは、最初のクエリであることを知っています(同じ方法で行ったので、2番目のクエリも失敗します)$_POST["Name"]。私はそれを理解できないので、誰かが少し助けて説明することができます. そこにあるヒントについては、追加情報を提供する前に、説明を受けるまで待ってください.

ありがとうございました

編集:

みんなありがとう、私は問題を修正しました。最初にスクリプトを作成したときにエラーが発生したため、次のように変更しました。

SELECT * from Members WHERE Name = '" . $_POST['Name'] . "';"; 

成功条項がなかったので、白紙のページができたので、うまくいったと思いました。テーブルを確認したところIPセルが空白のままだったので、まったく実行されていないと思ったので、エラーコードでルートの根元に戻り、コードの問題を検索しましたが、できませんでした「うまくいかなかった」問題を見つけてください。それは、すべてのコードが意味をなさなくなった瞬間であり、投稿するためにここに来ました。しかし、他の回答を見て、コードが実行されたかどうかをテストするスクリプトが必要であることに気付いたので、成功スクリプトを追加し、再テストする前に:

SELECT * from Members WHERE Name = '" . $_POST['Name'] . "';";

エラーがポップアップするのと同じ方法で記述した他のコードがあることに気付きました。

UPDATE Members SET IP = " . $_SERVER['REMOTE_ADDR'] . "WHERE Name = " . $_POST['Name'];

最後に、成功スクリプトを追加し、両方のクエリを編集したところ、成功しました。更新されたphpは次のとおりです。

$selectname = "SELECT * from Members WHERE Name = '" . $_POST['Name'] . "';" ;
$updateIP = "UPDATE Members SET IP = '" . $_SERVER['REMOTE_ADDR'] . "' WHERE Name = '" . $_POST['Name'] . "';";
if (!mysql_query($selectname) )
{
    die('Your in game name was not found inside the database. Please check for misspellings, and try again. If problem persists please contact a guild official, or site manager. Inform them of the error: ' . mysql_error());
}
else
{
    mysql_query($updateIP); 
    echo "Thank you " . $_POST['Name'] . ", this device's Ip Address has been saved. You may now edit your account, and use guild resources from this device.";
}

ストーリーの教訓は、常にテスト コードに文字列を追加することです。みんなで

4

1 に答える 1

-2

次のように値を引用符で囲むのはどうですかName = 'test'

あなたの場合、クエリは次のようになります...

"SELECT * from Members WHERE Name = '" . $_POST['Name'] . "'";
于 2013-09-03T01:11:16.443 に答える