0

PHP に「登録」ページがあり、HTML ボタンがクリックされたときにスクリプトを実行したいと考えています。

PHP は基本的に、すべてのフィールドが入力されているかどうかをチェックし、パスワードと電子メールの確認が同じかどうかをチェックして、データベースに保存します。

これはコードです:

<?php
$Name = isset($_POST['Name']);
$Surname = isset($_POST['Surname']);

$Username = isset($_POST['Username']);

$Email = isset($_POST['Email']);
$C_Email = isset($_POST['C_Email']);

$Password = isset($_POST['password']);
$C_Password = isset($_POST['c_password']);

$SecQ = isset($_POST['SecQ']);
$SecA = isset($_POST['SecA']);


$con = mysql_connect('localhost', 'admin', 'storefile1234');
mysql_select_db ("storefile");

$check_username = mysql_query("SELECT FROM users WHERE username = '$Username'");
$check_email = mysql_query("SELECT FROM users WHERE Email = '$Email'");


if (!$con)
        {
        die('Could not connect: ' . mysql_error());
        }

if ($Name == null || $Surname== null || $Username == null || $Password == null || $C_Password == null || $Email == null || $C_Email == null || $SecQ == null || $SecA == null ) {

    echo "Missing details. Please enter all fields.";


} else {

    if(mysql_num_rows($check_username) != 0 && mysql_num_rows($check_email) != 0)
            {
            echo "Username/Email already exists";
            }
            if  ($Email == $C_Email && $Password == $C_Password) {

                $query = "INSERT INTO users (Username, Name,Surname, Password, Email, SecQ, SecA) VALUES ('NULL', ".$Username."', ".$Name."', ".$Surname."', ".$Password."', ".$SecQ."', ".$SecA."', ".$Email.')"';

                mysql_query($query) or die ('Error registering.');

                echo "Greetings, ".$Name.", you have been registered. ";

    }  else {

        echo "Error registering your account. Please try again.";
            }

 }


?>

また、おすすめはありますか?

Missing details. Please enter all fields.詳細を入力せずに、このページを実行すると常に表示されます。

これどうやってやるの?

4

3 に答える 3

2

この関数のように値を取得しようとしてisset($_POST['Username']);います...
しかし、ドキュメントには次のように書かれています:Returns TRUE if var exists and has value other than NULL, FALSE otherwise.

だからチェックしてtrue、ナットnull。その後、POST データをエスケープします。

次のようにできます。

$Name = isset($_POST['Name']) ? mysql_real_escape_string($_POST['Name']) : null;


PSもう一度お願いします。関数を使用しないでくださいmysql_*。それらは非推奨です。PDO
を見てください(またはmysqli_*)

于 2012-12-05T15:58:12.430 に答える
0

あなたは悪用しますisset

次のようなことを試してください:

$Name = null;
if (isset($_POST['Name'])) {
    $Name = $_POST['Name'];
}

isset値が設定されているかどうかを確認するだけです。

于 2012-12-05T15:58:28.060 に答える
0

ページを最初にロードしたときにそのメッセージを出力する問題については、array_key_exists 関数を使用して、フィールドが null かどうかを確認する前に、ユーザーが既に何かを送信しているかどうかをテストします。このようなもの:

if (array_key_exists('Name', $_POST) || array_key_exists('Surname', $_POST) || ... ) 
    if ($Name == null || $Surname== null || ... ) 
        echo "Missing details. Please enter all fields.";

観察: isset 関数を同じ目的で使用することはできません。これは、php のドキュメントによると、「変数が設定されていて NULL でないかどうかを判断する」ためです。

于 2012-12-05T16:08:48.833 に答える