У меня есть поиск для поиска нужного предмета. Я могу отобразить соответствующий результат, я хочу, чтобы результат отображался, но пользователь может только перейти к ссылке, если он войдет в систему, иначе отобразится окно сообщения «Вы должны войти, чтобы иметь возможность перейти на другую страницу». Проблема здесь в том, что я не могу показать сообщение об ошибке вообще. Я хочу, чтобы отобразить результат, даже если пользователь не или регистрируется. Только что направляет его в другое сообщение об ошибке страницы дисплея, и он должен войти в систему или он не может быть направленПереадресовать пользователя только после входа в систему
<form class="search">
<div class="form-group input">
<div class="icon-addon">
<input type="text" name="type" class="st-search" id="search" placeholder="Search" autocomplete="off" >
<label for="email" class="glyphicon glyphicon-search" rel="tooltip" title="email"></label>
</div>
<h4 id="results-text">Showing: <b id="search-string">Output</b></h4>
<ul id="results"></ul>
</div>
</form>
find.php
<?php
$dbhost = "hostname";
$dbname = "databasename";
$dbuser = "root";
$dbpass = "";
global $task_db;
$task_db = new mysqli();
$task_db->connect($dbhost, $dbuser, $dbpass, $dbname);
$task_db->set_charset("utf8");
if ($task_db->connect_errno) {
printf("You can't connect: %s\n", $task_db->connect_error);
exit();
}
session_start();
$_SESSION['login'] = true;
// If user is not logged in
if(!$_SESSION['login']){
$message = 'You are not logged in';
echo $message;
die;
}
//if user is logged in, user can be redirected to the link. Something is not right here
else{
$html = '';
$html .= '<li class="result">';
$html .= '<a target="_blank" href="url">';
$html .= '<h3>name</h3>';
$html .= '</a>';
$html .= '</li>';
$search = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']);
$search = $task_db->real_escape_string($search);
if (strlen($search) >= 1 && $search !== ' ') {
$query = 'SELECT * FROM tablename WHERE columnname LIKE "%'.$search_string.'%"';
$result = $task_db->query($query) or trigger_error($task_db->error."[$query]");
while($results = $result->fetch_array()) {
$result_array[] = $results;
}
if (isset($result_array)) {
foreach ($result_array as $result) {
$name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search."</b>", $result['subject_Name']);
//display url
$url = 'https://www.google.com/'.urlencode($result['subject_Name']).'&lang=en';
$output = str_replace('name', $name, $html);
$output = str_replace('url', $url, $output);
echo($output);
}
}else{
// No Results found
}
}
}
?>
** ПРЕДУПРЕЖДЕНИЕ ** При использовании 'mysqli' вы должны использовать [параметризованных запросов] (HTTP: // PHP. net/manual/en/mysqli.quickstart.prepared-statements.php) и ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в Ваш запрос. ** НЕ ПРИНИМАЙТЕ ** использовать ручное экранирование и интерполяцию строк или конкатенацию, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/), если вы когда-нибудь забудете что-то избежать. – tadman
Удалить '$ _SESSION ['login'] = true;' из find.php, эта переменная должна быть установлена с вашей страницы входа. – mulquin