0

ウェブサイトのユーザーシステムを作成しようとしていますが、送信に問題があります。すべてのデータベースに常に0を送信します。私はw3schoolsでグローバル変数とローカル変数について読んだことがあり、これが私の問題かもしれないと思いますが、はっきりとはわかりません。これが私のコードです

<?php
$con = mysql_connect(localhost, 262096, 9201999);
if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }
mysql_select_db("262096", $con);
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$username = $_POST['username'];
$password = $_POST['password'];
$passwordconf = $_POST['passwordconf'];
$email = $_POST['email'];
$securityq = $_POST['securityq'];
$qanswer = $_POST['qanswer'];

if(!isset($firstname) || !isset($lastname) || !isset($username) || !isset($password) || !isset($passwordconf) || !isset($email) || !isset($securityq) || !isset($qanswer))
    {
    echo "You did not fill out the required fields.";
    }

$uname = "SELECT * FROM users WHERE username='{$username}'";
$unamequery = mysql_query($uname) or die(mysql_error());
if(mysql_num_rows($unamequery) > 0) 
    {
    echo "The username you entered is already taken";
    }

$emailfind = "SELECT * FROM users WHERE email='{$email}'";
$emailquery = mysql_query($emailfind) or die(mysql_error());
if(mysql_num_rows($emailquery) > 0)
    {
    echo "The email you entered is already registered";
    }

if($password != $passwordconf)
    {
    echo "The passwords you entered do not match";
    }

$regex = "/^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-z]{2,}$/i";
if(!preg_match($regex, $email))
    {
    echo "The email you entered is not in name@domain format";
    }

else
    {
    $salt = mcrypt_create_iv(32, MCRYPT_DEV_URANDOM);
    $hpassword = crypt($password,$salt);
    $insert = "INSERT INTO users (firstname, lastname, username, password, email, securityq, qanswer, salt)
    VALUES ('$firstname','$lastname','$username','$hpassword','$email','$securityq','$qanswer','$salt')";
    mysql_query($insert);


    if(!mysql_query($insert))
        {
        die('Could not submit');
        }
    else
        {
        echo "Information was submited.  Please check your email for confirmation";
        }
    }


?>
4

1 に答える 1

0

答えてみます。

まず、PDO への移行に関するアドバイスに同意します。mysql_* 関数は非推奨です。ただし、それを使用する場合は、SQLの ' -symbols のために、すべての変数を sqlの直前にエスケープしてください。

$hpassword  = mysql_real_escape_string($hpassword );

私にとっては、insert ... values() よりも次の構文の方が見やすいです。

$insert = "INSERT INTO `users` 
    SET `firstname` = '$firstname',
    SET `hpassword` = '$hpassword'..."

実際、私はこの種のコードを忘れようとしています。シンプルなアプリには PDO または快適な uniDB クラスを使用します。

パスワードの一致などのエラーに関係なくユーザーを挿入するのは正しい動作ですか? 条件を修正する必要があります。

条件ロジックが間違っています。の後に送信しif(!preg_match($regex, $email))ます。したがって、電子メールが正しい場合は送信されます。ELSEIFを使用して次のように修正します

$regex = "/^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+.[a-z]{2,}$/i";

if(mysql_num_rows($emailquery) > 0){
    echo "The email you entered is already registered";
}elseif($password != $passwordconf){
    echo "The passwords you entered do not match";
}elseif(!preg_match($regex, $email))
{
    echo "The email you entered is not in name@domain format";
}else{
    // insertion code HERE
}
于 2013-01-26T06:31:53.193 に答える