gpt4 book ai didi

php - 使用 Cookie 预填充 PHP 表单

转载 作者:行者123 更新时间:2023-11-29 18:34:41 24 4
gpt4 key购买 nike

使用用户在注册中已经提供的信息(现在位于 SQL 数据库中),当用户登录然后单击转到表单时,我希望某些表单已经预先准备好人口稠密。登录表单如下:

<?php 
session_start();
// check for required fields from the form
if ((!isset($_POST['email'])) || (!isset($_POST['password']))) {
header("Location: userlogin.html");
exit;
}
//connect to server and select database
$mysqli = mysqli_connect("localhost", "user", "password", "database")
or die(mysqli_error());
// use mysqli_real_escape_string to clean the input

$email = mysqli_real_escape_string($mysqli, $_POST['email']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);

// Create and issue the query
$sql = "SELECT username FROM frmak_form_1 WHERE
email = '".$email."' AND
password = '".$password."'";

$result = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

//get the number of rows in the result set; should be 1 if a match.
if (mysqli_num_rows($result) == 1 ) {
// if authorized, get value of username
while ($info = mysqli_fetch_array($result)) {
$username = stripslashes($info['username']);
}




$_SESSION['user']= $info['username'];
$_SESSION['login_until'] = time() + 60 * 60; // login expires in 1 hour

$display_block = "<p>Welcome, ".$username."!</p>
<br /> <br />
<a href='submitReview.php'>Click Here to Submit a Review!</a>";
}
else {
header("Location: userlogin.html");
exit;
}
mysqli_close($mysqli);
?>
<!DOCTYPE html>
<html>
<head>
<title>User Login REDIRECT!!!</title>
</head>

<body>
<?php echo $display_block; ?>
</body>

</html>

那么“submitReview.php”文件是:

<?php
session_start();
$s = &$_SESSION; // Login status is ON and has NOT yet expired

$isLoggedIn = isset($s['login_until']) && $s['login_until'] > time();
if($isLoggedIn):
$username = $s['user'];

$s['login_until'] = time() + 60 * 60; // extend login expiration to an hour from now.

else
unset($s['login_until'], $['user']);
$username = null;

endif;



exit;
}
?>

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>
<label>username</label>
<br />
<input name="usrnm" id="usrnm" type="text" value="<?php echo $username; ?>"/>
<br />

</p>
</form>
</body>
</html>

在上面的示例中,我只是尝试在表单中显示用户名,因为这是我想要预填充为文本字段的唯一部分。其他是一个单选按钮和一个复选框字段,我知道这些将需要一个更复杂的参数,所以我只是试图首先让最简单的一个起作用。

如果我所做的根本不是应该做的,有人可以指导我找到一个关于此类事情的好的教程吗?我正在尝试自学 PHP 和 MySQL,所以有时有点不知所措。谢谢!

最佳答案

在第二个文件中,$username 没有任何意义,因此不会预先填充任何内容。另外,您不应该仅根据 cookie 的表面值来决定用户是否登录。任何人都可以创建 cookie auth=1 并将其发送到您的 PHP 服务器。

最简单的学习方法是依赖 PHP Sessions .

在每个脚本的顶部(或在每个脚本顶部包含的文件中),执行以下操作:

session_start();

如果这是一个新用户,这将告诉 PHP 设置 SESSION cookie,或者读取现有的 SESSION cookie 并检索匹配的、先前保存的 session 信息。

用户提供登录凭据后,将状态保存在 session 中:

$_SESSION['user']= $info['username'];
$_SESSION['login_until'] = time() + 60 * 60; // login expires in 1hr

现在要检查用户是否从任何脚本登录,您要做的就是:

session_start();
$s = &$_SESSION; // $s is now an alias of $_SESSION
// Login status is ON and has not yet expired
$isLoggedIn = isset($s['login_until']) && $s['login_until'] > time();

if($isLoggedIn):
$username = $s['user'];

// extend the login expiration to an hour from now
$s['login_until'] = time() + 60 * 60;
else:
// user is unknown or login has expired
unset($s['login_until'], $['user']);
$username = null;
endif;

如果您将此 block (未经测试的代码)包含在所有页面上方,那么您始终可以信赖:

  • $username 准确,或者 NULL 表示未知用户,
  • isLoggedIn 告诉您这是否是已登录的用户。

您还可以在 $_SESSION 中存储其他内容并在其他页面上重复使用它们。请记住在执行任何需要身份验证的操作之前检查登录状态。

了解 session 依赖于 cookie 也很重要,因此如果用户清除了浏览器 cookie,即使他在 2 分钟前登录,PHP 服务器也不会识别她,并且 start_session() 将为她创建一个全新的 session 。

在您进入并使用 session 之前,read this page

PS:这与您的问题无关,但永远不要在数据库中存储纯文本密码。使用password_hash存储和password_verify检查。

关于php - 使用 Cookie 预填充 PHP 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45394427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com