我知道我的代码很糟糕,但我不认为这真的是错的吗?
设法找出如何根据登录/注册表单给出的级别将用户重定向到不同的页面,并且它在我的计算机本地运行良好。没有检测到任何错误或错误,并且通过手动测试似乎没问题。
然后,我将整个登录/注册程序上传到一个免费托管网站(000webhost)上,代码基本相同,但验证过程的结果却截然不同:; 。
具体来说,错误是:
Warning: Undefined array key "level" in /storage/ssd1/382/21909382/public_html/validation.php on line 15
Warning: Undefined array key "admin" in /storage/ssd1/382/21909382/public_html/validation.php on line 27
Warning: Cannot modify header information - headers already sent by (output started at /storage/ssd1/382/21909382/public_html/validation.php:15) in /storage/ssd1/382/21909382/public_html/validation.php on line 28
有问题的行是:
Line 15: $level = $_POST['level'];
Line 27: $_SESSION["admin"];
Line 28: header('location:Admin Page.php');
这是出现错误的完整文件:
<?php
session_start();
$con = mysqli_connect('localhost','id21909382_biyo','!Biyo123');
mysqli_select_db($con, 'id21909382_access_levels');
if(isset($_POST['submit'])){
$name = $_POST['user'];
$pass = $_POST['password'];
$level = $_POST['level'];
echo $value ?? '';
$select = " select * from usertable where name = '$name' && password = '$pass'";
$result = mysqli_query($con, $select);
if (mysqli_num_rows($result) > 0){
$row = mysqli_fetch_array($result);
if($row['level'] == 'admin'){
$_SESSION["admin"];
header('location:Admin Page.php');
}elseif($row['level'] == 'user'){
$_SESSION["user"];
header('location:User Page.php');
}
}else{
header('location:index.php');
}
}
?>
已经很奇怪的是,尽管两者相同,但结果却截然不同(它们之间唯一不同的是 $con = mysqli_connect('localhost','id21909382_biyo','!Biyo123');),因为 000webhost 有不同的phpmyadmin 的凭据。更糟糕的是,所有错误行都有类似的无错误行:第 27 行的 $_SESSION["admin"];类似于 $_SESSION["user"];例如,就在几行之后。大部分代码也是从我的程序中的注册文件复制粘贴的,但没有问题。
我到底做错了什么导致了这种差异?
问题最终自行解决。随机尝试再次登录,它自发地起作用了。