2017-01-18 6 views
0

Я пытаюсь подготовить пользовательские инструкции, чтобы найти запись пользователя и сохранить идентификатор пользователя в переменной php для использования позже. Я хотел бы повторить содержимое переменной. Как проверить результат с помощью Подготовленных утверждений?store MySQL SELECT result в php-переменной с использованием подготовленных операторов

Мой КОД:

if ((isset($_POST['overrideUsername'])) and (isset($_POST['overridePassword'])) and (isset($_POST['overrideUniqueID']))) { 



    $overridePasswordInput = $_POST['overridePassword']; 
    $overrideUsernameInput = $_POST['overrideUsername']; 
    $roleID = '154'; 
    $overrideUniqueID = $_POST['overrideUniqueID']; 

    //Not sure how to properly compare stored passwords vs password given by user... 
    $overridePassword = mysqli_real_escape_string($overridePasswordInput); 
    $overrideUsername = mysqli_real_escape_string($overrideUsernameInput); 





    //connect to the database 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    // Check connection 
    if(mysqli_connect_errno()) { 
     printf('Could not connect: ' . mysqli_connect_error()); 
     exit(); 
    } 

    $conn->select_db($dbname); 

    if(! $conn->select_db($dbname)) { 
     echo 'Could not select database. '.'<BR>'; 
    } 


$sql1 = "SELECT users.id FROM users WHERE (users.login = ?) AND (users.password = ?)"; 

    $stmt1 = $conn->prepare($sql1); 
    $stmt1->bind_param('ss', $overrideUsername, $overridePassword); 
    $stmt1->execute(); 
    $stmt1->bind_result($userID);  
    $stmt1->get_result(); 


    if ($stmt1->get_result()) { 

     echo $userID; 

    } else { 

     echo 'User credentials incorrect. Please try again'; 

    } 

$stmt1->close(); 


//Close the Database connection. 
$conn->close(); 

}//End If statement 

Более того, это уже существующий код оригинальный программатор используется для аутентификации пользователей в программе:

if(!defined("noStartup")){ 
$scriptname = basename($_SERVER["PHP_SELF"]); 
$phpbmsSession = new phpbmsSession; 

//Testing for API login 
if(strpos($scriptname,"api_")!==false){ 
    if(isset($_POST["phpbmsusername"]) && isset($_POST["phpbmspassword"])){ 
     $phpbmsSession->loadDBSettings(); 

     include_once("include/db.php"); 
     $db = new db(); 
     $phpbmsSession->db = $db; 

     include_once("common_functions.php");   
     $phpbmsSession->loadSettings($sqlEncoding); 
     $phpbms = new phpbms($db); 


     if(!$phpbmsSession->verifyAPILogin($_POST["phpbmsusername"],$_POST["phpbmspassword"],ENCRYPTION_SEED)) 
      $error = new appError(-700,"","Login credentials incorrect",true,true,true,"json"); 
    } else 
     $error= new appError(-710,"","No login credentials passed",true,true,true,"json"); 
} else { 

    $phpbmsSession->loadDBSettings($sqlEncoding); 


    include_once("include/db.php"); 
    $db = new db(); 

    $phpbmsSession->db = $db; 

    $phpbmsSession->loadSettings($sqlEncoding); 

    include_once("common_functions.php"); 
    $phpbms = new phpbms($db); 

    if(!isset($noSession)) 
     $phpbmsSession->startSession(); 

     if (!isset($_SESSION["userinfo"]) && $scriptname != "index.php") { 

     if(isset($loginNoKick)){ 
      if(!isset($loginNoDisplayError)) 
       exit(); 
     } else{ 
      goURL(APP_PATH."index.php"); 
     } 
     } 

    } 

    $db->stopOnError=true; 
}//end if 

И функция проверки:

function verifyAPIlogin($user,$pass){ 
    $thereturn=false; 
    $this->db->stopOnError = false; 

    $querystatement = "SELECT id, firstname, lastname, email, phone, department, employeenumber, admin, usertype 
        FROM users 
        WHERE login!=\"Scheduler\" AND login=\"".mysql_real_escape_string($user)."\" 
        AND password=ENCODE(\"".mysql_real_escape_string($pass)."\",\"".mysql_real_escape_string(ENCRYPTION_SEED)."\") 
        AND revoked=0 AND portalaccess=1"; 
    $queryresult = $this->db->query($querystatement); 
    if(!$queryresult) { 
     $error = new appError(-720,"","Error retrieving user record",true,true,true,"json"); 
     return false; 
    } 

    if($this->db->numRows($queryresult)){ 
     //We found a record that matches in the database 
     // populate the session and go in 
     $_SESSION["userinfo"]=$this->db->fetchArray($queryresult); 

     $querystatement="UPDATE users SET modifieddate=modifieddate, lastlogin=Now() WHERE id = ".$_SESSION["userinfo"]["id"]; 
     [email protected] $this->db->query($querystatement); 
     if(!$queryresult) { 
      $error = new appError(-730,"","Error Updating User Login Time",true,true,true,"json"); 
     } else 
      $thereturn=true; 
    } 
    return $thereturn; 
    } 

}//end loginSession class 

ПРИМЕЧАНИЕ. Я уже тестировал, что мои значения $ _POST() успешно совпадают g до моего сценария.

EDIT :: добавлено больше кода, чтобы улучшить общую картину того, что я пытаюсь сделать. Будем очень благодарны за любые общие вопросы в отношении шифрования/аутентификации пользователей.

Спасибо!

+0

Ваши пароли не являются хэшируются? Вам не нужна ссылка на таблицу ('users.') в столбцах, когда используется только одна таблица. – chris85

+0

1/2 код, который мы не знаем, что это такое или какие значения они содержат. Я предлагаю вам начать поиск ошибок. И почему вы используете скобки, где вам не нужно? –

+0

* «Я уже тестировал, что мои значения $ _POST()« * - Конечно, но соответствуют ли переменные для них тем, что вы разместили? –

ответ

1

Как я уже говорил в комментарии, PHP теперь имеет несколько встроенных методов для обработки шифрования и дешифрования паролей, которые вы можете найти помогает решить проблему:

password_hash и password_verify