字段和bind

编程入门 行业动态 更新时间:2024-10-26 12:27:29
字段和bind_param / ajax发布请求(fields and bind_param / ajax post request)

我正在尝试创建一个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); ?>

的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)中向我指出 - 为了使电子邮件显示在配置文件页面上,我需要将“data”变量传递给我的ajax $ .post()调用。 “数据”在哪里设置? 而且,“数据”中的内容是什么?

一个奇怪的事情是,如果我替换这一行:

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

对此:

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

电子邮件显示...但我从来没有在任何地方存储电子邮件! 甚至没有电子邮件字段! 为什么后者会起作用,而不是前者?

I am trying to create a PHP login system. I am at the point where I have logged the user data into session variables, as well as into a user database using mysqli. When a user creates an account they get redirected to a profile page. On this page I am trying to display the user's email, and the user's username. I have no problem displaying the username as I stored it in a session variable. However, I can't seem to figure out how to get the email displayed. I did not store the email in a session variable. I am trying to retrieve it from the user database (not the session database). Here is some code:

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(); }); });

It was pointed out to me in a previous question I had (regarding PDO) - that for the email to get displayed on the profile page, I need to pass a "data" variable to my ajax $.post() call. Where does "data" get set? And, what is in "data"?

One weird thing is that if I replace this line:

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

to this:

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

the email gets displayed...but I never store the email in the session anywhere! There isn't even an email field! Why would the latter work, and not the former?

最满意答案

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

You are looking for an e-mail (using an undefined variable $email) instead of the user, you probably want this:

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

instead of this:

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

更多推荐

本文发布于:2023-07-15 19:16:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1117762.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   bind

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!