2016-04-14 2 views
0

, поэтому я пытаюсь отобразить несколько результатов из базы данных при поиске запроса, запрос передается из окна поиска на другой странице.отображает несколько результатов из запроса sql

У меня есть отображение одного результата, но это все, что он покажет. Мне нужно, чтобы отобразить все результаты, релевантные поисковому запросу.

код PHP ниже

<meta charset="UTF-8"> 
<?php 
    $mysqli = new mysqli('localhost', 'scott', 'tiger','courses'); 
    if ($mysqli->connect_errno) 
    { 
     die('Database connection failed'); 
    } 
    //$m->set_charset('utf8'); 
    $search_sql = " 
    SELECT title, summary, id 
    FROM course 
    WHERE title LIKE '%".$_POST['searchBar']."%'"; 
    $result = $mysqli->query($search_sql) or die($mysqli->error); 
    $search_result = $result->fetch_assoc(); 
?> 
<!doctype html> 
<head> 
    <meta charset="utf-8"> 
    <h1>Search Results</h1> 
</head> 
<body> 
    <h3><?= $search_result['title'] ?></h1> 
    <p><?= $search_result['summary'] ?></p> 
</body> 

и код для бара поиска

<!doctype html> 
<html> 
<Head> 
    <meta charset = "utf-8"> 
    <title>Search</title> 
</head> 
<body> 
    <h2>Search</h2> 
    <form name="search" method="post" action="SearchResultsPage.php"> 
     <input name="searchBar" type="text" size="40" maxlength="60" /> 
     <input type="submit" name="Submitsearch" value="Search" /> 
    </form> 
    </body> 

Кто-нибудь есть какие-либо предложения?

Заранее спасибо;

+0

Вам нужно отображать только одну запись или результат идеального поиска? – RJParikh

+0

Вам нужно будет пройти через набор результатов. См. Пример # 1 на странице руководства PHP о fetch_assoc()] (http://php.net/manual/en/mysqli-result.fetch-assoc.php). Также читайте о «подготовленных заявлениях». –

+0

Просто прочтите примеры в [документации] (http://php.net/manual/en/mysqli-result.fetch-assoc.php). –

ответ

1

Вам нужно будет поместить его в цикл while, чтобы показать несколько результатов, функция выборки, которую вы используете, будет извлекать только одну строку, если вы поместите ее в цикл, который вы можете сохранить, пока не будет ничего, чтобы извлечь :

//$m->set_charset('utf8'); 
$search_sql = " 
SELECT title, summary, id 
FROM course 
WHERE title LIKE '%".$_POST['searchBar']."%'"; 
$result = $mysqli->query($search_sql) or die($mysqli->error); 
?> 
<!doctype html> 
<head> 
    <meta charset="utf-8"> 
    <h1>Search Results</h1> 
</head> 
<body> 
    <?PHP while($search_result = $result->fetch_assoc()) { ?> 
    <h3><?= $search_result['title'] ?></h1> 
    <p><?= $search_result['summary'] ?></p> 
    <?PHP } ?> 
</body> 

PS ваш код уязвим для SQL-инъекции, вы должны прочитать о подготовленных операциях More Info on that

+0

Это именно то, что я искал, я также посмотрю на подготовленные заявления, спасибо! – bdg

+0

Без проблем, рад помочь. Если у вас больше вопросов об этом, не задавайте вопросов, если нет, не забудьте принять ответ, чтобы он не оставался открытым :) Подготовленные заявления могут казаться сложными сначала, но это не так уж плохо, и это делает защищает вас от SQL-инъекций ^^ удачи в вашем проекте! – Jester

+0

Без проблем я буду, если я натолкнулся на все, о чем я не уверен, еще раз спасибо – bdg

0

Вы можете перебирать результаты запроса с помощью цикла while. Для завершения примера я добавил необходимую очистку данных.

<?php 

// function to clean post data 
function cleanPost(&$value) { 

    if (is_array($value)) { 
     foreach ($value as $k => $v) { 
      $value[$k] = cleanPost($v);    
     } 
     return $value; 
    } 
    else { 
     $value = mysql_real_escape_string($value); 
     return trim(htmlentities(strip_tags($value))); 
    } 
} 

// search function 
function search() { 

    // check if post data is set 
    if (isset($_POST['searchBar'])) { 

     // make link with db 
     $link = mysqli_connect('localhost', 'scott', 'tiger','courses'); 
     if (!$link)   
      return false; 
     } 

     // clean your post data 
     $cleanPostData = cleanPost($_POST); 

     // query 
     $sql = "SELECT title, summary, id FROM course WHERE title LIKE '%".$cleanPostData['searchBar']."%'"; 
     $result = mysqli_query($link, $sql); 

     // iterate over results 
     if (isset($result) && mysql_num_rows($result) > 0) { 
      while ($row = mysql_fetch_assoc($result)) { 
       // here is your data 
       echo $row['title'] . "< br/>"; 
       echo $row['summary'] . "< br/>"; 
       echo $row['id'] . "< br/>"; 
      } 
     }  
    } 
} 

// call search function 
search(); 

?> 
+0

Если я могу спросить, ты изменил меня? если да, то объясните? если не, чем nevermind – Jester

+0

, вы также смешиваете функции mysql и mysqli, что даст проблемы. – Jester

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