0

ユーザーがいるサイトがあります。各ユーザー アカウントには、mysql テーブルに有効期限がありますsubscription_expires

subscription_expiresユーザーのプロファイルが=ログイン試行後の今日の日付で、プロファイルの有効期限が切れている場合、ユーザーをdashboard.php以外の別のページにリダイレクトする方法はありますか?

などを使用して試してみましたがsub_expires、プロファイルの有効期限が切れている場合でもユーザーをログインさせることができません。

これが私のログインスクリプトです:

<?php

    if (logged_in()) {
        redirect_to("dashboard.php");
    }

    include_once("includes/form_functions.php");

    // START FORM PROCESSING
    if (isset($_POST['submit'])) { // Form has been submitted.
        $errors = array();

        // perform validations on the form data
        $required_fields = array('email', 'password');
        $errors = array_merge($errors, check_required_fields($required_fields, $_POST));

        $fields_with_lengths = array('email' => 30, 'password' => 30);
        $errors = array_merge($errors, check_max_field_lengths($fields_with_lengths, $_POST));

        $email = trim(mysql_prep($_POST['email']));
        $password = trim(mysql_prep($_POST['password']));
        $hashed_password = md5($password);

        if ( empty($errors) ) {
            // Check database to see if email and the hashed password exist there.
            $query = "SELECT id, email, close_account ";
            $query .= "FROM ptb_users ";
            $query .= "WHERE email = '{$email}' ";
            $query .= "AND password = '{$hashed_password}' ";
            $query .= "AND close_account = '0' ";
            $query .= "LIMIT 1";
            $result_set = mysql_query($query);
            confirm_query($result_set);
            if (mysql_num_rows($result_set) == 1) {
                // email/password authenticated
                // and only 1 match
                $found_user = mysql_fetch_array($result_set);
                $_SESSION['user_id'] = $found_user['id'];
                $_SESSION['email'] = $found_user['email'];
                $_SESSION['sub_expires'] = $found_user['subscription_expires'];

                $result = mysql_query("UPDATE ptb_users SET user_online='Online' WHERE id=".$_SESSION['user_id']."") 
or die(mysql_error());


                redirect_to("dashboard.php");
            } else {
                // email/password combo was not found in the database
                $message = "<div class=\"infobox\"><strong>Email/Password combination incorrect.</strong><br />
                    Please make sure your caps lock key is off and try again.</div>";
            }

                } else {
            if (count($errors) == 1) {
                $message = "<div class=\"infobox\">There was 1 error in the form.<div>";


            } else {
                $message = "<div class=\"infobox\">There were " . count($errors) . " errors in the form.<div>";
            }
        }


    } else { // Form has not been submitted.
        if (isset($_GET['logout']) && $_GET['logout'] == 1) {
            $message = "<div class=\"infobox\">You are now logged out.</div>";
        } 
        $email = "";
        $password = "";
    }
?>
            <?php if (!empty($message)) {echo "<p class=\"message\">" . $message . "</p>";} ?>
            <?php if (!empty($errors)) { display_errors($errors); } ?>
            <form action="login.php" method="post">

Email<br />
<input name="email" type="text" value="<?php echo htmlentities($email); ?>" size="40" maxlength="50" />

  <br />
  <br />
  Password<br />
  <input name="password" type="password" value="<?php echo htmlentities($password); ?>" size="40" maxlength="30" />

  <br />
  <br />
<input type="submit" name="submit" value="Login" />


            </form>
4

2 に答える 2

0

また、'{$hashed_password}'パラメータを設定せずに使用しています(代わりに設定しますtrim(mysql_prep($_POST['password']))。そのクエリは、ほぼ確実に値を返しません...

于 2012-11-06T20:55:03.803 に答える
0

選択クエリに「subscription_expires」フィールドを含めていません。したがって、$_SESSION['sub_expires'] に対して null を取得することになります。また、ユーザーがログインできないようにするなど、 $_SESSION['sub_expires'] 値を使用して意味のあることをしようとするロジックのどこにも見当たりません。 ptb_users テーブルを自動的に更新して、それらをその値を確認する前にオンラインで。

于 2012-11-06T20:43:20.070 に答える