0

この質問のタイトルが少しばかげている場合は申し訳ありませんが、私は本当にこれ以上のものを思い付くことができませんでした。

さて、私が本質的にやろうとしていることは次のとおりです。

ユーザーにログインして、フォームが含まれているページにリダイレクトしてもらいます。ユーザーがフォームに入力すると、ユーザーとメーリングリストの両方に電子メールが送信されます。

これで、データベースには明らかにユーザー名とパスワードがあり、これら2つの行に対応する電子メールもあります。

ユーザーに自分の電子メールを入力させたくありません。どういうわけか、電子メールを含むデータベース行にアクセスし、電子メールのsendscriptにユーザーの電子メールを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

あなたはそれを部分的に正しく行いました。セッションを使用しました。しかし、「承認済み」を維持することは (ご覧のとおり) かなり役に立ちません。ログインしたユーザーのプロファイルを保持しないのはなぜですか? 一般に、セッションで「プロファイル」を取得したかどうかを確認します。もしそうなら、それはそれが許可されて使用されていることを意味します。そうでない場合は、そうではありません。同じ効果ですが、より便利になりました。したがって、ユーザーの参照を維持します (通常、DB から取得した一意の ID またはプロファイル全体を取得するため、クエリを節約できます)。他のページでは、セッションから取得した ID に基づいてプロファイルを取得し、フォームに電子メールまたは彼の名前を事前入力することができます。または何でも

于 2012-08-30T22:25:49.520 に答える