2016-04-15 11 views
0

フィールド名として電子メールを持つフォームがあります。私がしようとしているのは、電子メールが$emailToCheckと等しくない場合、$_POST['email']と等しくない場合、初めてエラーが発生するはずです。ユーザーが間違ったメールIDを再度入力すると、ページが更新されても常に"error.htm"にリダイレクトする必要があります。エラー件数 - PHP

電子メールIDが2回間違って入力されてもフォームが常に表示されます。

<?php 

if (!empty($_POST['email'])) { 
    $email="[email protected]"; 
    if($email!=$_POST['email']) 
    { 
     $count="1"; 
    } 
    if($count=="2"){ 
    header("Location: /error.htm"); 
     exit(0); 
    } 
} 

if($count!="2"){ 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Form</title> 
</head> 
<body id="main_body" > 

    <div id="form_container"> 

     <h1><a>Form</a></h1> 
     <form id="form_1123848" class="appnitro" method="post" action=""> 
        <div class="form_description"> 
      <h2>Form</h2> 
      <p> <input type="text" name="email" value="" /></p> 
     </div>      
      <ul > 

        <li class="buttons"> 
            <input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" /> 
     </li> 
      </ul> 
     </form> 


    </body> 
</html> 
<? 
} 
?> 
+0

あなたが要求間のカウンターを維持するためにセッションを使用する必要があります。ここにhttp://php.net/manual/en/を読みますbook.session.php –

答えて

1

ここには2つの問題があります。

1. $countを文字列として定義していて、決して増分しません。コードを見渡すと、不一致があるたびに具体的にはに$countが設定されています。 2にどうして到着するのですか?

2.さらに、ここでのデータはステートレスです。前の呼び出しで$countが設定されたことをスクリプトがどのように知っていると思われますか?また、セッション変数として$countを設定して、スクリプトがその前の値を知るようにする必要があります。

あなたは、これに似たものにあなたのコードを更新してみてください:

// Check if `email` passed in POST request: 
if ($_POST['email']) { 
    $email = "[email protected]"; //Manually define expected email address. 

    // Check if provided email does *not* match the expected email: 
    if ($email !== $_POST['email']) { 
    // Record the mismatch attempt in session and increment: 
    if (!($_SESSION['incorrectEmailCount'])) { 
     // If this is the first mismatch, define the session variable, and set to 1. 
     $_SESSION['incorrectEmailCount'] = 1; 
    } else { 
     // Session variable already set due to previous mismatch. Increment it. 
     $_SESSION['incorrectEmailCount']++; 
    } 
    } 
    // If user entered incorrect email more than once: 
    if ($_SESSION['incorrectEmailCount'] > 1) { 
    // Redirect to error page and stop execution. 
    header("Location: /error.htm"); 
    exit(0); 
    } 
} 
+0

構文解析エラー:予期しない構文エラー '{' in 10行目 – user580950

+0

ここで私と少しでもやり取りしてください。そのエラーの原因を突き止めて修正することはできませんか?コードを更新しました。 'if'ステートメントに閉じ括弧記号がありませんでした。 –

+0

申し訳ありませんが、私はphpを初めて使いこなしています。これを今必要としないと思っています($ count <= 2): – user580950

0

フォームが送信されると、ページがリロードされ、カウンタがリセットされます。実際にカウントするには、その値をフォームに入力し、フォームが送信されるときにPHPに渡す必要があります。

<?php 

// Try to get the amount of attempts from the POSTed data 
$count = isset($_POST['count']) ? $_POST['count'] : 0; 

if (isset($_POST['email'])) { 
    $email = "[email protected]"; 

    if ($email != $_POST['email']) { 
     $count++; 
    } 

    if ($count == 2) { 
    header("Location: /error.htm"); 
    } 
} 

if ($count <= 2): 
?> 

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Form</title> 
    </head> 

    <body id="main_body" > 
     <div id="form_container"> 
      <h1><a>Form</a></h1> 
      <form id="form_1123848" class="appnitro" method="post" action=""> 
       <!-- Let the POST data know this is the x attempt --> 
       <input type="hidden" name="count" value="<?php echo $count; ?>"> 

       <div class="form_description"> 
        <h2>Form</h2> 
        <p> <input type="text" name="email" value="" /></p> 
       </div> 
       <ul> 
        <li class="buttons"> 
         <input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" /> 
        </li> 
       </ul> 
      </form> 
     </div> 
    </body> 
</html> 

<?php endif; ?> 

また、コーディングスタイルは一貫していません。それに取り組もう!

+0

これははいですが、実際には何もしません(空白の画面が2以上の場合)。したがって、if($ count == 2)を 'if($) count> = 2) ' - *リダイレクトではなくエコーしたいと思ったら* ;-)と言っているだけです。 –