Поиск по базе данных с помощью PHP - сессия уже началась

1

Я разработал простую страницу поиска, но я не могу заставить ее работать. Я столкнулся с двумя проблемами, которые, я думаю, связаны. Когда я перехожу на страницу формы поиска, ошибка:

Примечание: Неопределенный индекс: userlogged в header.php в строке 36 Примечание: Неопределенный индекс: adminlogged в header.php в строке 59 '

И при использовании формы поиска с использованием достоверных тестовых данных отображаются следующие ошибки:

Примечание: сеанс уже запущен - игнорирование session_start() в header.php в строке 3 Примечание: неопределенный индекс: userlogged в header.php в строке 36 Примечание: неопределенный индекс: adminlogged в header.php в строке 59 mysqli_stmt :: bind_result(): Число переменных связывания не соответствует количеству полей в подготовленном операторе в search.php в строке 12

Я не буду публиковать заголовок.php, как мне кажется, из-за bind_result, однако я не уверен, как я сделал это неправильно.

Я попытался удалить session_start() из header.php, поэтому он не включается автоматически, но это просто вызывает эту ошибку:

Примечание. Неопределенная переменная: _SESSION в header.php в строке 36. Примечание. Неопределенная переменная: _SESSION в header.php в строке 59

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
    Вы должны начать свой сеанс на каждой странице.
  • 2
    Вы не можете иметь никакого вывода до session_start, то есть три перерыва должны идти после включения.
Показать ещё 1 комментарий
Теги:
search

1 ответ

2
Лучший ответ

Не зная, какие столбцы находятся в вашей базе данных, я могу дать лишь частичный ответ на то, что вы делаете неправильно с bind_result.

Но до этого вы столкнетесь с проблемой сессий и заголовков, потому что вы показываете все уведомления. Я бы предложил начать его на запрошенных страницах, а не в ваших предложениях. Поэтому сразу после запуска скрипта вызовите session_start() и не делайте его нигде. Обратите внимание, что он должен идти до выхода.

Теперь для bind_result. Сообщение об ошибке сообщает вам, что вы выбираете больше из своей таблицы, чем только один столбец. т.е. вы можете выбрать userid, uname, realname и т.д. Но когда вы привязываете результат, вы предоставляете только место для одного из них. Итак, базовый пример, чтобы показать вам отношения, я немного изменю ваш выбор:

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

Затем, когда вы привяжете свой результат, вы захотите сделать что-то вроде:

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

Для каждого столбца, который вы выбираете в своем заявлении, вам нужна переменная, чтобы представлять ее в вашем вызове bind_result.

  • 0
    Спасибо, это устраняет ошибку сеанса, однако она по-прежнему отображает Примечание: неопределенный индекс: userlogged в header.php в строке 36 Примечание: неопределенный индекс: adminlogged in, однако вход в учетные записи пользователей и администраторов работает, поэтому я не понимаю, как это неопределенные индексы.
  • 0
    Я просто дважды проверю свой bind_result - спасибо за быстрый ответ
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню