2017-07-29 63 views
0

使用用户已经在其注册中提供的信息(当前位于SQL数据库中),当用户登录并单击以转到表单时,我想要一些的表单已被预先填充。所述登录表格是这样:使用Cookie预填充PHP表格

<?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,所以有时候它有点令人难以置信。谢谢!

+0

如果你错过了它,你没有在第一个代码块中修改你网站的名字。 – 2017-07-29 23:54:37

+0

我更新了代码以反映下面答案中的建议......仍然无法正常工作。我很确定我有一些语法错误,{}; ():等等......正如我所说的,我试图自己学习这一切,所以请耐心等待...... –

回答

0

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

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

在每个脚本的顶部(或在被包含在每个脚本的顶部的文件),这样做:

session_start(); 

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

一旦用户提供他的登录凭证,保存状态在会话:

$_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; 

如果您将此块(未经测试的代码)包含在所有页面上方,则可以始终依靠:

  • $username对于未知用户是准确的,或者是NULL
  • isLoggedIn告诉你这是否是登录用户。

您还可以在$ _SESSION中存储其他内容,并在其他页面上重新使用它们。只需记住在做任何需要认证的事情之前检查登录状态。

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

之前你和使用会话跳,read this page

PS:这是不相关的问题,但绝不明文密码在你的数据库。使用password_hash存储和password_verify检查。

+0

@ LaraO'Regan ok。我试图帮助你。如果您发现我的答案有帮助,请选择或注释或两者都选。祝你好运。 – BeetleJuice

+0

我已更新代码以反映您的建议,但仍无法使用。我知道我可能有一些语法错误,正如我所说的,我正在试图教给自己,所以我要求你忍耐我!感谢您的帮助。 –