2016-07-13 3 views
0

У меня есть поиск для поиска нужного предмета. Я могу отобразить соответствующий результат, я хочу, чтобы результат отображался, но пользователь может только перейти к ссылке, если он войдет в систему, иначе отобразится окно сообщения «Вы должны войти, чтобы иметь возможность перейти на другую страницу». Проблема здесь в том, что я не могу показать сообщение об ошибке вообще. Я хочу, чтобы отобразить результат, даже если пользователь не или регистрируется. Только что направляет его в другое сообщение об ошибке страницы дисплея, и он должен войти в систему или он не может быть направленПереадресовать пользователя только после входа в систему

<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 
    } 
} 
} 
?> 
+1

** ПРЕДУПРЕЖДЕНИЕ ** При использовании '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

+1

Удалить '$ _SESSION ['login'] = true;' из find.php, эта переменная должна быть установлена ​​с вашей страницы входа. – mulquin

ответ

0

Первый session_start(); Шоул быть первой командой Second

$_SESSION['login'] = true; 

наборы $ _SESSION [ 'Войти'] Аллуэй к истинным, так что

if(!$_SESSION['login']){ 

никогда не произойдет.

+0

'session_start()' не обязательно должна быть первой вызываемой функцией, ее просто нужно вызывать перед любым «выводом» на экран ... – DarkBee

+0

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

+0

Я знаю, это скорее «должно быть» как «возможно, должно быть», чтобы избежать проблем. –

0

Да потому, что вы установили $_SESSION['login'] = true;
поэтому проверка if (!$_SESSION['login']){ никогда не будет правдой.

Вы всегда получаете результат;

//$_SESSION['login'] = true; 

При установке Ваш Логин пользователя по $_SESSION['login'] = true;, но не непосредственно перед if (!$_SESSION['login']){ линии

+0

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

Смежные вопросы