2017-02-07 3 views
0

私はデータベースを持っています。私は4つのテーブルを持っています。プライベートユーザー用に2つ、ビジネスユーザー用に2つです。何らかの理由で私はビジネスユーザーの電子メールを使用してログインしようとすると動作しますが、ユーザー名は機能し、プライベートテーブルでは動作しますが、ここで私のコードは正しく説明しません。それが再び1つのデータベースが動作し、2番目にdoesnt

$password = $_POST['password']; 
    $emailuser = $_POST['unameemail']; 
    $password = mysqli_real_escape_string($sql , $password); 
    $emailuser = mysqli_real_escape_string($sql , $emailuser); 
    $pwcheck = " 
    SELECT * FROM private AS p 
    INNER JOIN user_private_data 
    AS c ON p.id = c.id 
    WHERE username='$emailuser' OR email='$emailuser'"; // part that works fine 
    $resultcheck = mysqli_query($sql , $pwcheck); // part that works fine 
    $rowcheck = mysqli_fetch_array($resultcheck , MYSQLI_ASSOC); // part that works fine 
    $hash = $rowcheck['password']; // part that works fine 
    $hash_pwd = password_verify($password , $hash); 
    if ($hash_pwd != 0) { 
     $_SESSION['username'] = $rowcheck['username']; // part that works fine 
     $_SESSION['logged'] = true; // part that works fine 
     header("refresh:0;url=../blablabla.php");  // part that works fine     
    } else { 
     $privateuser = " 
     SELECT * FROM business AS d 
     INNER JOIN user_business_data 
     AS j ON d.id = j.id 
     WHERE username='$emailuser' OR email='$emailuser'"; // doesn't work 
     $resultprivate = mysqli_query($sql , $privateuser); // doesn't work 
      $rowprivate = mysqli_fetch_array($resultprivate , MYSQLI_ASSOC); 
     $hashprivate = $rowprivate['password']; 
     $hash_private = password_verify($password , $hashprivate); 
     if ($hash_private != 0) { 

      $_SESSION['username'] = $rowprivate['username']; 
      $_SESSION['logged'] = true; 
      $_SESSION['business'] = $rowprivate['bname']; 
      $_SESSION['type'] = 'business'; 
} 
+0

解析する前に、あなたの入力値をサニタイズしてくださいあなたの接続で定義されていると仮定し を取得する前に結果を持っているかどうかを確認する必要がありますあなたの質問に。このスクリプトはSQLインジェクションに対して非常に脆弱です。 – Akintunde007

+0

あなたのスクリプトは[SQLインジェクション攻撃]の危険にさらされています(http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) [リトルボビーテーブル](http://bobby-tables.com/)でも [入力をエスケープしている場合、その安全ではありません!](http://stackoverflow.com/questions/5741187/sql-injection-that-gets -around-mysql-real-escape-string) [準備されたパラメータ化された文](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) – RiggsFolly

+0

これは登録ではなくログインページですページ – moran

答えて

0

はこれを試してください:あなたはクエリは実際に私は変数$ SQLは

<?php 

$password = $_POST['password']; 
$emailuser = $_POST['unameemail']; 
$password = mysqli_real_escape_string($sql, $password); 
$emailuser = mysqli_real_escape_string($sql, $emailuser); 
$pwcheck = " 
      SELECT * FROM private AS p 
      INNER JOIN user_private_data 
      AS c ON p.id = c.id 
      WHERE username='$emailuser' OR email='$emailuser'"; // part that works fine 
$resultcheck = mysqli_query($sql, $pwcheck); // part that works fine 
$rowcheck = mysqli_fetch_array($resultcheck, MYSQLI_ASSOC); // part that works fine 
$hash = $rowcheck['password']; // part that works fine 
$hash_pwd = password_verify($password, $hash); 
if ($hash_pwd != 0) { 
    $_SESSION['username'] = $rowcheck['username']; // part that works fine 
    $_SESSION['logged'] = true; // part that works fine 
    header("refresh:0;url=../blablabla.php");  // part that works fine     
} else { 
    $privateuser = " 
       SELECT * FROM business AS d 
       INNER JOIN user_business_data 
       AS j ON d.id = j.id 
       WHERE username='$emailuser' OR email='$emailuser'"; // doesn't work 
    $resultprivate = mysqli_query($sql, $privateuser); // doesn't work 
    if ($resultprivate->num_rows > 0) { 
     $rowprivate = mysqli_fetch_array($resultprivate, MYSQLI_ASSOC); 
     $hashprivate = $rowprivate['password']; 
     $hash_private = password_verify($password, $hashprivate); 
     if ($hash_private != 0) { 

      $_SESSION['username'] = $rowprivate['username']; 
      $_SESSION['logged'] = true; 
      $_SESSION['business'] = $rowprivate['bname']; 
      $_SESSION['type'] = 'business'; 
     } else { 
      //no record 
     } 
    } 
?> 
関連する問題