Jump to content

Why doesn't this search work?


Cornelia

Recommended Posts

Hi,

a question for you guys: I have a script that search the database for entries typed in a input field. This works well until I enter a date:

dd-mm-yyyy

yyyy-mm-dd

 

Then the search finds no table entries even if there is plenty of them with the date typed in the input field. Here's the code:

 

 

 

 

<?php
error_reporting(E_ALL);

ini_set("display_errors", "1"); 

// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: login.php");
  exit;
}

include "connect.php";

if (empty($_GET['fritext'])) {
  $_GET['fritext'] = '¤%&#°+^*';
}

$fritext = trim($_GET['fritext']);


$fritext = stripslashes($fritext);


if (preg_match("/^\"?(\d{2})-(\d{2})-(\d{4})\"?$/",$fritext)) {
$search = explode("-", $fritext);
$search = "`".$search[2]."-".$search[1]."-".$search[0]."`";

// Hämta från databasen
$sql  = "SELECT COUNT(*) FROM `order_privat` WHERE datum = '$search' OR orderdatum = '$search' order by id DESC";
$result = mysql_query($sql) or die("SQL: $sql <br>".mysql_error());
$antal = mysql_result($result, 0);

$inlaggPerSida = 20; // Välj antal inlägg per sida, minst 1
$antalPagLankar = 5; // Välj max antal visade paginglänkar

// Beräkna antalet sidor
$pageNumbers = ceil($antal/$inlaggPerSida);

// Kontrollera värdet på $page (sidnummer)
if (isset($_GET["page"])){
    $page = $_GET["page"];
} else $page = 1;
if ($page > $pageNumbers) $page = $pageNumbers;
if ($page < 1) $page = 1;

// Beräkna startraden
$start = ($page-1) * $inlaggPerSida;

// Om fler än en sida, skriv ut pagingen
if ($pageNumbers > 1)
    pagingList($page, $pageNumbers, $antalPagLankar, "left");

// Hämta från databasen
$sql  = "SELECT * FROM `order_privat` WHERE datum = '$search' OR orderdatum = '$search' order by id DESC LIMIT $start, $inlaggPerSida";
$result = mysql_query($sql) or die("SQL: $sql <br>".mysql_error());
}





