Php filter voor catalogus

Status
Niet open voor verdere reacties.

kritinet

Gebruiker
Lid geworden
25 nov 2007
Berichten
118
Ik ben een nieuwe website aan het bouwen met een catalogus.
http://www.estero-travel.com/nl/bestemmingen/index.php
Met dank aan Robbinski werkt het sorteren al, maar ik zoek nu ook nog een script om te filteren.
Zoals jullie aan de linker kant kunnen zien heb ik de "Filterlinks" wel al gemaakt zoals
http://www.estero-travel.com/nl/bestemmingen/index.php?streek=Kreta . Alleen met het script heb ik een beetje moeite. zo ziet een stukje van mijn script eruit. Kan me iemand vertellen hoe ik het " filter-script" ertussen zet ?

PHP:
mysql_select_db($database_db, $db);
$sort_by = "";
    if(isset($_GET['sort'])){
        $sort = $_GET['sort'];
        if($sort == "price_from" or $sort == "name" or $sort == "village" or $sort == "streek" or $sort == "country"){
            $sort_by = " ORDER BY `".$sort."`";
        }
    }
	
    $query_accos = "SELECT * FROM `accos` ".$sort_by;
 
PHP:
mysql_select_db($database_db, $db);
$sort_by = "";
    if(isset($_GET['sort'])){
        $sort = $_GET['sort'];
        if($sort == "price_from" or $sort == "name" or $sort == "village" or $sort == "streek" or $sort == "country"){
            $sort_by = " ORDER BY `".$sort."`";
        }
    }
    
$filter_by = "";
if(isset($_GET['streek'])){
            $sort_by = " WHERE streek `".$_GET[ 'streek' ]."`"; // op deze regel moet je streek vervangen door het veld waar je op wilt filteren
        }
    }

    $query_accos = "SELECT * FROM `accos` ".$sort_by;
 
Dank je wel Erik , maar zo werkt de code helaas niet ...:(

volgens mij is in jouw code op line 14 een } te veel, en op line 12 moet het $filter_by zijn i.p.v. $sort_by , en mist er niet iets op line 16 ? ik bedoel $filter_by of zo :confused: ?

De code staat nu zo maar hij filtert dus niet:

PHP:
mysql_select_db($database_db, $db);
$sort_by = "";
    if(isset($_GET['sort'])){
        $sort = $_GET['sort'];
        if($sort == "price_from" or $sort == "name" or $sort == "village" or $sort == "streek" or $sort == "country"){
            $sort_by = " ORDER BY `".$sort."`";
        }
    }
    
$filter_by = "";
if(isset($_GET['streek'])){
            $filter_by = " WHERE streek `".$_GET[ 'streek' ]."`"; 
        }
     
    $query_accos = "SELECT * FROM `accos` ".$sort_by;
 
Je hebt gelijk, dit was wel aardig slordig.

PHP:
mysql_select_db($database_db, $db);
$sort_by = "";
    if(isset($_GET['sort'])){
        $sort = $_GET['sort'];
        if($sort == "price_from" or $sort == "name" or $sort == "village" or $sort == "streek" or $sort == "country"){
            $sort_by = " ORDER BY `".$sort."`";
        }
    }
    
$filter_by = "";
if(isset($_GET['streek'])){
            $filter_by = " WHERE streek '".$_GET[ 'streek' ]."'"; 
        }
     
    $query_accos = "SELECT * FROM `accos` " . $filter_by . $sort_by;
 
Ik heb het script nu precies zo geplaatst,maar nu krijg ik volgende error

Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Santorini' LIMIT 0, 5' at line 1
de link ziet er als volgt uit <a href="index.php?streek=Santorini">Santorini</a>
Wat doe ik verkeerd ?
 
Er moest nog een spatie achter de filter_by. Ik denk dat dat het probleem is.

PHP:
$filter_by = " WHERE streek = '".$_GET[ 'streek' ]."' ";

EDIT: en een = - teken lijkt me ook wel handig (what was I thinking :rolleyes: )
 
helaas ligt het daar niet aan !:confused::mad:

dit is het totale script van die pagina
PHP:
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }
 
  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
 
  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
 
