Я разработал простую страницу поиска, но я не могу заставить ее работать. Я столкнулся с двумя проблемами, которые, я думаю, связаны. Когда я перехожу на страницу формы поиска, ошибка:
Примечание: Неопределенный индекс: 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!";
}
?>
Не зная, какие столбцы находятся в вашей базе данных, я могу дать лишь частичный ответ на то, что вы делаете неправильно с 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
.