2015-10-01 5 views
2

Я новичок в php и пытаюсь выполнить функцию поиска по имени и дате, но у меня есть проблема.php данные из базы данных не отображаются после поиска

Моя проблема заключается в том, что функция поиска видит все выполненные строки из поиска, но не показывает их. Я загружаю все данные из базы данных по умолчанию на свою страницу, и я хочу, чтобы, если $_GET['go'] из поиска isset, все данные по умолчанию больше не отображаются, и отображаются только результаты поиска. Теперь он всегда показывает данные по умолчанию. За исключением $_GET['by'] данных нет.

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

Мой код PHP:

<?php 


      ini_set('display_errors',1); 
      ini_set('display_startup_errors',1); 
      error_reporting(-1); 

      //connect to the database 
      $db_host = "localhost"; 
      $db_username = "**"; 
      $db_password = "**"; 
      $db_name = "**"; 

      $db = new PDO('mysql:host=' .$db_host . ';dbname='. $db_name . '',$db_username,$db_password); 


      if(isset($_POST['submit'])){ 
       if(isset($_GET['go'])){ 
        if(preg_match("/^[a-zA-Z]+/", $_POST['search'])){ 
         $zoek=$_POST['search']; 

         var_dump($zoek); //this will display on the screen the content of the variable 

         // query the database table 
         $sql="SELECT v.vacatureID, v.werkgeverID, v.functie, v.omschrijvingKort, v.datum, w.werkgeverID, w.naamBedrijf, w.plaats, w.image FROM vacature AS v JOIN werkgever AS w ON v.werkgeverID = w.werkgeverID WHERE w.naamBedrijf LIKE '%" . $zoek . "%' ORDER BY datum DESC"; 
         // run the query against the mysql query function 
         $result = $db->prepare($sql); 
         $result->execute(); 

         // count number of rows that are effected 
         $rows = $result->fetchAll(); 
         $numrows = count($rows); 
         echo "<p>" .$numrows . " results found for '" . $zoek . "'</p>"; 

         // create while loop and loop through result set 
         while($row = $result->fetch()){ 
           $Functie=$row['functie']; 
           $OmschrijvingKort=$row['omschrijvingKort']; 
           $Datum=$row['datum']; 
           $Bedrijf=$row['naamBedrijf']; 
           $Plaats=$row['plaats']; 
           $Image=$row['image']; 
           $ID=$row['vacatureID']; 

          // truncate 
          if (strlen($Functie) > 20) { 
           // truncate string 
           $stringCut = substr($Functie, 0, 20); 
           // make sure it ends in a word 
           $Functie = substr($stringCut, 0, strrpos($stringCut, ' ')).'...'; 
          } 
          if (strlen($Bedrijf) > 25) { 
           // truncate string 
           $stringCut2 = substr($Bedrijf, 0, 14); 
           // make sure it ends in a word 
           $Bedrijf = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
          } 
          if (strlen($OmschrijvingKort) > 63) { 
           // truncate string 
           $stringCut2 = substr($OmschrijvingKort, 0, 63); 
           // make sure it ends in a word 
           $OmschrijvingKort = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
          } 
          // display the result of the array 
          echo 
          " 
           <div class='vacatureinfo2'> 
            <img class='userimg2' src='../../uploads/userimage/". $Image ."' id='imge'/> 
            <p class='func-br-pl pull-left'>". $Functie ." - ". $Bedrijf ." - ". $Plaats ."</p><p class='dtm pull-right'>". $Datum ."</p> 
            <div class='omschrijvingkort2'> 
             ". $OmschrijvingKort ." 
            </div> 
            <a href='#' class='pull-right'>Meer informatie</a> 
           </div> 
           <hr> 
          "; 
         } 
        } 
        elseif(preg_match("/^[0-9]{4}-[0-9]{2}-[0-9]{2}/", $_POST['searchdate'])){ 
         $zoek=$_POST['searchdate']; 

         var_dump($zoek); //this will display on the screen the content of the variable 

         //-query the database table 
         $sql="SELECT v.vacatureID, v.werkgeverID, v.functie, v.omschrijvingKort, v.datum, w.werkgeverID, w.naamBedrijf, w.plaats, w.image FROM vacature AS v JOIN werkgever AS w ON v.werkgeverID = w.werkgeverID WHERE v.datum LIKE '%" . $zoek ."%' ORDER BY datum DESC"; 
         //-run the query against the mysql query function 
         $result = $db->prepare($sql); 
         $result->execute(); 
         $rows = $result->fetchAll(); 
         $numrows = count($rows); 
         echo "<p>" .$numrows . " results found for '" . $zoek . "'</p>"; 

         //-create while loop and loop through result set 
         while($row = $result->fetch()){ 
           $Functie=$row['functie']; 
           $OmschrijvingKort=$row['omschrijvingKort']; 
           $Datum=$row['datum']; 
           $Bedrijf=$row['naamBedrijf']; 
           $Plaats=$row['plaats']; 
           $Image=$row['image']; 
           $ID=$row['vacatureID']; 

          //-truncate 
          if (strlen($Functie) > 20) { 
           // truncate string 
           $stringCut = substr($Functie, 0, 20); 
           // make sure it ends in a word 
           $Functie = substr($stringCut, 0, strrpos($stringCut, ' ')).'...'; 
          } 
          if (strlen($Bedrijf) > 25) { 
           // truncate string 
           $stringCut2 = substr($Bedrijf, 0, 14); 
           // make sure it ends in a word 
           $Bedrijf = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
          } 
          if (strlen($OmschrijvingKort) > 63) { 
           // truncate string 
           $stringCut2 = substr($OmschrijvingKort, 0, 63); 
           // make sure it ends in a word 
           $OmschrijvingKort = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
          } 
          //-display the result of the array 
          echo 
          " 
           <div class='vacatureinfo2'> 
            <img class='userimg2' src='../../uploads/userimage/". $Image ."' id='imge'/> 
            <p class='func-br-pl pull-left'>". $Functie ." - ". $Bedrijf ." - ". $Plaats ."</p><p class='dtm pull-right'>". $Datum ."</p> 
            <div class='omschrijvingkort2'> 
             ". $OmschrijvingKort ." 
            </div> 
            <a href='#' class='pull-right'>Meer informatie</a> 
           </div> 
           <hr> 
          "; 
         } 
        } 
        else{ 
         echo "<p>Please enter a search query</p>"; 
        } 
       } 
      }//end of search form script     
      if(isset($_GET['by'])){ 
       $letter=$_GET['by']; 

       $sql="SELECT v.vacatureID, v.werkgeverID, v.functie, v.omschrijvingKort, v.datum, w.werkgeverID, w.naamBedrijf, w.plaats, w.image FROM vacature AS v JOIN werkgever AS w ON v.werkgeverID = w.werkgeverID WHERE SUBSTRING(w.naamBedrijf,1,1) LIKE '%" . $letter . "%' ORDER BY datum DESC"; 

       $result = $db->prepare($sql); 
       $result->execute(); 

       $rows = $result->fetchAll(); 
       $numrows = count($rows); 
       echo "<p>" .$numrows . " results found for '" . $letter . "'</p>"; 

       //-create while loop and loop through result set 
       while($row = $result->fetch()){ 
        $Functie=$row['functie']; 
        $OmschrijvingKort=$row['omschrijvingKort']; 
        $Datum=$row['datum']; 
        $Bedrijf=$row['naamBedrijf']; 
        $Plaats=$row['plaats']; 
        $Image=$row['image']; 
        $ID=$row['vacatureID']; 

        //-truncate 
        if (strlen($Functie) > 20) { 
         // truncate string 
         $stringCut = substr($Functie, 0, 20); 
         // make sure it ends in a word 
         $Functie = substr($stringCut, 0, strrpos($stringCut, ' ')).'...'; 
        } 
        if (strlen($Bedrijf) > 25) { 
         // truncate string 
         $stringCut2 = substr($Bedrijf, 0, 14); 
         // make sure it ends in a word 
         $Bedrijf = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
        } 
        if (strlen($OmschrijvingKort) > 63) { 
         // truncate string 
         $stringCut2 = substr($OmschrijvingKort, 0, 63); 
         // make sure it ends in a word 
         $OmschrijvingKort = substr($stringCut2, 0, strrpos($stringCut2, ' ')).'...'; 
        } 

        //-display the result of the array 
        echo 
        " 
         <div class='vacatureinfo2'> 
          <img class='userimg2' src='../../uploads/userimage/". $Image ."' id='imge'/> 
          <p class='func-br-pl pull-left'>". $Functie ." - ". $Bedrijf ." - ". $Plaats ."</p><p class='dtm pull-right'>". $Datum ."</p> 
          <div class='omschrijvingkort2'> 
           ". $OmschrijvingKort ." 
          </div> 
          <a href='#' class='pull-right'>Meer informatie</a> 
         </div> 
         <hr> 
        "; 
       } 
      }//end of our letter search script 
      else{ 
       include('php/vacatureoverzichtphp.php'); 
      } 
     ?> 

