Все работает без дела, если это не дает мне истинный результат и ничего не меняется - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь написать скрипт для смены пароля.Все идет как надо.Скорее это.Это говорит мне, что это успешно, но ничего не меняется.Ничего не меняется в зашифрованном коде в моем MySQL, а также, когда я пытаюсь войти в систему, я не могу использовать новый пароль, но только старый пароль.Вот код

<?php
session_start();
require_once('inc/functions.inc.php');
if (!isset($_POST['submit'])) {
    die(header("Location: settings.php"));
}
if (isset($_SESSION['updatePasswordError'])) {
    unset($_SESSION['updatePasswordError']);
}
$_SESSION['updatePasswordError'] = array();

if (isset($_SESSION['updatePasswordSuccess'])) {
    unset($_SESSION['updatePasswordSuccess']);
}
$_SESSION['updatePasswordSuccess'] = array();

if (strlen($_POST['newpassword'])  < 8) {
    $_SESSION['updatePasswordError'][] = "New Password must be at least 8 characters";
}
else if ($_POST['newpassword'] != $_POST['confirmnewpassword']) {
    $_SESSION['updatePasswordError'][] = "Passwords don’t match";
}

$mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
if ($mysqli->connect_errno) {
    error_log("Cannot connect to MySQL: " .
              $mysqli->connect_error);
    return false;
}
$incomingOldPassword = $mysqli->real_escape_string(htmlspecialchars($_POST['currentpassword']));
$query = "SELECT * from Customer WHERE id = '{$user->id}'";
if (!$result = $mysqli->query($query)) {
    $_SESSION['updatePasswordError'][] = "Select Error. Try Again";
    error_log("Cannot retrieve account for {$user}");
    return false;
}
// Will be only one row, so no while() loop needed
$row = $result->fetch_assoc();
$dbPassword = $row['password'];
if (crypt($incomingOldPassword,$dbPassword) != $dbPassword) {
    $_SESSION['updatePasswordError'][] = "Old Password Incorrect";
}

if (count($_SESSION['updatePasswordError']) > 0) {
    die(header("Location: settings.php"));
} else {
    $cryptednewPassword = crypt($_POST['newpassword']);
    $newPassword = $mysqli->real_escape_string($cryptednewPassword);
    $result = "$updatePassword($newPassword)";
    if ($result) {
        $_SESSION['updatePasswordSuccess'] [] = "Successfully Updated";
        die(header("Location: settings.php"));
    } else {
        die(header("Location: settings.php"));
    }
}


function updatePassword($newPassword) {
    $mysqli = new mysqli(DBHOST,DBUSER,DBPASS,DB);
    $query = "UPDATE customer SET password = ? WHERE id = $user->id";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("s", $newPassword);
    $result = $stmt->execute();
    $mysqli->close();
    return $result;
}
?>

Если я пытаюсь использовать неверный пароль, не соответствующий пароль или менее 8 символов, я получаю ошибку.Но, кажется, все в порядке, кроме этого

1 Ответ

0 голосов
/ 04 марта 2019

Вы не вызываете функцию updatePassword().Эта строка:

$result = "$updatePassword($newPassword)";

не вызывает функцию.Он просто создает строку, содержащую значения переменных $updatePassword и $newPassword.Поскольку $updatePassword не существует, это эквивалентно записи:

$result = "($newPassword)";

Вы также должны были получить предупреждение о неопределенной переменной.

Способ вызова функции:

$result = updatePassword($newPassword);

Вы не помещаете вызов функции в кавычки и не ставите $ перед именем функции.

Вам также необходимо установить $user восновной сценарий и передайте его в качестве аргумента функции или используйте global $user; внутри функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...