$currentPage = $_SERVER["PHP_SELF"];
 
 
mysql_select_db($database_db, $db);
$query_news2 = "SELECT * FROM newsticker";
$news2 = mysql_query($query_news2, $db) or die(mysql_error());
$row_news2 = mysql_fetch_assoc($news2);
$totalRows_news2 = mysql_num_rows($news2);
 
mysql_select_db($database_db, $db);
$query_offer = "SELECT * FROM aanbiedingen";
$offer = mysql_query($query_offer, $db) or die(mysql_error());
$row_offer = mysql_fetch_assoc($offer);
$totalRows_offer = mysql_num_rows($offer);
 
$maxRows_accos = 5;
$pageNum_accos = 0;
if (isset($_GET['pageNum_accos'])) {
  $pageNum_accos = $_GET['pageNum_accos'];
}
$startRow_accos = $pageNum_accos * $maxRows_accos;
 
mysql_select_db($database_db, $db);
$sort_by = "";
    if(isset($_GET['sort'])){
        $sort = $_GET['sort'];
        if($sort == "price_from" or $sort == "name" or $sort == "village" or $sort == "streek" or $sort == "country"){
            $sort_by = " ORDER BY `".$sort."`";
        }
    }
    
$filter_by = "";
if(isset($_GET['streek'])){
            $filter_by = " WHERE streek '".$_GET[ 'streek' ]."' "; 
        }
     
    $query_accos = "SELECT * FROM `accos` " . $filter_by . $sort_by;
$query_limit_accos = sprintf("%s LIMIT %d, %d", $query_accos, $startRow_accos, $maxRows_accos);
$accos = mysql_query($query_limit_accos, $db) or die(mysql_error());
$row_accos = mysql_fetch_assoc($accos);
 
 
if (isset($_GET['totalRows_accos'])) {
  $totalRows_accos = $_GET['totalRows_accos'];
} else {
  $all_accos = mysql_query($query_accos);
  $totalRows_accos = mysql_num_rows($all_accos);
}
$totalPages_accos = ceil($totalRows_accos/$maxRows_accos)-1;
 
$queryString_accos = "";
if (!empty($_SERVER['QUERY_STRING'])) {
  $params = explode("&", $_SERVER['QUERY_STRING']);
  $newParams = array();
  foreach ($params as $param) {
    if (stristr($param, "pageNum_accos") == false && 
        stristr($param, "totalRows_accos") == false) {
      array_push($newParams, $param);
    }
  }
  if (count($newParams) != 0) {
    $queryString_accos = "&" . htmlentities(implode("&", $newParams));
  }
}
$queryString_accos = sprintf("&totalRows_accos=%d%s", $totalRows_accos, $queryString_accos);
?>
 
Dank je wel ! :thumb: Dat werkt nu ! Alleen ik had gedacht dat het anders filtert. dus mijn opzet was niet te filteren op streek of type accommodatie of prijscategorie maar,... ik wilde graag filteren dat de bezoeker eerst filtert op bv. land, dan verder op streek en dan op type accommodatie, dus dat de selectie steeds kleiner word.
en nadat ik bv gefiltert heb op streek werkt het sorteren niet meer, dan gaat die weer alles laten zien....:mad:
het script ziet er als volgt uit. Kan me iemand ermee helpen ??

PHP:
mysql_select_db($database_db, $db);
$sort_by = "";
    if(isset($_GET['sort'])){
        $sort = $_GET['sort'];
        if($sort == "price_from" or $sort == "name" or $sort == "village" or $sort == "streek" or $sort == "country"){
            $sort_by = " ORDER BY `".$sort."`";
        }
    }
    
$filter_by = "";
if(isset($_GET['streek'])){
            $filter_by = " WHERE streek = '".$_GET[ 'streek' ]."' "; }
if(isset($_GET['type'])){
            $filter_by = " WHERE type = '".$_GET[ 'type' ]."' "; }
if(isset($_GET['country'])){
            $filter_by = " WHERE country = '".$_GET[ 'country' ]."' "; }
if(isset($_GET['cat'])){
            $filter_by = " WHERE cat = '".$_GET[ 'cat' ]."' "; }
			
			
    $query_accos = "SELECT * FROM `accos` " . $filter_by . $sort_by;
 
Je zult de sorteer parameter wel weer aan de link mee moeten geven hè?

Dus je krijgt iets als:

<a href="?sort=price_from&streek=Kreta">Kreta</a>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan