我正在尝试调整我的登录系统。系统运行正常。用户输入凭据后,他将被转移到具有相同用户名的文件夹中。现在,我想要调整的是代码不会使用他的用户名将他重定向到文件夹,而是使用与用户名相同的行存储的变量,称为account
。
与数据库的连接在另一页上。
我试图做的事情:
include_once 'db_connect.php';
sec_session_start(); // custom secure way of starting a PHP session.
if (isset($_POST['username'], $_POST['p'])) {
$username = $_POST['username'];
$password = $_POST['p'];
if (login($username, $password, $mysqli) == true) {
$sql = $mysqli->prepare("SELECT id, username, account
FROM members
WHERE username = '$username'
LIMIT 1");
$result=mysql_query($sql);
$rows=mysql_fetch_row($result);
$account=$rows['account'];
echo "<script language='javascript'>";
echo "top.window.location = '../".$account."/index.php';";
echo "<script>";
} else {
// Login failed
header('Location: ../error.php?error=1');
}
}
但这会导致错误:
警告:mysql_query()要求参数1为字符串,第17行/home/etc/etc/etc.php中给出的对象(这是$result
的行)
警告:mysql_fetch_row()期望参数1为资源,在第18行的/home/etc/etc/etc.php中给出null(这是$rows
的行)
$rows=mysql_fetch_assoc($result);
我在这里做错了什么?
答案 0 :(得分:3)
首先,这可能无法解决您的问题,但这本身就是一个全新的问题。你准备好的陈述是完全错误的。这是应该如何:
<?php
if (isset($_POST['username'], $_POST['p'])) {
$username = trim($_POST['username']);
$password = trim($_POST['p']);
if (login($username, $password, $mysqli) == true) {
$sql = $mysqli->prepare("SELECT id, username, account
FROM members
WHERE username = ?");
$sql->bind_param('s', $username);
$sql->execute();
$sql->bind_result($id, $username, $account);
$sql->fetch();
echo "<script language='javascript'>";
echo "top.window.location = '../".$account."/index.php';";
echo "</script>";
$sql->close();
} else {
// Login failed
header('Location: ../error.php?error=1');
}
}
您使用&#34;占位符替换变量&#34;,您不能将变量直接传递到查询中。此外,您在OOP和程序之间切换。以及mysql_
和mysqli_
。