В include('php/vacatureoverzichtphp.php'); у меня есть код для данных по умолчанию, что показано на этой странице.

HTML код:

<form class="form-inline pull-right" method="post" action="vacatureoverzicht.php?go" id="searchform"> 
      <div class="form-group"> 
       <label>Zoeken op: </label> 
      </div> 
      <div class="form-group"> 
       <label class="sr-only" for="zoekenBedrijf">Bedrijfsnaam of Datum</label> 
       <input type="text" class="form-control" name="search" id="zoekenBedrijf" placeholder="Bedrijfsnaam"> 
       <label> of </label> 
       <input type="text" class="form-control" name="searchdate" id="zoekenDatum" placeholder="Datum"> 
      </div> 
      <button type="submit" name="submit" value="Search" class="btn btn-default">zoeken</button> 
     </form> 
     <br><br><br> 
     <p><a href="vacatureoverzicht.php">Alles</a> | <a href="?by=A">A</a> | <a href="?by=B">B</a> | <a href="?by=C">C</a> | <a href="?by=D">D</a> | <a href="?by=E">E</a> | <a href="?by=F">F</a> 
     | <a href="?by=G">G</a> | <a href="?by=H">H</a> | <a href="?by=I">I</a> | <a href="?by=J">J</a> | <a href="?by=K">K</a> | <a href="?by=L">L</a> 
     | <a href="?by=M">M</a> | <a href="?by=N">N</a> | <a href="?by=O">O</a> | <a href="?by=P">P</a> | <a href="?by=Q">Q</a> | <a href="?by=R">R</a> 
     | <a href="?by=S">S</a> | <a href="?by=T">T</a> | <a href="?by=U">U</a> | <a href="?by=V">V</a> | <a href="?by=W">W</a> | <a href="?by=X">X</a> 
     | <a href="?by=Y">Y</a> | <a href="?by=Z">Z</a></p> 
