登录失败时导航到注册页面

时间:2016-02-16 13:37:02

标签: javascript php html mysql database

我试图创建一个简单的登录页面。我有一个注册页面,当用户注册然后尝试登录时,它将导航到主页。但是,当用户尝试登录并且数据库中没有用户名和密码时,我希望脚本将其导航到注册页面。

我在使用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();
}

?>

3 个答案:

答案 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(也已弃用)。