1

PHPログインシステムを作成しようとしています。mysqli を使用して、ユーザー データをセッション変数とユーザー データベースに記録したところです。ユーザーがアカウントを作成すると、プロファイル ページにリダイレクトされます。このページでは、ユーザーの電子メールとユーザーのユーザー名を表示しようとしています。セッション変数に保存したユーザー名を表示しても問題ありません。ただし、メールを表示する方法がわかりません。メールをセッション変数に保存しませんでした。(セッション データベースではなく) ユーザー データベースから取得しようとしています。ここにいくつかのコードがあります:

showuser.php (プロフィール ページ):

<?php
    session_start();

    $host="localhost"; // Host name
    $uname="root"; // Mysql username
    $password=""; // Mysql password
    $db_name=""; // Database name
    $tbl_name="users"; // Table name

    // Connect to server and select database.
    $mysqli = mysqli_connect($host, $uname, $password, $db_name);
    $stmt = $mysqli->prepare("SELECT email FROM users WHERE email = ?");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $stmt->bind_result($em);
    $stmt->fetch();
?>

<h2>Username - Email</h2>
<div id="userinfo"><? echo $_SESSION["username"] ?> - <? echo $em ?></div>

<? 
    $stmt->close();
    mysqli_close($mysqli);
?>

storeuser.php

<?php
session_start();

$host="localhost"; // Host name
$uname="root"; // Mysql username
$password=""; // Mysql password
$db_name="itit"; // Database name
$tbl_name="users"; // Table name

// Connect to server and select database.
$mysqli = mysqli_connect($host, $uname, $password, $db_name);

// Get values from form
$username=$_POST['username'];
$pw=$_POST['pw'];
$email=$_POST['email'];

$_SESSION["timeout"] = time();
$_SESSION["username"] = $_POST['username'];
$_SESSION["password"] = $_POST['pw'];
$_SESSION["loggedIn"] = true;

// Insert data into mysql
$sql = "INSERT INTO $tbl_name(username, password, email)VALUES(?,?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("sss", $username, $password, $email);
$stmt->execute();
?>

<?php
// close connection
mysqli_close($mysqli);
?>

アプリケーション.js

$("#signupform").submit(function(e) {  
    e.preventDefault();
    $.post('storeuser.php', $(this).serialize(), function(data){
        $("#showuser").load("templates/showuser.php");
        $("#userinfo").text(data);
        $("#signupform").remove();
    });
});

(PDOに関して)以前の質問で指摘されました-メールをプロファイルページに表示するには、「データ」変数をajax $.post()呼び出しに渡す必要があります。「データ」はどこで設定されますか? そして、「データ」とは?

奇妙なことの 1 つは、この行を置き換えると、次のようになることです。

$stmt->bind_param("s", $email);

これに:

$stmt->bind_param("s", $_SESSION["email"]);

電子メールが表示されます...しかし、私は電子メールをセッションにどこにも保存しません! メール欄すらない!前者ではなく後者が機能するのはなぜですか?

4

1 に答える 1

0

$emailユーザーの代わりに(未定義の変数を使用して) 電子メールを探している場合、おそらくこれが必要です。

$stmt = $mysqli->prepare("SELECT email FROM users WHERE username = ?");
$stmt->bind_param("s", $_SESSION["username"]);

これの代わりに:

$stmt = $mysqli->prepare("SELECT email FROM users WHERE email = ?");
$stmt->bind_param("s", $email);
于 2013-06-11T02:25:56.570 に答える