2016-07-13 13 views
0

必要な件名を検索するための検索入力があります。私は適切な結果を表示することができますが、私は結果を表示したいが、ユーザーはログインするとリンクに行くことができ、そうでなければメッセージボックスを表示する "別のページに行くためにログインする必要がある"ここの問題は、私はエラーメッセージをまったく表示していないようです。ユーザーではありませんか。ログインしている場合でも、私は結果を表示する別のページ表示エラーメッセージに彼を向けると、彼はログインする必要がありますか、彼はログイン後にユーザーをリダイレクト

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 
    } 
} 
} 
?> 
<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> 
を向けられる傾けるだけであること
+1

$_SESSION['login'] = true;を設定しなく

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

** WARNING **:// PHP:あなたは、[パラメータ化クエリ](HTTPを使用する必要がありますmysqli' '使用。 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

find.phpから '$ _SESSION ['login'] = true;'を削除すると、この変数はログインページから設定する必要があります。 – mulquin

答えて

0

最初にsession_start();

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

は決して起こらないように、trueに最初のコマンド セカンド

$_SESSION['login'] = true; 

セット$ _SESSION [ 'ログイン'] allwayことshoul。

+0

'session_start()'は最初に呼び出される関数である必要はなく、画面に出力する前に呼び出す必要があります... – DarkBee

+0

しかし、ユーザがログインしていなければ、結果。ちょうど私は別のページにリンクするためにログインするユーザーが必要です。 –

+0

私が知っているのは、問題を避けるためには2つの "必要がある"ということです。 –

0

はい、$_SESSION['login'] = true;
と設定されているため、チェックif (!$_SESSION['login']){は決してtrueになりません。

あなたは常に結果を得ます。ユーザーログインがちょうどif (!$_SESSION['login']){ライン

+0

しかし、もしユーザーがログインしていなくても結果を表示したいので、どのようにif elseステートメントを置くべきですか?彼は別のページにエラーメッセージを表示し、ログインする必要があります –

関連する問題