1

セッションで送信されたパスワードを保存できるようにする必要があります。現在、php_self メソッドを使用すると、ユーザーがパスワードを正しく入力していないかのようにページがリロードされるだけです (これは Firefox で発生しており、実際にはセッションなしで正常に動作します)。 Chrome / Safariで)、FFで動作するにはセッションが必要だと思いますが、PHPに慣れていないので、どうすればよいかわかりません。コードは次のとおりです。

前もって感謝します

<?php
session_start();

$Password = 'hello';

   if (isset($_POST['submit_pwd'])){
      $pass = isset($_POST['passwd']) ? $_POST['passwd'] : '';


      if ($pass != $Password) {
         showForm("error", "WRONG PASSWORD");
         exit();     
      }
   } else {
      showForm();
      exit();
   }

function showForm($Inputclass="mister", $Placeholder="PLEASE ENTER PASSWORD"){ 

?>

HTML の場合:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd" id="pwd">


 <input class="<?php echo $Inputclass; ?>" name="passwd" type="password" size="79" style="margin-left: -100px;" placeholder="<?php echo $Placeholder; ?>"/>
         <br/>
             <input class="text" name="submit_pwd" value="Login" type="image" src="loginkey.png" style="position: relative; left: 240px; top: -35px;">

      </form>
4

1 に答える 1

1

ボタンを押すと、$_POST['submit_pwd'] ではなく、$_POST['submit_pwd_x'] と $_POST['submit_pwd_y'] が設定されます。

「Enter」を押した場合、$_POST['submit_pwd']、$_POST['submit_pwd_x']、または $_POST['submit_pwd_y'] は設定しないでください - ただし、ブラウザによっては設定する場合もあります。

どちらにも依存できないため、チェック if (isset($_POST['submit_pwd'])) は信頼できなくなります

秘訣は、フォームに非表示フィールドを追加し、$_POST でその非表示フィールドの送信を確認することです。


回答の詳細(コメントに基づく):

PHPは

if (isset($_POST['formsubmitted'])){ 
    ....
}

HTMLは

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="pwd" id="pwd"> 
     <input class="<?php echo $Inputclass; ?>" name="passwd" type="password" size="79" style="margin-left: -100px;" placeholder="<?php echo $Placeholder; ?>"/> 
     <br/>
     <input type="hidden" name="formsubmitted" value="1" /> 
     <input class="text" name="submit_pwd" value="Login" type="image" src="loginkey.png" style="position: relative; left: 240px; top: -35px;"> 

</form> 

編集:

ボタンをクリックしない場合 (Enter キーを押します):

  • IE は何も送信しません
  • FF,Opera は submit_pwd_x=0 と submit_pwd_y=0 を送信します
  • Chrome、Safari は submit_pwd_x=0、submit_pwd_y=0、および submit_pwd を送信します

ボタンをクリックすると:

  • IE は submit_pwd_x=X と submit_pwd_y=Y を送信します
  • FF,Opera は submit_pwd_x=X と submit_pwd_y=Y を送信します
  • Chrome、Safari は submit_pwd_x=X、submit_pwd_y=Y、および submit_pwd を送信します
于 2012-08-16T00:12:31.780 に答える