else {




$search = $fritext;

// Hämta från databasen
$sql  = "SELECT COUNT(*) FROM `order_privat` WHERE MATCH (namn1, namn2, gatuadress, postadress, epostadress, annat, utrustning, bokningsnummer) AGAINST ('$search' IN BOOLEAN MODE) order by id DESC";
$result = mysql_query($sql) or die("SQL: $sql <br>".mysql_error());
$antal = mysql_result($result, 0);

$inlaggPerSida = 20; // Välj antal inlägg per sida, minst 1
$antalPagLankar = 5; // Välj max antal visade paginglänkar

// Beräkna antalet sidor
$pageNumbers = ceil($antal/$inlaggPerSida);

// Kontrollera värdet på $page (sidnummer)
if (isset($_GET["page"])){
    $page = $_GET["page"];
} else $page = 1;
if ($page > $pageNumbers) $page = $pageNumbers;
if ($page < 1) $page = 1;

// Beräkna startraden
$start = ($page-1) * $inlaggPerSida;

// Om fler än en sida, skriv ut pagingen
if ($pageNumbers > 1)
    pagingList($page, $pageNumbers, $antalPagLankar, "left");

// Hämta från databasen
$sql  = "SELECT * FROM `order_privat` WHERE MATCH (namn1, namn2, gatuadress, postadress, epostadress, annat, utrustning, bokningsnummer) AGAINST ('$search' IN BOOLEAN MODE) order by id DESC LIMIT $start, $inlaggPerSida";
$result = mysql_query($sql) or die("SQL: $sql <br>".mysql_error());

}



  
/*
  En funktion som ger sidlänkar i anslutning till utskrift från
  textfil eller databas.
  $page är vilken sida som är den aktuella.
  $pageNumbers är antal sidor som utskriften är uppdelad på.
  $numLinks är antal sidlänkar som ska visas.
  $align är antingen 'left' eller 'right'. Pagingen justerad
  höger eller vänster.
  De variabler som finns i querystringen flyttas med
  till nya sidor.
*/
function pagingList($page, $pageNumbers,
                    $numLinks, $align){
  // Hämta globala variabler
  global $_SERVER, $_GET;

  // Hämtar namnet på filen
  $file = $_SERVER['PHP_SELF'];

  // Hämtar QUERY_STRING och tar bort page från den
  $getvar = $_SERVER['QUERY_STRING'];
  $search = "/(^page=d*&?|&page=d*)/i";
  $getvar = preg_replace($search, "", $getvar);
  if ($getvar != "") $getvar = "&".$getvar;

  // Om antalet sidor är större än antalet sidlänkar,
  // beräkna startlänk
  if ($pageNumbers > $numLinks){
     $startLink = $page - floor($numLinks / 2);
     if ($startLink >($pageNumbers - $numLinks + 1)){
        $startLink = $pageNumbers - $numLinks + 1;
     }
  } else $startLink = 1;
  if ($startLink<1) $startLink = 1;

  // Beräkna sista sidlänk
  $stopLink = $startLink + $numLinks - 1;
  if ($stopLink > $pageNumbers) $stopLink = $pageNumbers;

  // skriver pagingen

echo "<div class=\"paging\" style=\"text-align:$align\">\n";

  // Om sidan inte är första sidan,
  // visa som länk till första sidan
  if ($page > 1){
     echo "<a href=\"$file?page=1$getvar\" class=\"paging\" ";
     echo "title=\"Första sidan\">«</a>";
  } else echo "<span class=\"pagingDim\">«</span>";
   
  // Om första sidlänken inte är lika med första sidan visa '...'
  if ($startLink > 1){
     echo " ... ";
  } else echo "";

  // Skriver ut sidlänkarna. Aktuell sida blir inte länk
  for ($i=$startLink; $i<=$stopLink; $i++){
     if ($i != $page){
        echo " <a href=\"$file?page=$i$getvar\" ";
        echo "class=\"paging\">$i</a> ";
     } else {
        echo " <span class=\"pagingDim\">$i</span> ";
     }
     if ($i < $stopLink) echo "";
  }
   
  // Om sista sidlänken inte är lika med sista sidan visa '...'
  if ($stopLink < $pageNumbers){
     echo " ... ";
  } else echo "";
   
  // Om sidan inte är sista sidan,
  // visa som länk till sista sidan
  if ($page < $pageNumbers){
     echo "<a href=\"$file?page=$pageNumbers$getvar\" ";
     echo "class=\"paging\" ";
     echo "title=\"Sista sidan\">»</a>\n";
  } else echo "<span class=\"pagingDim\">»</span>\n";

  // Avsluta utskriften
  echo "</div>";

}
?>

 

 

Do someone know what's wrong?

 

Thanks in advance!

/Cornelia

 

Link to comment
https://forums.phpfreaks.com/topic/68504-why-doesnt-this-search-work/
Share on other sites

you are double defining the var $search.

 

first you define it and assign variables as an array then you are tring to redefine it as a single var.

 

try changing the name of the first one to something like $search_parts

<?php 
//$search = explode("-", $fritext);
$search_parts = explode("-", $fritext);
$search ="{$search_parts[2]}-{$search_parts[1]}-{$search_parts[0]}";

?>

 

also you have ` in the search field instead of ', either way you don't need them in the $search var as its already supplied in your query.

 

try using curly brackets around your var names within double quoted strings. its a good habit to get into.

 

<?php 

$sql  = "SELECT COUNT(*) FROM `order_privat` WHERE datum = '{$search}' OR orderdatum = '{$search}' order by id DESC";

?> 

 

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.