Используйте подготовленные инструкции для проверки учетных данных переопределения пользователя, прав переопределения пользователя и удаления записи таблицы MySQL

Я пытаюсь построить функцию переопределения, чтобы пользователи могли вручную удалить строку таблицы MySQL, если у них есть правильные права сделать это. Пользователю предлагается ввести те же учетные данные, которые используются для входа в программу, а также uniqueID для строки, которую необходимо удалить. После нажатия функции ‘Submit’ я запускаю серию инструкций if/ MySQL SELECT для проверки учетных данных, прав пользователя и, наконец, удаления строки с выводом результата в качестве предупреждения.

Однако мое предупреждение отображается пустым, и строка не удаляется, поэтому я знаю, что есть проблема с моими инструкциями if. После тестирования, я считаю, что проблема заключается в том, когда я пытаюсь использовать результаты предыдущего запроса, чтобы запустить следующую логику оператора if.

Как я правильно определяю, если запрос MySQL возвратил строку, используя подготовленные операторы?

Вся помощь ценится! Спасибо!

мой код:

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



    $overridePasswordInput = $_POST['overridePassword'];

    $overrideUsername = $_POST['overrideUsername'];
    $overridePassword = ENCODE(($overridePasswordInput).(ENCRYPTION_SEED));
    $roleID = '154';
    $overrideUniqueID = $_POST['overrideUniqueID'];


    //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);     
    //$result1 = $stmt1->get_result();

    if ($stmt1->fetch()) {


        $sql2 = "SELECT * FROM rolestousers WHERE (rolestousers.userid = ?) AND (rolestousers.roleid = ?)";

        $stmt2 = $conn->prepare($sql2);
        $stmt2->bind_param('ss', $userID, $roleID);
        $stmt2->execute();
        $stmt2->store_result();     

        if ($stmt2->fetch()) {

            $sql3 = "DELETE * FROM locator_time_track_out WHERE locator_time_track_out.uniqueid = ?";

            $stmt3 = $conn->prepare($sql2);
            $stmt3->bind_param('s', $overrideUniqueID);
            $stmt3->execute();
            $stmt3->store_result();     

            if ($stmt3->fetch()) {

                echo 'Override Successful! Please scan the unit again to close it out.';

            } else {

                echo 'Could Not Delete Record from the table.';

            }//End $sql3 if.

        } else {

            echo 'User does not have override permission. Please contact the IT Department.';

        }//End $sql2 if.


    } else {

        echo 'Your login information is incorrect. Please try again. If the issue persists, contact the IT Department.';

    }//End $sql1 if.


//Free the result variable. 
  $stmt1->free();
  $stmt2->free();
  $stmt3->free();

  $stmt1->close();


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


}//End If statement

Примечание: Я определенно уверен, что моя информация о подключении к БД верна. Проблема сохраняется после подключения к базе данных. Я также протестировал код, используя только первый оператор if, и получил пустое предупреждение, поэтому я не делаю это мимо первого оператора if.

EDIT:: My php Script was definitely failing, but even earlier than expected, at the following code:

$overridePassword = ENCODE(($overridePasswordInput).(ENCRYPTION_SEED));

Таким образом, моя проблема заключается в том, что мне нужно правильно сравнить пароль и шифрование семенной информации. Однако предыдущий программист использовал следующую строку для выполнения того же процесса (что, очевидно, небезопасно):

$querystatement = "SELECT id, firstname, lastname, email, phone, department, employeenumber, admin, usertype FROM users WHERE login="".mysql_real_escape_string($user)."" AND password=ENCODE("".mysql_real_escape_string($pass)."","".mysql_real_escape_string(ENCRYPTION_SEED)."")";
    $queryresult = $this->db->query($querystatement);

Мне нужно будет устранить эту проблему, прежде чем я смогу даже проверить функциональность логики if с помощью подготовленных операторов.

1 ответ