sorteren en filteren

Status
Niet open voor verdere reacties.

kritinet

Gebruiker
Lid geworden
25 nov 2007
Berichten
118
Op mijn pagina http://www.estero-travel.com/nl/Bestemmingen/Griekenland/Kreta/index.php
heb ik een sorteer script en een filter script. Het sorteren werkt prima, maar het filteren niet.
Waar zit de fout ?
hier het filter script
PHP:
$filter = "";

if(isset($_GET['type'])){
            $filter = " WHERE type = '".$_GET[ 'Villa' ]."' "; }
if(isset($_GET['type'])){
            $filter = " WHERE type = '".$_GET[ 'Hotel' ]."' "; }
if(isset($_GET['type'])){
            $filter = " WHERE type = '".$_GET[ 'Appartement' ]."' "; }


            
$query_accos = "SELECT * FROM `accos` " . $filter . $sort_by;
[JS]function filter(target, el){
window.location.href = target + el.value;
}[/JS]
HTML:
<select name="select" onchange="filter('index.php?filter=', this)">
  <option value="" selected="selected">Filter op...</option>
  <option value="Hotel">Hotel</option>
  <option value="Appartement">Appartement</option>
  <option value="Villa">Villa</option>
</select>
 
Voorbeeld : http://crime-ware.nl/Games/nieuws.php?cat=0 klik op zo'n Folder..


PHP:
if($cat == "0"){
$query = mysql_query("SELECT `id` FROM `nieuws1` ORDER BY `id` DESC") or die(mysql_error());
}else{
$query = mysql_query("SELECT `id` FROM `nieuws1` WHERE `type`='{$_GET['type']}' ORDER BY `id` DESC") or die(mysql_error());
}
 
Laatst bewerkt:
Je hebt de $_GET waardes op de verkeerde plaats staan en je bent, als dit alle code is om dit af te handelen, vergeten om een vergelijking toe te voegen aan de if constructie. Tot slot gebruik je $_GET['type'] terwijl het zo te zien $_GET['filter'] zou moeten zijn. Met jouw stijl in gedachte zul je dus iets krijgen als:
PHP:
if (isset($_GET["filter"]) && $_GET["filter"] == "Villa") {
	$filter = " WHERE type = 'Villa'";
}
if (isset($_GET["filter"]) && $_GET["filter"] == "Hotel") {
	$filter = " WHERE type = 'Hotel'";
}
if (isset($_GET["filter"]) && $_GET["filter"] == "Appartement") {
	$filter = " WHERE type = 'Appartement'";
}
 
hoi
Bedankt voor het script. Ik heb het zo ingebouwd maar helaas werkt het nog steeds niet.

je schrijft
...vergeten om een vergelijking toe te voegen aan de if constructie
sorry wat bedoel je er precies mee ? :confused:

behalve de genoemde code heb ik ook nog

PHP:
$query = "SELECT village, COUNT(name) AS total FROM accos WHERE streek ='Kreta' GROUP BY village";
$result = mysql_query ( $query ) or die ( mysql_error () );



$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 == "regio" or $sort == "country"){
            $sort_by = " ORDER BY `".$sort."`";
        }
    }
    $query_accos = "SELECT * FROM accos WHERE streek='Kreta'".$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("&amp;", $_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("&amp;", $newParams));
  }
}
$queryString_accos = sprintf("&amp;totalRows_accos=%d%s", $totalRows_accos, $queryString_accos);


$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."`";
        }
    }
 
Laatst bewerkt:
Welke waarde heeft $query_accos na het aanbrengen van mijn wijziging?

sorry wat bedoel je er precies mee ? :confused:
Je kijkt of $_GET['type'] bestaat, maar de waarde in $_GET['type'] wordt nergens mee vergeleken. Prima voor true/false constructies maar in dit geval stuur je de waarde als string mee in $_GET["filter"]. Je kijkt dus naar de verkeerde variabele en bovendien is de implementatie verkeerd, want als $_GET['type'] zou bestaan, dan zou $filter steeds vervangen worden.
 
