2015-11-06 3 views
1

Я пытаюсь сделать панель поиска на своем веб-сайте, которая будет запрашивать базу данных mysql и возвращать результаты в модной форме. Поиск будет использоваться для поиска имен. Например, пользователь может ввести «John Doe», и любая информация о John Doe будет возвращена. К сожалению, всякий раз, когда я нажимаю кнопку «Отправить», а мой сайт переходит на «search.php», страница полностью пуста. Я проверил свое подключение к базе данных и знаю, что он работает. Что-то не так с моим кодом, что абсолютно ничего не появляется? Он даже не возвращает пользователя обратно index.html.Запрос и отображение результатов поиска mysql

У меня есть строка поиска на моем index.html следующим образом:

 <form id="navsearch" class="form-group" role="search" action="search.php" method="post"> 
      <div class="input-group" display="inline"> 
       <input name="search" type="text" value="Search" class="form-control" placeholder="Search"> 
       <span class="input-group-btn"> 
        <button class="btn btn-default btn" name="submit" class="btn btn-lg" type="submit"> 
         <span class="glyphicon glyphicon-search" name="submit"></span> 
        </button>  
      </div> 
     </form> 

Вот PHP на 'search.php':

<?php 

//make connection to database 

    $connection = mysqli_connect('xxx.xxxx', 'root', 'hello', 'awstutorial', 3306); 

$search_word = ''; 
if (isset($_POST['submit'])) { 
    if (!empty($_POST['search'])) { 
    $search_word = $_POST['search']; 
    $search = mysqli_real_escape_string($connection,  $_POST['search']); 

    $query = "SELECT * FROM data WHERE name LIKE '%$search%' "; 
    $search_query = mysqli_query($connection, $query); 

    // START RESULTS 

    if ($result = mysqli_query($connection, $query)) { 
     $to_display = "<div>"; 


     while ($row = mysqli_fetch_array($result)) { 
      if ((substr($row['file'], -3) == 'jpg') || (substr($row['file'], -3) == 'JPG') || (substr($row['file'], -3) == 'PNG') || (substr($row['file'], -3) == 'png') || (substr($row['file'], -3) == 'GIF') || (substr($row['file'], -3) == 'gif')) 
       $img_url = "uploads/" . $row['file']; 
      else { 
       if ((strtolower(substr($row['file'], -3) == 'png')) || (strtolower(substr($row['file'], -3) == 'doc')) || (strtolower(substr($row['file'], -3) == 'docx'))) 
        $img_url = "uploads/pdf_logo.png"; 
       else 
        $img_url = "uploads/no_doc.png"; 
      } 
      $to_display .= "<a href='story.php?id=".$row['id']."' class='col-md-3 asdivs portfolio-box fancybox fancybox.iframe'><img alt='' class='img-responsive' src='" . $img_url . "'><div class='portfolio-box-caption'> 
          <div class='portfolio-box-caption-content'> 
           <div class='project-category text-faded'> 
            Read 
           </div> 
           <div class='project-name'>" 
         . $row['name'] . "'s Story 
           </div> 
          </div> 
         </div>" . $row['name'] . " - " . $row['email'] . "</a>"; 

     } 
    } 

    $to_display .= "</div><div style='clear:both;'></div>"; 
} else { 
    header("Location: index.html"); 
    } 
} 

?> 
+1

Try [позволяет отчеты об ошибках] (http://stackoverflow.com/a/21429652/747654) в вашей установке PHP и запустить скрипт снова – wil93

+2

Вы используете кнопки типа 'submit', который будет по самой своей природе представить форму - которая установлена ​​как 'search.php' - что вы ожидали? Если вам нужна асинхронная, одиночная страница, без перезагрузки для ваших пользователей, вам нужно будет использовать ajax для запуска запроса без перезагрузки страницы. – RamRaider

+0

Удалить 'if (isset ($ _ POST ['submit'])) {...} ' – c4pricorn

ответ

0

Я далеко уверен, что подразумевается под номером fashionable way, когда дело доходит до отправки формы. Насколько я могу думать, это относится к запросу ajax, который отправляет поиск без перезагрузки страницы, и результаты затем каким-то образом отображаются пользователю на той же странице? Поскольку нет никаких доказательств ajax, это трудно сказать.

Как я упоминал в комментарии, ваш запрос относится к $search_query, но итерация через набор записей относится к $result - они должны быть одной и той же переменной, поэтому, вероятно, вы столкнулись с пустым экраном - это и тот факт, что переменная $to_display никогда не отображалась в браузере.

В случае сомнений используйте error_reporting, чтобы выделить, где все может пойти не так.

<?php 
    /* Sessions? */ 
    session_start(); 

    error_reporting(E_ALL); /* Change this for live site! */ 

    if($_SERVER['REQUEST_METHOD']=='POST'){ 

     $conn = mysqli_connect('xxx.xxxx', 'root', 'hello', 'awstutorial', 3306); 
     $exts_img=array('jpg','png','gif','jpeg'); 
     $exts_doc=array('pdf','doc','docx'); 
     $html=array(); /* use this to construct output. More efficient that string concatenation. */ 

     if (isset($_POST['submit'] , $_POST['search']) && !empty($_POST['submit']) && !empty($_POST['search'])) { 

      /* It is better to use prepared statements or pdo */ 
      $search = mysqli_real_escape_string($conn,$_POST['search']); 
      $sql = "SELECT * FROM `data` WHERE `name` LIKE '%".$search."%';"; 
      $results = mysqli_query($conn, $sql); 


      if($results && mysqli_num_rows($results) > 0){ 
       $html[]="<div>"; 

       while($row = mysqli_fetch_object($results)) { 

        $id  = $row->id; 
        $file = $row->file; 
        $email = $row->email; 
        $name = $row->name; 
        $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); 



        if(in_array($ext, $exts_img)) { 
         $img_url = "uploads/" . $file; 
        } else { 
         if(in_array($ext, $exts_doc)) $img_url='uploads/pdf_logo.png'; 
         else $img_url='uploads/no_doc.png'; 
        } 


        $html[]=" 
         <a href='story.php?id=".$id."' class='col-md-3 asdivs portfolio-box fancybox fancybox.iframe'> 
          <img alt='' class='img-responsive' src='" . $img_url . "' /> 
          <div class='portfolio-box-caption'> 
           <div class='portfolio-box-caption-content'> 
            <div class='project-category text-faded'>Read</div> 
            <div class='project-name'>{$name}'s story</div> 
           </div> 
          </div> 
          {$name} - {$email} 
         </a>"; 
       } 
       $html[]="</div><div style='clear:both'></div>"; 
      } 
      /* No results */ 
      $html[]='<h1>Sorry, no results...</h1>'; 

     } else { 
      header("location: index.html"); 
     } 

     /* free resources */ 
     mysqli_free_result($results); 
     mysqli_close($conn); 

     /* output stuff to the browser */ 
     echo implode(PHP_EOL, $html); 
    } 
?> 
Смежные вопросы