Javascript PHP登录算法未重定向到下一页(不确定是否连接到数据库)

Javascript PHP登录算法未重定向到下一页(不确定是否连接到数据库),javascript,php,html,mysql,Javascript,Php,Html,Mysql,我正在设置一个登录页面,获取用户用户名和密码,然后对照本地数据库进行检查,但是没有任何内容从数据库连接回显,也没有重定向到下一个页面“welcome.php” 我已经尝试了许多不同的方法连接到本地数据库,并用不同的方法重定向到不同的页面,但没有一种方法给出任何错误消息或有效。使用XAMPP Apache和mySQL模块提供本地服务器 <?php if (isset($_POST['Login'])) { $link = mysql_connect('localhost','root',

我正在设置一个登录页面,获取用户用户名和密码,然后对照本地数据库进行检查,但是没有任何内容从数据库连接回显,也没有重定向到下一个页面“welcome.php”

我已经尝试了许多不同的方法连接到本地数据库,并用不同的方法重定向到不同的页面,但没有一种方法给出任何错误消息或有效。使用XAMPP Apache和mySQL模块提供本地服务器

<?php

if (isset($_POST['Login']))
{

$link = mysql_connect('localhost','root','password','budget');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';

session_start();

$username= $_POST['username'];
$password= sha1($_POST['password']);

$_SESSION['login_user']=$username;

$query = mysql_query("SELECT accounts.username, passwords.password_hash
FROM accounts
INNER JOIN passwords ON accounts.account_id = passwords.account_id
WHERE accounts.username = '$username' AND password_hash = '$password';");

if (mysql_num_rows($query) != 0){
 ?>
<script type="text/javascript">window.location.replace(welcome.php); 
</script>;
<?php
mysql_close($link); 
}
}

?>

您需要在
welcome.php

由于
welcome.php
既不是像
this
那样的JavaScript关键字,也不是数字,所以单引号是必需的,它不是变量/对象

JS将
welcome
视为对象,将
php
视为
welcome.php

如果没有它,将显示JavaScript错误:

ReferenceError:未定义欢迎

window.location.replace(welcome.php);
而且,不需要分号


JavaScript无条件重定向。

什么不起作用?
你的JavaScript
location.replace
方法需要一个字符串作为输入,你没有给它这个字符串(因为输入值没有被引用)。它将是
window.location.replace('welcome.php')取而代之

如何解决它?
更好的解决方案是在PHP中重定向,而不是在JavaScript中重定向,使用
header()

附加备注
我冒昧地将您的代码转换为使用
mysqli
,而不是旧的、过时的和不推荐的
mysqli
库。有了这个,您可以使用一个准备好的语句,正如我在下面所示。对所有查询使用此方法,通过占位符绑定参数

session_start();
if (isset($_POST['Login'])) {
    $link = mysqli_connect('localhost','root','password','budget');
    if ($link->connection_errno) {
        die('Could not connect: ' . $con->error);
    }

    $username = $_POST['username'];
    $password = sha1($_POST['password']);

    $stmt = $link->prepare("SELECT a.username, p.password_hash
                            FROM accounts a 
                            INNER JOIN passwords p 
                               ON a.account_id = a.account_id
                            WHERE a.username = ? 
                              AND p.password_hash = ?");
    $stmt->bind_param("ss", $username, $password);
    $stmt->bind_result($resultUsername, $resultPassword);
    $stmt->execute();
    if ($stmt->num_rows) {
        $_SESSION['login_user'] = $username;
        header("Location: welcome.php");
    }
    $stmt->close();
}
下一步是什么?

修正你的密码。使用
sha1()
密码非常不安全,请改为使用
passwords\u hash()
/
password\u verify()

如果您有默认的xampp安装,请尝试更改此行$link=mysql\u connect('localhost','root','password','budget');到这个$link=mysql_connect('localhost','root','budget');并将localhost更改为127.0.0.1租约。已在PHP7中删除。了解使用PDO的语句,并考虑使用PDO,不应该使用PHP来处理密码安全性。在散列之前,请确保对它们进行了清理或使用了任何其他清理机制。这样做会更改密码并导致不必要的额外编码。说。即使是这样也不安全!好吧,那就行了,谢谢。然而,它现在不需要任何输入即可立即验证用户,并立即将客户机带到欢迎页面。你知道怎么解决这个问题吗@pupilJavascript重定向不是首选。您应该使用PHP的
标题(“Location:welcome.PHP”)
。我们不能在PHP中使用任何其他哈希,比如sha256或sha512吗?还是RSA之类的?我建议使用专门为存储和验证密码而设计的
密码\u hash()
。它也很容易使用。但是PHP有sha256,sha512,如果这是你要问的,但我不会用它作为密码。为什么?他们不是比sha1好吗?还有一些像RSA或whirlpool这样的公司呢?我不会说SHA256或SHA512对于密码来说足够安全。类似于bcrypt的东西,这就是
password\u hash()
的基础。从单词prepare开始,代码似乎出现在实际页面中,而不是在服务器上运行,知道我做错了什么吗@奇雷尔
session_start();
if (isset($_POST['Login'])) {
    $link = mysqli_connect('localhost','root','password','budget');
    if ($link->connection_errno) {
        die('Could not connect: ' . $con->error);
    }

    $username = $_POST['username'];
    $password = sha1($_POST['password']);

    $stmt = $link->prepare("SELECT a.username, p.password_hash
                            FROM accounts a 
                            INNER JOIN passwords p 
                               ON a.account_id = a.account_id
                            WHERE a.username = ? 
                              AND p.password_hash = ?");
    $stmt->bind_param("ss", $username, $password);
    $stmt->bind_result($resultUsername, $resultPassword);
    $stmt->execute();
    if ($stmt->num_rows) {
        $_SESSION['login_user'] = $username;
        header("Location: welcome.php");
    }
    $stmt->close();
}