0

如果这个问题的标题有点荒谬,我很抱歉,但我真的想不出更好的了。

现在,我基本上试图做的是以下内容:

让用户登录并被重定向到其中包含表单的页面,一旦用户填写表单,就会向用户和邮件列表发送一封电子邮件。

现在,在数据库中,我显然有用户名和密码,除了这两行,我还有一个相应的电子邮件。

我不希望用户输入他的电子邮件,我想以某种方式访问​​包含电子邮件的数据库行,并让电子邮件发送脚本自动用用户的电子邮件填写 from 字段。

如果我发布代码的顺序让您跳来跳去,我真的很抱歉,我不确定哪种顺序最有意义。

验证登录的代码:

require 'Mysql.php';

class Membership {

function validate_user($un, $pwd) {
    $mysql = New Mysql();
    $ensure_credentials = $mysql->verify_Username_and_Pass($un, $pwd);

    if($ensure_credentials) {
        $_SESSION['status'] = 'authorized';
        header("location: index.php");
    } else return "Please enter a correct username and password";

} 

function log_User_Out() {
    if(isset($_SESSION['status'])) {
        unset($_SESSION['status']);

        if(isset($_COOKIE[session_name()])) 
            setcookie(session_name(), '', time() - 1000);
            session_destroy();
    }
}

function confirm_Member() {
    session_start();
    if($_SESSION['status'] !='authorized') header("location: login.php");
}

}

访问数据库以检索用户名和密码的代码:

require_once 'includes/constants.php';

class Mysql {
private $conn;

function __construct() {
    $this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or 
                  die('There was a problem connecting to the database.');
}

function verify_Username_and_Pass($un, $pwd) {

    $query = "SELECT *
            FROM members
            WHERE usr = ? AND pass = ?
            LIMIT 1";

    if($stmt = $this->conn->prepare($query)) {
        $stmt->bind_param('ss', $un, $pwd);
        $stmt->execute();

        if($stmt->fetch()) {
            $stmt->close();
            return true;
        }
    }

}
}

在电子邮件脚本中:mail("$row", "test", $messagebody, "From: Website@site.com");

最后,下面是我目前位于包含表单的页面上方的代码:

<?php

require_once 'classes/Membership.php';
require_once 'includes/constants.php';
$membership = New Membership();

$membership->confirm_Member();
session_start();

if (isset($_SESSION['username']));
$username = $_SESSION['username'];
$dbc = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
$query = "SELECT email FROM members";
$result = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($result);
?>

我有实际的登录系统运行,它拒绝不正确的用户并传递组合,接受正确的用户并重定向到表单,这只是我不知道该怎么做的邮件部分。我拥有的代码实际上是通过数小时的谷歌搜索拼凑而成的,当它不起作用时,我真的不应该感到惊讶。

任何帮助将不胜感激。(请假装我在发布回复时尽可能简单,编程真的让我头疼)

4

1 回答 1

0

你做的部分正确。您使用了会话。但是保持“授权”(如您所见)毫无用处。为什么不保留登录用户的个人资料?通常,您会检查会话中是否有“个人资料”。如果您这样做,则意味着它已被授权使用。如果不是,那就不是。相同的效果,但现在更有用了。所以保留用户引用(通常是他的唯一 ID 甚至是从数据库中获取的整个个人资料,这样你就可以节省一些查询),所以在其他页面上,你可以简单地根据你从会话中获得的 id 获取他的个人资料,并用电子邮件或他的名字预先填写表格管他呢

于 2012-08-30T22:25:49.520 回答