7

ユーザー名または電子メールでログインを作成しようとしています

私のコードは次のとおりです。

$username=$_REQUEST['login'];
$email=$_REQUEST['login'];
$password=$_REQUEST['password'];

if($username && $password) {
  $query="select * from  user_db where username='$username'  and password='$password'";
} else if ($email && $password) {
  $query="select * from  user_db where email='$email' and password='$password'";
}

ユーザー名でのログインは成功しますが、電子メールでのログインは機能しません。私を助けてください!

4

8 に答える 8

28

ログインパラメータは、電子メールとユーザー名の両方で同じです。どちらかを受け入れる単一のログインボックスがある場合は、正確には正しくありません。

メールかユーザー名かわからない場合は、クエリ自体に条件を含めることができます。

$login=$_REQUEST['login'];
$query = "select * from  user_db where ( username='$login' OR email = '$login') and password='$password'"

編集: 上記はSQLインジェクションの対象となるため、最近ではPDOのようなソリューションがはるかに好まれています。ロジックは同じままですが、次のようになります。

$query = "
    SET @username = :username
    SELECT * FROM user_db
       WHERE ( username = @username OR email = @username) 
       AND password = :password
";

$statement = $pdoObject->prepare($query);
$statement->bindValue(":username", $login, PDO::PARAM_STR);
$statement->bindValue(":password", $password, PDO::PARAM_STR);
$statement->execute();
于 2012-05-02T18:03:48.993 に答える
2

同じ値を2つの変数に設定してから、if/elseを使用しています。両方のifステートメントは同等です。

有効な電子メールアドレスが含まれているかどうかを確認する必要があります。含まれている場合$_REQUEST[login]は、データベースの電子メールフィールドを使用します。それ以外の場合は、ユーザー名フィールドを使用します。

また、変数をクエリに直接入れないでください。プリペアドステートメントを使用します。

于 2012-05-02T18:01:03.593 に答える
1
<?php
 require "connectdb.php";

$email =$_POST["email"];
$mobile =  $_POST["mobile"];
$password =$_POST["password"];

//Test variables
//$email = "admin@xyz.com";
//$mobile = "9876543210";
//$password ="@!b7885a$";

 $sql_query = "SELECT email FROM RegisterUser WHERE `email` LIKE '$email' OR `mobile` LIKE '$mobile' AND `password` LIKE '$password';";

 $result = mysqli_query($con,$sql_query);
 if(mysqli_num_rows($result) > 0 )
 {
 $row = mysqli_fetch_assoc($result);
 $email = $row["email"];
 echo "Login Successful...Welcome ".$email;
 }
 else
 {
 echo "Login Failed...Incorrect Email or Password...!";
 }
 ?>
于 2019-03-28T07:58:28.000 に答える
0
$username=$_REQUEST['login'];
$email=$_REQUEST['login'];

これは間違ってい$_REQUEST['login']ます。メールとユーザー名の両方に使用しています。なぜメールを使わないのですか?

もちろん、メールアドレスを持っていない場合$_REQUEST['login']、何も返されません。

また、フィールドが空でない限り、両方の if ステートメントが常に実行されます。右?

ログインを解除し、ユーザーにメール アドレスでのログインを強制します。また、パスワードの md5 を取得します。最近、生のパスワードを保存しているのは誰ですか?

于 2012-05-02T17:59:39.163 に答える
0

これが古い投稿であることは承知していますが、一部の人がまだそれを閲覧していることがわかったので、同じ入力で電子メールとユーザー名の両方を許可する簡単な方法を入れたいと思いました

私のコードは次のとおりです

  if
   (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $name_of_same_input) )
  {
     $un_check = mysql_query("SELECT uname FROM eusers WHERE uname = '' ") or die(mysql_error());

     echo "loging in with username"; //code
  }
  elseif
   (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $name_of_same_input) )
  {
     $un_check = mysql_query("SELECT umail FROM eusers WHERE umail = '' ") or die(mysql_error());

     echo "loging in with email"; //code

  }
于 2013-12-02T00:39:37.357 に答える
0
if (validate_username($username)) {
  $query="select * from  user_db where username='".$username".' and password='".validate_password($password)."'";
} else if (validate_email($email)) {
  $query="select * from  user_db where email='".$email."' and password='".validate_password($password)."'";
}
于 2013-11-11T11:28:17.777 に答える
-1
$username=$_REQUEST['username'];//I'm assuming your code here was wrong
$email=$_REQUEST['email'];//and that you have three different fields in your form 
$password=$_REQUEST['password'];

if (validate_username($username)) {
  $query="select * from  user_db where username='".$username".' and password='".validate_password($password)."'";
} else if (validate_email($email)) {
  $query="select * from  user_db where email='".$email."' and password='".validate_password($password)."'";
}

//... elsewhere...

function validate_username(&$username) {
  if (strlen($username) <= 1) { return false; }
  //return false for other situations
    //Does the username have invalid characters?
    //Is the username a sql injection attack?
  //otherwise...
  return true;
}

function validate_email(&$email) {
  //same deal as with username
}

function validate_password(&$password) {
  //same deal as with username
}

2 つのフィールド (ログインとパスワード) しかない場合、電子メールとユーザー名の区別は意味がないことに注意してください。さらに、セキュリティ違反を防ぎ、生活を楽にするために、実際にはPHP PDOを使用してクエリを作成および実行する必要があることに注意してください。

于 2012-05-02T18:09:21.793 に答える