使用数据库中的变量重定向到页面

时间:2014-10-11 23:17:12

标签: php

我正在尝试调整我的登录系统。系统运行正常。用户输入凭据后,他将被转移到具有相同用户名的文件夹中。现在,我想要调整的是代码不会使用他的用户名将他重定向到文件夹,而是使用与用户名相同的行存储的变量,称为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);

也是如此

我在这里做错了什么?

1 个答案:

答案 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_