0

わかりましたので、スタッフ パネルを mysql から pdo に再コーディングしようとしていますが、pdo では 2 とステートメントを使用できないようです。

これは私がこれまでに持っているものです

これが私の基本的なhtmlフォームです

<form name="input" action="" method="post">
  <p>Username:</p>
  <p>
  <input type="text" name="username" id ="username">
  </p>
  <p>Password:  </p>
  <p>
    <input type="password" name="password" id = "password">
  </p>
  <p>
    <input type="submit" value="Submit" name = "Submit">
  </p>
</form> 

そして、送信ボタンに設定されている場合を実行します

   if (isset($_POST["Submit"])) {
$username= mysql_real_escape_string($_POST['username']);
$username2 = strip_tags($username);


$password= mysql_real_escape_string($_POST['password']);
$password2 = strip_tags($password);
$md5password = md5($password2);

$mod = 1 ;

$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ? AND mod = ?");
$statement->execute(array($username2,$md5password,$mod));
$count = $statement->rowCount();

/// If username and password is correct then we carry on
if ($count == "1")
  {


     $_SESSION['username'] = $username2 ; 

//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
  $ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
  $ip=$_SERVER['REMOTE_ADDR'];
}



$result5534453465 = mysql_query("UPDATE users SET lastip='".$ip."' WHERE username='".$_SESSION['username']."'") 
or die(mysql_error());  

mysql_query("INSERT INTO user_log (username, ip)
VALUES ('".$_SESSION['username']."', '".$ip."')");






  echo '<META HTTP-EQUIV="Refresh" Content="0; URL=home.php">';    
    exit;




  }else{
    echo "Password or username is wrong";  

  }
}

2 番目の AND を取り出すと問題なく動作しますが、もちろんスタッフだけがログインできるようにする必要があります。2番目を削除すると、すべて正常に機能しますが、2番目が必要であり、スタッフのみがログインできると言いましたか。私は何を間違っていますか??

4

2 に答える 2

0

PDO 拡張機能の専門家ではありませんが、マニュアルを見ると、パラメーターがすべて文字列の場合 (または少なくともすべて同じ型の場合)、 $statement->execute() で配列のみを使用できる可能性がありますか? あなたの場合のように、それらが混在している場合は、より複雑なバージョンの execute メソッドを使用することをお勧めします - bindParams 関数を分離します。例えば:

$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ? AND mod = ?");
// $statement->execute(array($username2,$md5password,$mod));

$statement->bindParam(1, $username2, PDO::PARAM_STR, 50); // check your lengths
$statement->bindParam(2, $md5password, PDO::PARAM_STR, 60);
$statement->bindParam(3, $mod, PDO::PARAM_INT);
$statement->execute();

これはうまくいきますか?

于 2013-07-25T00:36:12.153 に答える