+0

вы видите ваш очень сначала 'var_dump ($ zoek);' output? – Alex

+0

@Alex Да, он говорит 'string (2)« wo »и из моего подсчета я также получаю правильное количество строк назад« 6 результатов, найденных для «wo», и если я попробую запрос в моей базе данных, если дает все правильные результаты назад. – Marjolein

+1

Вы уязвимы для [sql injection attack] (http://bobby-tables.com) –

ответ

2

если я получил свой код правильно вопрос здесь:

$rows = $result->fetchAll(); 
$numrows = count($rows); 
echo "<p>" .$numrows . " results found for '" . $zoek . "'</p>"; 

// create while loop and loop through result set 
while($row = $result->fetch()){ 

Таким образом, вы сделали fetchAll() первый, а затем вы пытаетесь while($row = $result->fetch()){. но вы не можете получить результат из того же результата.

так что вы должны изменить заголовок цикла для:

foreach($rows as $row){ 

Таким образом, полный фрагмент будет как:

$rows = $result->fetchAll(); 
$numrows = count($rows); 
echo "<p>" .$numrows . " results found for '" . $zoek . "'</p>"; 

// create while loop and loop through result set 
foreach ($rows as $row){ 

надежда, что поможет :-)

+0

альтернативно, '$ numrows = $ result-> num_rows; while ($ row = $ result-> fetch()) ', –

+0

@Alex спасибо, что помогли! Но данные по умолчанию из include все еще отображаются после результатов поиска. Вы знаете, как я могу это исправить? Потому что, если я запустил код $ _GET ['by'], include не отображается ... – Marjolein

+0

Ничего ... Мой код работает отлично! : -DI просто нужно было изменить 'else {include ('php/vacatureoverzichtphp.php');}' to 'if (! Isset ($ _ GET ['go']) &&! Isset ($ _ GET ['by'])) {include ('php/vacatureoverzichtphp.php'); \t} ' – Marjolein

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