Jump to content

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";

?> 

 

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.