【发布时间】:2014-05-12 20:06:21
【问题描述】:
以下是我的登录脚本的 PHP 代码:
<?php
session_start();
if(isset($_POST['submitted']))
{
$username = $_POST['username'];
$password = $_POST['password'];
$connect = mysqli_connect("localhost", "root", "root", "test");
if (mysqli_connect_errno()){
echo mysqli_connect_error();
}
$query = "SELECT * FROM members where username = '$username'";
$result = mysqli_query($connect, $query);
$log = mysqli_fetch_array($result);
$dbusername=$log['username'];
$dbpassword=$log['password'];
//echo "<h1> ". $log['username']." ".$log['password']."</h1>";
if($username == $dbusername && $password == $dbpassword)
{
$_SESSION['username'] = $dbusername;
$_SESSION['password'] = $dbpassword;
header("Location: Correct.html {$_POST["redirect"]}");
}else
{
header("Location: Incorrect.html {$_POST["redirect"]}");
}
} else {
echo "boo";
}
?>
如您所见,如果用户输入现有的用户名和密码组合,他们将被重定向到“Correct.html”页面。问题是将信息传递到“Correct.html”页面。我希望传递 'username' 变量,以便页面显示“Welcome 'username'”消息。现在,从我的所有尝试中,我知道我需要在“Correct.html”页面上使用以下代码才能成功传递此变量:
<?php
session_start();
if(isset($_SESSION['username'])){
echo "Your session is running " . $_SESSION['username'];
}
?>
我还发现,要使其正常工作,我需要将页面的扩展名从 .HTML 更改为 .PHP。现在的问题是,如果我更改扩展名,我的“Correct.php”页面将不再加载,并且显示为空白屏幕。我已经尝试过在线 HTML 到 PHP 转换器(这似乎与我的代码的每一行相呼应),但这仍然不起作用。
有谁能帮我解决以下两件事之一:
- 为我提供在 HTML 脚本中传递 PHP 变量的解决方案(更简单,但不确定是否可行?)
- 正确地将我的 HTML 代码转换为 PHP(更长,但可以确保变量可以轻松传递)
请记住,我已经有一个 MySQL 数据库和表设置(您可能已经从代码中猜到了)。
【问题讨论】:
-
当使用
mysqli时,您应该使用参数化查询和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您可能会创建严重的SQL injection bugs。 从不使用带有$_POST参数的字符串插值。 -
这里不会出错 ->
"{$_POST["redirect"]}"? -
你试过javascript截取值吗?这样你就不需要PHP了。这里有一个例子:stackoverflow.com/questions/10609511/…
-
@tadman 我完全不确定你的意思。请给我一个书面的例子好吗?
-
@vp_arth 我没有。目前我被重定向到我想要的页面(但是如果 {$_POST["redirect"]} 被删除,这也有效)。我应该删除它吗?