-1

重複の可能性:
PHP die() ですべてのページを消去

フィールド 1 をチェックします。すべて正しければ、メールとパスワードのチェックよりもユーザー チェックに渡されます...

そのため、ダイを使用してコードの進行を停止します

ただし、die()を使用すると、すべてのページが強制終了され、すべてのページを保持する方法はありますが、$ error_messageをエコーアウトするだけです

die() を使用すると、別のページにジャンプするように見えます

<?PHP

session_start();
if(isset($_SESSION['firstname']) && isset($_SESSION['lastname'])){
    header('location:member.php');
}

$firstname="";  $lastname="";   $email="";  $re_email=""; $error_message="";

if(isset($_POST['signup'])){
    $firstname=strip_tags(ucfirst($_POST['firstname']));
    $lastname=strip_tags(ucfirst($_POST['lastname']));
    $email=strip_tags(strtolower($_POST['email']));
    $re_email=strip_tags(strtolower($_POST['re_email']));
    $password=strip_tags($_POST['password']);
    $re_password=strip_tags($_POST['re_password']);
    $date=date("Y-m-d");

    if($firstname && $lastname && $email && $re_email && $password && $re_password && $age && $gender && $employment){}
    else{die($error_message="Please fill in all fields");}

    //USERNAME CHECKING////////////////////////////////////////////////////////
    $connect=mysql_connect("localhost", "root", "");
    $database=mysql_select_db("phplogin", $connect);
    $namecheck=mysql_query("SELECT email FROM users WHERE email='$email'");
    $count=mysql_num_rows($namecheck);
    if($count!=0)
    {die("Username already taken");}
    //////////////////////////////////////////////////////////////////////////

    if($email==$re_email && $password==$re_password){}
    else{die("email or password do not match");}

    //Checking valid email//
    $strpos=strpos($email, "@");
    if(!$strpos)
    {die("This is not valid email");}

    //Password length//////////////////////////////////////////////////////////
    if(strlen($password)<6)
    {die("Password is too short");}


    echo "Register user!";
    $password=md5($password);

    $SQL="INSERT INTO users (email, password, firstname, lastname, date) 
    VALUES ('$email','$password','$firstname', '$lastname', '$date')";
    $result=mysql_query($SQL);

    session_start();
    $_SESSION['firstname']=$db_firstname;
    $_SESSION['lastname']=$db_lastname;
    header("location:member.php");

    }
?>
4

2 に答える 2

2

あなたの問題はここにあると思います:

die($error_message="Please fill in all fields");

それは「私が死ぬとき、この値をこの変数に代入する」ということです。

次のようになります。

if(!isset($firstname) || !isset($lastname) || !isset($email) || !isset($password) || !isset($re_password) || !isset($age) || !isset($gender) || !isset($employment)){
    die("Please fill in all fields");
}
于 2012-12-06T03:17:21.123 に答える
2

die()は と同等の言語構造でありexit()、メッセージを出力して現在のスクリプトを終了します。そのため、die 以降は表示されません。

$errorMsgsユーザーデータを保存する前に、どのタイプが配列であるかなどの変数にメッセージを入れることができると思います。$errorMsgsが空でない場合は、問題が発生している可能性があります。その時点で、これらのエラー メッセージを次のステップに渡すことができます。

コードは次のようになります。

$errosMsgs = array();
if(!$ok) {
  $errosMsgs[] = "Error message";
}
if(empty($errorMsgs)) {
    //Data saving and redirect into another page
} else {
    //display errors
}
于 2012-12-06T03:27:29.190 に答える