type is een reserved SQL keyword, als je een kolom hebt met type erin moet je die overal escapen met backticks ( ` ), maar dat doe je niet bij de filter en dus krijg je een SQL error.

(misschien zit er meer in maar dat zag ik zo en ik heb niet zo veel tijd)
 
bedankt flitsflitsflits !
en hoe los ik dat op ? ik heb geen idee, sorry. heb je mischien een tutorial ervoor of een link waar ik kan uitvinden hoe ik het script moet aanpassen ?
 
Ik had het al proberen op te lossen, zie het derde bericht in deze thread. Maar je zegt dat het nog steeds niet werkt, vandaar mijn vraag:
Welke waarde heeft $query_accos na het aanbrengen van mijn wijziging?
 
PHP:
$query_accos = "SELECT * FROM `accos` " . $sort_by . $filter ;
 
Ik bedoelde eigenlijk de waarde bij het uitvoeren van de code ( echo $query_accos; ), maar nu is de (/een) fout al zichtbaar: in een query moet je eerst een conditie opgeven en daarna sorteren. je moet dus $sort_by en $filter omdraaien.

select * from table where X = Y order by Z
 
Hmm... het lijkt nu idd goed te gaan met TYPE :shocked:

Ik weet zeker dat ik daar een paar maanden geleden nog problemen mee gehad heb :confused:

Nahja... dan was dat het probleem dus niet ;)
 
filter en sort_by heb ik nu op 2 plekke omgedrait
PHP:
$query_accos = "SELECT * FROM accos WHERE streek='Kreta'".$filter.$sort_by ;
en
PHP:
$query_accos = "SELECT * FROM `accos` " .$filter.$sort_by  ;


echo'en doe ik als volgt

PHP:
<?php do { ?>
    <?php echo $row_accos['image']; ?><h4><?php echo $row_accos['name']; ?>  <?php echo $row_accos['type']; ?></h4> in <?php echo $row_accos['village']; ?> (<?php echo $row_accos['streek']; ?> - <?php echo $row_accos['country']; ?>)<br />
    <br />

      
     <?php echo $row_accos['description']; ?>...
    <p class="info"><?php echo $row_accos['url']; ?></p>
  <p class="info">
  <a href="http://www.estero-travel.com/legendeNL.php" onclick="return popup(this, 'notes')">
<img  src="http://www.estero-travel.com/images/graphics/i.jpg" alt="informatie" width="12" height="12" border="0" style=" margin-bottom:20px" /></a><?php echo $row_accos['icon']; ?></p>
      <p class="price"  > vanaf <strong><?php echo $row_accos['price_from']; ?> &euro;<br />
<br />
<img src="http://www.estero-travel.com/images/graphics/---.gif" alt="||  Estero || Travel, Events &amp; more !" width="80%" height="8"  /><br />
<br />
      </strong></p>
    
    <?php } while ($row_accos = mysql_fetch_assoc($accos)); ?>
ligt het mischien eraan dat ik al in de eerste query Kreta filter (WHERE streek='Kreta') ???
 
Dat klopt niet inderdaad, voor meerdere vergelijkingen moet je AND gebruiken

select * from tabel where a=b and c=d
 
maar hoe doe ik dat, omdat ik dus volgende query heb
PHP:
 $query_accos = "SELECT * FROM accos WHERE streek='Kreta' ".$filter.$sort_by ;
en ik kan dus niet gewoon
AND er aan toe voegen , dat werk niet.
PHP:
 $query_accos = "SELECT * FROM accos WHERE streek='Kreta' AND ".$filter.$sort_by ;
 
dat werkt wel, als je de opmaak van $filter aanpast:
Code:
$filter = " WHERE type = 'Villa'";
Code:
$filter = " type = 'Villa'";
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan