我确认密码/用户名正确后,我有一组非常简单的elseif语句来重定向用户使用标题。它可以在localhost和所有桌面浏览器上完美地工作。 (如果toms密码正确/其他正确密码转到指定页面,tom会进入管理页面)
但是,在移动移动设备上运行时,它会跳到else语句。 (如果汤姆斯密码正确/其他正确的密码转到主页而不是他们被分配的页面,汤姆会转到主页(错误页面)
我尝试将所有语句更改为if而不是elseif(如另一个堆栈溢出问题中所述)
警告:我意识到这不安全,并打算包含准备好的语句/密码哈希以确保安全性。但是,在我继续之前,我需要弄明白这一点。
我花了好几个小时试图找出原因并尝试了很多变化。我希望这是一件我看不到的简单事。
我是使用PHP的新手,所以如果这看起来非常明显,请保持温和。我已经花了很多时间试图通过这个网站和其他人来解决这个问题,而且我也在努力学习,因为我一直在努力学习。
提前致谢.....
<?php
session_start();
if (isset($_POST['submit'])) {
include_once 'dbh.inc.php';
$name = mysqli_real_escape_string($conn, $_POST['name']);
$pwd = mysqli_real_escape_string($conn, $_POST['pwd']);
//error handlers
//check for empty fields
if (empty($name) || empty($pwd) ){
header("Location: ../index.php?entry=empty");
exit();
} else {
// check if input characters are valid
if (!preg_match("/^[a-zA-Z]*$/", $name) || !preg_match("/^[a-zA-Z]*$/", $pwd)) {
header("Location: ../index.php?entry=invalid-entry");
exit();
} else {
$sql = "SELECT * FROM users WHERE user_name='$name' AND user_pwd='$pwd'";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if ($resultCheck < 1) {
header("Location: ../index.php?login=error");
exit();
} else {
if ($row = mysqli_fetch_assoc($result)) {
$_SESSION['u_name'] = $row['user_name'];
$_SESSION['u_pwd'] = $row['user_pwd'];
if ($name == 'tom') {
header("Location: ../admin.php?login=success");
exit;
} elseif ($name == 'dick') {
header("Location: ../page_one.php?login=success");
exit;
} elseif ($name == 'harry') {
header("Location: ../page_two.php?login=success");
exit;
} elseif ($name == 'joe') {
header("Location: ../page_three.php?login=success");
exit;
} elseif ($name == 'bloggs') {
header("Location: ../page_four.php?login=success");
exit;
} else {
header("Location: ../HOME.php?login=success");
exit;
}
}
}
}
}
} else {
header("Location: ../index.php");
exit();
}
答案 0 :(得分:2)
我认为这与移动浏览器没有任何关系,因为PHP脚本是在服务器上执行的。
另一方面,当您在大多数移动设备上键入内容时,默认情况下第一个字母为大写,并且您的检查区分大小写。你确定你在手机上写'汤姆'而不是'汤姆'吗?