我尝试做的是提交此表单时。它检查匹配用户名的数据库中的firstname字段是否为空。如果为空,则应将用户重定向到某个位置,如果它不为空,则将用户重定向到其他位置。以下是我的代码,不幸的是,它不起作用。
<?php
include_once 'db_connect.php';
include_once 'functions.php';
$user = $_SESSION['username'];
sec_session_start(); // Our custom secure way of starting a PHP session.
if (isset($_POST['email'], $_POST['p'])) {
$email = $_POST['email'];
$password = $_POST['p']; // The hashed password.
if (login($email, $password, $mysqli) == true) {
$server = "localhost";
$user = "";
$pass = "";
$db = "";
$mysqli = new Mysqli($server, $user, $pass, $db) or mysqli_error($mysqli);
$firstname = $mysqli->query("SELECT firstname FROM members WHERE username = '$user'")->fetch_object()->firstname;
if(empty($firstname)) {
// Login success
header('Location: ../updateinfo.php');
} else {
header('Location: ../services.php');
}
} else {
// Login failed
header('Location: ../index.php?error=1');
}
} else {
// The correct POST variables were not sent to this page.
echo 'Invalid Request';
}
知道我哪里出错了吗?
答案 0 :(得分:1)
您的查询永远找不到任何内容,因为您设置了:
$user = "";
在您执行查询之前。
"SELECT firstname FROM members WHERE username = '$user'"
提到Barman时,这很可能是因为$user
使用相同的$_SESSION['username']
变量和数据库用户名。
将其中一个更改为其他内容。
您还尝试在启动会话之前获取会话变量。你必须先开始会议。
// Switch the order of these two.
$user = $_SESSION['username'];
sec_session_start(); // Our custom secure way of starting a PHP session.
答案 1 :(得分:0)
从我所看到的,在这个例子中,$ firstname是查询的结果(查询的快照结果)。如果查询返回零行,isEmpty($ firstname)将为空,这意味着找不到用户。
您需要检查它返回的行的结果,该行只有一列(或字段)。如果该字段为空,则可以重定向到updateinfo.php。
示例:
if(empty($firstname)) {
// user not found / no records returned
} else {
//fetch first row of returned data set
//check if first name is empty
// if empty:
header('Location: ../updateinfo.php');
//else
header('Location: ../services.php');
}
您必须原谅非特定代码。我习惯使用mysql,而不是mysqli。 :)