Не удается заставить базу данных обновлять время последнего входа в систему с помощью PHP и MysQL? - PullRequest
0 голосов
/ 08 октября 2009

Вот моя последняя часть входа в систему, которая, кажется, не работает, вот она. Я думаю, что я где-то напутал?

    // Query the database:
    $q = "SELECT user_id, first_name, user_level FROM users WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL";      
    $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));


    if (@mysqli_num_rows($r) == 1) { // A match was made.

        // Register the values & redirect:
        $_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC); 
        $q = "UPDATE users SET last_login = NOW() WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL"; 
        // save the info to the database
        $r= mysqli_query( $dbc );
        mysqli_free_result($r);
        mysqli_close($dbc);

Вот полный сценарий.

<?php
if (isset($_POST['submitted'])) {
    require_once (MYSQL);

    // Validate the email address:
    if (!empty($_POST['email'])) {
        $e = mysqli_real_escape_string ($dbc, $_POST['email']);
    } else {
        $e = FALSE;
        echo '<p class="error">You forgot to enter your email address!</p>';
    }

    // Validate the password:
    if (!empty($_POST['pass'])) {
        $p = mysqli_real_escape_string ($dbc, $_POST['pass']);
    } else {
        $p = FALSE;
        echo '<p class="error">You forgot to enter your password!</p>';
    }

    if ($e && $p) { // If everything's OK.

        // Query the database:
        $q = "SELECT user_id, first_name, user_level FROM users WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL";     
        $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));


        if (@mysqli_num_rows($r) == 1) { // A match was made.

            // Register the values & redirect:
            $_SESSION = mysqli_fetch_array ($r, MYSQLI_ASSOC); 
            $q = "UPDATE users SET last_login = NOW() WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL"; 
            // save the info to the database
            $r= mysqli_query( $dbc );
            mysqli_free_result($r);
            mysqli_close($dbc);

            $url = BASE_URL . 'index.php'; // Define the URL:
            ob_end_clean(); // Delete the buffer.
            header("Location: $url");
            exit(); // Quit the script.

        } else { // No match was made.
            echo '<p class="error">Either the email address and password entered do not match those on file or you have not yet activated your account.</p>';
        }

    } else { // If everything wasn't OK.
        echo '<p class="error">Please try again.</p>';
    }

    mysqli_close($dbc);

} // End of SUBMIT conditional.
?>

Ответы [ 2 ]

1 голос
/ 08 октября 2009

Возможно, вы даже не выполняете запрос,

$q = "UPDATE users SET last_login = NOW() WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL"; 
                        // save the info to the database
                        $r= mysqli_query( $dbc );

должно быть

$q = "UPDATE users SET last_login = NOW() WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL"; 
                        // save the info to the database
                        $r= mysqli_query( $dbc ,$q);

и я бы посоветовал вам проверить, произошло ли обновление, используя disabled_rows

1 голос
/ 08 октября 2009

Возможно, это немного дикое предположение, но это кажется странным:

$q = "UPDATE users SET last_login = NOW() WHERE (email='$e' AND pass=SHA1('$p')) AND active IS NULL"; 
// save the info to the database
$r= mysqli_query( $dbc );

Запрос на обновление хранится в $q, но переменная $q не передается в качестве параметра mysqli_query?

Разве это не должно передаваться как второй параметр?
т.е.:

$r= mysqli_query( $dbc, $q );

(Это то, что делается для запроса select, но не для update)

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