使用PHP搜索数据库 - 会话已经开始

时间:2016-01-05 16:58:34

标签: php sql search

我开发了一个简单的搜索页面,但似乎无法让它发挥作用。我遇到了两个问题,我认为这些问题是相互关联的。当我进入搜索表单页面时,错误:

  

注意:未定义的索引:第36行的header.php中的用户记录注意:未定义的索引:admin在第59行的header.php中

使用有效测试数据的搜索表单时,会显示以下错误:

  

注意:会话已经启动 - 忽略第3行header.php中的session_start()注意:未定义的索引:第36行的header.php中的用户记录注意:未定义的索引:admin在第59行的header.php中       mysqli_stmt :: bind_result():绑定变量的数量与第12行的search.php中预准备语句中的字段数不匹配

由于bind_result,我不会发布 header.php ,但是我不确定我是怎么做到这一点的错误。

我尝试从 header.php 中删除session_start(),因此它不会自动包含,但这只会引发此错误:

  

注意:未定义的变量:第36行的header.php中的_SESSION注意:未定义的变量:第59行的header.php中的_SESSION

Searchform.php

<?php

    ob_start();
    error_reporting(E_ALL);

?>

<br><br><br>

<?php

    ini_set('display_errors', -1);
    include 'header.php';
    include 'connection.php';

?>

<br /><br />

<html>
    <header>
        <link rel="stylesheet" type="text/css" href="web.css" />    
        <link rel="stylesheet" type="text/css" href="/web.css" />
    </header>
    <body>
        <center>
            <h2>Search for people</h2>
            <br />

            Please enter the name you wish to search for<br /><br />

            <form method="post" action="search.php" id="searchform">
                <input  type="text" name="name"> 
                <input  type="submit" name="searchsubmit" value="Submit"> 
            </form>

            <br /><br/>

            Or search people by category

        </center>                  
    </body>
</html>

的search.php

<?php

    if(isset($_POST['searchsubmit']))
    {
        include 'searchform.php';
        include 'header.php';

        $name = $_POST['name'];

        if ($stmt = $connection->prepare ("SELECT * FROM users WHERE Username = ?")) 
        {
            $stmt->bind_param('s', $name);
            $stmt->execute();
            $stmt->bind_result($personresult);
            $stmt->fetch();
            print_r($personresult);
        } 
        else
        { 
            echo "<p>Please enter a search query</p>"; 
        } 
    }
    else 
    {
         echo "NOT SET!";
    }

?>

1 个答案:

答案 0 :(得分:2)

在不知道数据库中的列是什么的情况下,我只能对bind_result的错误做出部分响应。

但在此之前,您将遇到会话和标题内容的问题,因为您正在显示所有通知。我建议在请求的页面上启动它,而不是你的包含。因此,在您启动脚本后,请拨打session_start()并在其他任何地方拨打电话。请注意,它必须在任何输出之前。

现在,对于bind_result。错误消息告诉您的是,您从表中选择的不仅仅是一列。也就是说,您可能正在选择useridunamerealname等。但是当您绑定结果时,您只能为其中一个提供空间。这是一个向您展示关系的基本示例,我将略微修改您的选择:

$stmt = $connection->prepare ("SELECT userId, userName, realName FROM users WHERE Username = ?")

然后,当您绑定结果时,您将需要执行以下操作:

$stmt->bind_result($userId, $userName, $realName);

对于您在语句中选择的每个列,您需要一个变量来代表bind_result来电。