我试图创建一个简单的登录页面。我有一个注册页面,当用户注册然后尝试登录时,它将导航到主页。但是,当用户尝试登录并且数据库中没有用户名和密码时,我希望脚本将其导航到注册页面。
我在使用else语句时遇到了麻烦,任何人都可以帮我解决这个问题吗?
这是剧本......
function SignIn()
{
session_start(); //starting the session for user profile page
if(!empty($_POST['userName']))
{
$query = mysql_query("SELECT * FROM users where userName = '$_POST[userName]' AND createPassword = '$_POST[createPassword]'") or die(mysql_error());
$row = mysql_fetch_array($query) or die(mysql_error());
if(!empty($row['userName']) AND !empty($row['createPassword']))
{
$_SESSION['userName'] = $row['createPassword'];
echo "<script>window.location = 'index.php'</script>";
}
else
{
echo "<script>window.location = 'signUp.php'</script>";
}
}
}
if(isset($_POST['submit']))
{
SignIn();
}
?>
编辑:嗨,谢谢你的反馈,我已经改变了查询并编辑了回声。感谢您提供安全提示,但在此脚本中安全性不是问题。如果您已经注册,我只需要它指引您到指数,如果您没有注册,我只需要指向您。
如果登录和传递单词不正确,我仍然无法将页面重定向到注册页面。
如果它是正确的,它会将您带到索引,但是如果错误则会显示此脚本所在的php页面。
这是我目前的尝试
function SignIn()
{
session_start();
if(!empty($_POST['userName']))
{
$query = mysql_query("SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword']}'") or die(mysql_error());
$row = mysql_fetch_array($query) or die(mysql_error());
if(!empty($row['userName']) AND !empty($row['createPassword']))
{
$_SESSION['userName'] = $row['createPassword'];
header("Location:http://localhost/waves/index.php");
}
else if (!empty($row['userName']) AND !empty($row['createPassword']))
{
$_SESSION['userName'] != $row['createPassword'];
header("Location:http://localhost/waves/signUp.php");
}
}
}
if(isset($_POST['submit']))
{
SignIn();
}
?>
答案 0 :(得分:3)
1)更正您的查询:
"SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword']}'"
2)为什么需要JS进行重定向?您可以使用header
。
header("Location:http://localhost/signUp.php");
3)不要使用mysql_*
。它已被弃用并从PHP 7中删除。使用mysqli_*
或PDO
。
4)您的查询不安全。阅读此How can I prevent SQL injection in PHP?。
答案 1 :(得分:2)
不要尝试使用Javascript输出重定向它。相反,您需要使用PHP header()重定向。使用此功能,您必须确保没有&#34;输出&#34;已被发送到屏幕;这是非常重要的。如果在执行之前向浏览器回显某些内容,则标题重定向将不起作用。
BonusController
答案 2 :(得分:2)
mysql_query
已弃用,很快就会被删除。它也不安全。所以请改用PDO。
也就是说,这是你在字符串中使用数组键的方式。
$sql = "SELECT * FROM users where userName = '{$_POST['userName']}' AND createPassword = '{$_POST['createPassword]'}'";
虽然这仍然不安全,你应该使用预备语句,或者至少使用mysql_real_escape_string(也已弃用)。