PHP登录脚本无法读取数据库数据,邮箱校验始终失败求助
解决登录脚本中邮箱存在检查失败的问题
让我帮你排查下这个问题,看起来你的登录脚本里有几个关键错误导致了始终触发“邮箱不存在”的跳转,下面逐一分析并给出修正方案:
1. SQL语句中的表名引用错误
你的查询语句里用单引号包裹了表名'USERS',但在MySQL中,表名和列名的正确引用方式是使用反引号`(无特殊字符时也可以省略),单引号仅用于包裹字符串值。这个错误会直接导致SQL查询执行失败,进而mysqli_num_rows($emailresult)返回0,触发邮箱不存在的跳转逻辑。
修正后的SQL语句:
$sql = "SELECT * FROM `USERS` WHERE EMAIL = '$useremail';";
2. 未检查SQL查询是否执行成功
你直接调用mysqli_num_rows处理查询结果,但如果SQL语句报错(比如上面的表名错误),$emailresult会返回false,此时mysqli_num_rows会返回0,但本质是查询失败而非无匹配数据。建议在执行查询后立即添加错误检查:
$emailresult = mysqli_query($connection, $sql); // 检查查询是否成功 if (!$emailresult) { die("SQL查询错误: " . mysqli_error($connection)); } $emailresultcheck = mysqli_num_rows($emailresult);
3. 数据库连接文件的语法错误
你的connect.php中die的用法存在问题,echo语句不会被执行(因为die会直接终止脚本),且错误信息拼接逻辑错误,修正后的连接文件如下:
<?php $connection = mysqli_connect("localhost", "root", ""); if (!$connection) { die("Failed to connect database: " . mysqli_error($connection)); } $dbselect = mysqli_select_db($connection, "dhctest"); if (!$dbselect) { die("Failed to Select database: " . mysqli_error($connection)); } ?>
这样如果连接或选库失败,会直接输出明确的错误信息,帮助你快速定位问题。
4. POST数据检查的运算符错误
你使用了位运算符&来判断POST数据是否存在且非空,这是错误的,应该使用逻辑与运算符&&:
if (isset($_POST) && !empty($_POST)) {
5. Session赋值的变量未定义
在登录成功的逻辑中,你尝试将未定义的$email赋值给Session,应该改为已定义的$useremail或数据库查询到的$row['EMAIL']:
$_SESSION['email'] = $useremail; // 或者 $_SESSION['email'] = $row['EMAIL'];
额外调试建议
为了更方便排查问题,建议在submit2.php开头开启PHP错误提示:
error_reporting(E_ALL); ini_set('display_errors', 1); session_start(); require_once('connect.php');
按照以上步骤修正后,应该就能解决邮箱存在检查失败的问题了。
内容的提问来源于stack exchange,提问作者Ashley Nesh
相关产品推荐
相关产品推荐

