Я новичок в 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'); } ?>
в<?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>
если я правильно понял ваш код, проблема здесь:
$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 ){
надеюсь, что это поможет 🙂