1

私はユーザーの認証のためにこの単純なコードを作成しています。フォームのあるページは:>login.phpです。次のコードで。

login.php:

<html>    
<body>  

<div style="position:absolute;left:300px;top:300px;width:300px;height:100px;z-index:9;>  

<form name="form1" method="POST" action="check.php">  
Username:<br />  
  <input type="text" name="Username" />  
  <br /><br />   
  Password:<br />  
  <input type="password" name="Password" />  
  <br /><br /><br/>  
  <input type=button onClick="location.href='check.php'" value='Continue'       name='continue'/>  
  </form>  
</div>  
</body>  
</html>  

フォームフィールドの値は、次のコードで次のphpページで使用されています。

check.php:

<?php
session_start();
$con = mysql_connect("localhost", "root", "");
mysql_select_db("aviation", $con) or die(mysql_error());
if (isset($_POST['continue'])) {
    $userName = $_POST[Username];
    $passWord = $_POST[Password];
    mysql_select_db('aviation');
    $query = "select * from users where Username='" . $userName . "'and     Password='" . $passWord . "'";
    $result = mysql_query($query, $con);
    if (!$result) {
        die('Could not enter data: ' . mysql_error());
    }
    $rows = mysql_num_rows($result);
    if ($rows == 1) {
        $_SESSION['Username'];
        $_SESSION['Password'];
        echo "Successful";
        echo "<BR>";
        echo "You are authorized to update the status of Bays.";
        echo "<BR>";
        $Msg = "Redirecting....";
        echo '<script type="text/javascript">  
         alert("' . $Msg . '");  
  </script>';
        header("location:upbstatus.php");
    } elseif ($userName == "" || $passWord == "") {
        $errorMsg = "Data was not entered <br/> Enter Username and Password";
        echo '<script type="text/javascript">  
         alert("' . $errorMsg . '");  
  </script>';
        else {
            $errorMsg = "Data Does Not Match <br/> Re-Enter Username and Password";
            $errorMsg = "Data was not entered <br/> Enter Username and Password";
            echo '<script type="text/javascript">  
         alert("' . $errorMsg . '");  
  </script>';
        }
    } else {
        echo ("  =============== not SET ===============");
    }
?>

常に返されます:===============設定されていません===============

なぜこれが起こっているのか、私はとても行き詰まっています。誰か助けてもらえますか?よろしくお願いします。
ありがとうございました。

4

4 に答える 4

2

フォームがリクエストを行う前に、onclick ( onClick="location.href='check.php'") イベント ハンドラがリクエストしています。ボタンがクリックされると、GET リクエストをNOTに送信するようにリダイレクトされます。check.phpPOSTcheck.phpcheck.phpPOST

それを修正するには、ボタンを送信タイプの入力に変更する必要があります。

   <input type='submit' value='Continue' name='continue' />  

追加情報:

  1. 配列インデックスを引用します。お気に入り$_POST['Username']
  2. を使用してSQLのパラメータをエスケープしますmysql_real_escape_string。または 準備済みステートメントを使用します。
于 2012-12-29T17:39:24.323 に答える
1

コードにはいくつかの問題があります。

奇妙なフォームの動作

<input type=button onClick="location.href='check.php'" value='Continue'       name='continue'/>  

なぜあなたはこれをやっている?フォームが送信される前にブラウザーがリダイレクトするため、これはユーザー名とパスワードのフィールドをまったく送信しません。クリック時にフォームを送信する場合は、<input type="submit">

<input type="submit" value="Continue" name="continue" />

配列インデックスを引用する

$userName = $_POST[Username];  
$passWord = $_POST[Password];  

これにより、定数Usernameが存在しないため、PHP で通知が発生します。代わりにこれを使用してください:

$userName = $_POST['Username'];
$passWord = $_POST['Password'];

設定されていない可能性のあるシナリオには入り$_POST['Username']ません。

SQL のエスケープ変数

$query = "select * from users where Username='".$userName."'and     Password='".$passWord."'";  

これは危険です。変数を適切にエスケープする必要があります。

$query = sprintf("select * from users where Username='%s' and Password='%s'",
    mysql_real_escape_string($userName),
    mysql_real_escape_string($passWord)
);

パスワードを平文で保存しない

パスワードを平文で保存することは、トラブルを招くだけです。代わりに bcrypt を使用して、パスワードのハッシュを保存してください。

関連項目: PHP パスワードの安全なハッシュとソルト

mysql_xx関数を使わない

PDOこの機能は、 /mysqliおよび準備済みステートメントを支持して非推奨になりました。

于 2012-12-29T17:42:58.400 に答える
0

送信ボタンをクリックすると削除されます。あなたがそれをしている間、あなたの引用符を修正してください。

于 2012-12-29T17:40:23.807 に答える
0
<form name="form1" method="POST" action="check.php">  
Username:<br />  
  <input type="text" name="Username" />  
  <br /><br />   
  Password:<br />  
  <input type="password" name="Password" />  
  <br /><br /><br/>  
  <input type="submit" value="Continue" name="continue"/>  
  </form> 
于 2012-12-29T17:45:58.007 に答える