字段和bind_param / ajax post请求


fields and bind_param / ajax post request

我正在尝试创建一个PHP登录系统。现在,我已经将用户数据记录到会话变量中,以及使用mysqli记录到用户数据库中。当用户创建一个帐户时,他们会被重定向到个人资料页面。在这个页面上,我试图显示用户的电子邮件和用户的用户名。显示用户名没有问题,因为我将其存储在会话变量中。然而,我似乎不知道如何让电子邮件显示。我没有将电子邮件存储在会话变量中。我试图从用户数据库(不是会话数据库)检索它。下面是一些代码:

showuser.php (profile page):

<?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);
?>

application.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()调用。"数据"从何而来?那么,什么是"数据"呢?

一个奇怪的事情是,如果我替换这一行:
$stmt->bind_param("s", $email);

:

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

显示电子邮件…但我从来没有把电子邮件存储在会话的任何地方!甚至没有电子邮件栏!为什么后者会起作用,而前者却不行?

您正在寻找一封电子邮件(使用未定义的变量$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);