0
<?php
//Form Validation
if(isset($_POST['register']))
{
        //Must be at least 4-15 characters and contain letters and numbers
        if(!preg_match('/^[a-zA-Z0-9]{4,15}$/', $_POST['username']))
        {
            $error[]='The username does not match the requirements';        
        }
        //Password validation: must contain at least 1 letter and number. Allows characters !@#$% and be 6-15 characters
        if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{6,15}$/', $_POST['password1']))
        {
            $error[]='The password does not match the requirements';
        }
        //Email validation
        if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
        {
            $error[]='Invalid E-mail';
        }       
        //Output error in array as each line
        foreach ($error as $output)
        {
            echo "$output <br>";
        }
}
if ((empty($errors)) && !isset($_POST['register']))
{
?>
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="register">
    <input type="text" placeholder="Username" maxlength="15" name="username" value="<?php echo $_POST['username']; ?>" /><br>
    <input type="password" maxlength="15" name="password1" /><br>
    <input type="password" maxlength="15" name="password2" /><br>
    <input type="text" placeholder="your@email.com" maxlength="25"  name="email" value="<?php echo $_POST['email']; ?>"/><br>
    <input type="text" maxlength="20" name="county" /><br>
    <input type="submit" value="Register" name="register"/>
</form>
<?php
}
?>

こんにちは、みんな、

エラーが表示されないところまで来ましたが、おそらく自分自身を明確に説明していませんでした。エラーメッセージが表示されなくなった時点で、フォームが表示されないようにしたいので、「成功」などと書き留めます。しかし、私はこれを達成できないようです。

4

2 に答える 2

0

ユーザーからの入力を受け入れ、すべてが修正されるまでエラーを表示するフォームを作成しようとしていると思います。あなたのアイデアは素晴らしいですが、コードにいくつかの論理エラーがあります。

仕組みは次のとおりです。

  • 最初にフォームを表示する
  • ユーザー入力を受け入れる
  • 電子メールとパスワードのチェックを行う
  • エラーがあれば表示する

これらは私があなたのコードに加えた変更です:

  • を削除しましたif(empty($errors))。不要です
  • -- に変更if(!isset($_POST['register']))しましif(isset($_POST['register']))たが、フォームが送信されていない場合はフォームを表示します。
  • issetフィールド内にチェックを追加<inputして、変数が定義されている場合にのみ表示されるようにしました
  • の最後のコード ブロックは}不要になったため削除しました

これを試して:

<?php

if(isset($_POST['register']))
{
    $error = array(); //initializing an empty array

    //Must be at least 4-15 characters and contain letters and numbers
    if(!preg_match('/^[a-zA-Z0-9]{4,15}$/', $_POST['username']))
    {
        $error[]='The username does not match the requirements';        
    }
    //Password validation: must contain at least 1 letter and number. Allows characters !@#$% and be 6-15 characters
    if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{6,15}$/', $_POST['password1']))
    {
        $error[]='The password does not match the requirements';
    }
    //Email validation
    if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
    {
        $error[]='Invalid E-mail';
    }       
    //Output error in array as each line
    foreach ($error as $output)
    {
        if(isset($output)) {
            echo "$output <br>";
        }
    }

}
    if(!isset($error)) {
?>

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="register">
    <input type="text" placeholder="Username" maxlength="15" name="username" 
    value="<?php if(isset($_POST['username'])) echo $_POST['username']; ?>" /><br>
    <input type="password" maxlength="15" name="password1" /><br>
    <input type="password" maxlength="15" name="password2" /><br>
    <input type="text" placeholder="your@email.com" maxlength="25"  name="email" 
    value="<?php if(isset($_POST['email'])) echo $_POST['email']; ?>"/><br>
    <input type="text" maxlength="20" name="county" /><br>
    <input type="submit" value="Register" name="register"/>
</form>

<?php

} 

else {
    echo "Successful";
}

?>
于 2013-09-16T22:16:44.287 に答える