Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 02.05.2010, 13:31
BTSpeedy BTSpeedy ist offline
Neuer Benutzer
 
Registriert seit: 19.04.2010
Beiträge: 4
Standard

Hallo,

Nach obiger Änderung hat bisher alles ohne Fehler funktioniert.

Die Syntax von SQL-Abfragen hat sich leicht geändert. Bei Verwendung von JOIN müssen die Worte hinter dem FROM in Klammern gesetzt werden.

Ich gebe Dir im Folgenden meine "advanced_search_ressult.php".

Hier ist auch das lästige "Alle Artikel zeigen" bei leerem Suchstring abgestellt.
Leerer Suchstring führt 1. zur Erweiterten Suche und 2. hier zu keinem Ergebniss.

Wenn dir das nicht gefällt, musst du die entsprechenden Zeilen entfernen.
Sie sind im Quelltext kommerntiert.


PHP-Code:
<?php

/* -----------------------------------------------------------------------------------------
   $Id: advanced_search_result.php 1141 2005-08-10 11:31:36Z novalis $

   XT-Commerce - community made shopping
   http://www.xt-commerce.com

   Copyright (c) 2005 XT-Commerce
   -----------------------------------------------------------------------------------------
   based on:
   (c) 2000-2001 The Exchange Project  (earlier name of osCommerce)
   (c) 2002-2003 osCommerce(advanced_search_result.php,v 1.68 2003/05/14); www.oscommerce.com
   (c) 2003       nextcommerce (advanced_search_result.php,v 1.17 2003/08/21); www.nextcommerce.org

   Released under the GNU General Public License
   ---------------------------------------------------------------------------------------*/

include ('includes/application_top.php');
// create smarty elements
$smarty = new Smarty;
// include boxes
require (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/boxes.php');
// include needed functions
require_once (DIR_FS_INC.'xtc_parse_search_string.inc.php');
require_once (
DIR_FS_INC.'xtc_get_subcategories.inc.php');
require_once (
DIR_FS_INC.'xtc_get_currencies_values.inc.php');

/*
 * check search entry
 */

$error 0// reset error flag to false
$errorno 0;
$keyerror 0;

if (isset (
$_GET['keywords']) && empty($_GET['keywords']))
{
// ********** Bei Suche ohne Zeicheneingabe wird zur erweiterten Suche verzweigt
//  $keyerror = 1;       // alt
  
$error 1;            //neu
// **********************************************************
}

if ((isset (
$_GET['keywords']) && empty ($_GET['keywords'])) && (isset ($_GET['pfrom']) && empty ($_GET['pfrom'])) && (isset ($_GET['pto']) && empty ($_GET['pto']))) {
      
$errorno += 1;
      
$error 1;
}
elseif (isset (
$_GET['keywords']) && empty ($_GET['keywords']) && !(isset ($_GET['pfrom'])) && !(isset ($_GET['pto']))) {
      
$errorno += 1;
      
$error 1;
}

if (
strlen($_GET['keywords']) < && strlen($_GET['keywords']) > && $error == 0) {
      
$errorno += 1;
      
$error 1;
      
$keyerror 1;
}

if (
strlen($_GET['pfrom']) > 0) {
      
$pfrom_to_check xtc_db_input($_GET['pfrom']);
      if (!
settype($pfrom_to_check"double")) {
            
$errorno += 10000;
            
$error 1;
      }
}

if (
strlen($_GET['pto']) > 0) {
      
$pto_to_check $_GET['pto'];
      if (!
settype($pto_to_check"double")) {
            
$errorno += 100000;
            
$error 1;
      }
}

if (
strlen($_GET['pfrom']) > && !(($errorno 10000) == 10000) && strlen($_GET['pto']) > && !(($errorno 100000) == 100000)) {
      if (
$pfrom_to_check $pto_to_check) {
            
$errorno += 1000000;
            
$error 1;
      }
}

if (
strlen($_GET['keywords']) > 0) {
      if (!
xtc_parse_search_string(stripslashes($_GET['keywords']), $search_keywords)) {
            
$errorno += 10000000;
            
$error 1;
            
$keyerror 1;
      }
}

if (
$error == && $keyerror != 1) {

      
xtc_redirect(xtc_href_link(FILENAME_ADVANCED_SEARCH'errorno='.$errorno.'&'.xtc_get_all_get_params(array ('x''y'))));

} else {

      
/*
       *    search process starts here
       */

      
$breadcrumb->add(NAVBAR_TITLE1_ADVANCED_SEARCHxtc_href_link(FILENAME_ADVANCED_SEARCH));
      
$breadcrumb->add(NAVBAR_TITLE2_ADVANCED_SEARCHxtc_href_link(FILENAME_ADVANCED_SEARCH_RESULT'keywords='.xtc_db_input($_GET['keywords']).'&search_in_description='.xtc_db_input($_GET['search_in_description']).'&categories_id='.(int)$_GET['categories_id'].'&inc_subcat='.xtc_db_input($_GET['inc_subcat']).'&manufacturers_id='.(int)$_GET['manufacturers_id'].'&pfrom='.xtc_db_input($_GET['pfrom']).'&pto='.xtc_db_input($_GET['pto']).'&dfrom='.xtc_db_input($_GET['dfrom']).'&dto='.xtc_db_input($_GET['dto'])));

      require (
DIR_WS_INCLUDES.'header.php');

      
// define additional filters //

      //fsk18 lock
      
if ($_SESSION['customers_status']['customers_fsk18_display'] == '0') {
            
$fsk_lock " AND p.products_fsk18 != '1' ";
      } else {
            unset (
$fsk_lock);
      }

      
//group check
      
if (GROUP_CHECK == 'true') {
            
$group_check " AND p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
      } else {
            unset (
$group_check);
      }

      
//manufacturers if set
      
if (isset ($_GET['manufacturers_id']) && xtc_not_null($_GET['manufacturers_id'])) {
            
$manu_check " AND p.manufacturers_id = '".(int)$_GET['manufacturers_id']."' ";
      }

      
//include subcategories if needed
      
if (isset ($_GET['categories_id']) && xtc_not_null($_GET['categories_id'])) {
            if (
$_GET['inc_subcat'] == '1') {
                  
$subcategories_array = array ();
                  
xtc_get_subcategories($subcategories_array, (int)$_GET['categories_id']);
                  
$subcat_join " LEFT OUTER JOIN ".TABLE_PRODUCTS_TO_CATEGORIES." AS p2c ON (p.products_id = p2c.products_id) ";
                  
$subcat_where " AND p2c.categories_id IN ('".(int) $_GET['categories_id']."' ";
                  foreach (
$subcategories_array AS $scat) {
                        
$subcat_where .= ", '".$scat."'";
                  }
                  
$subcat_where .= ") ";
            } else {
                  
$subcat_join " LEFT OUTER JOIN ".TABLE_PRODUCTS_TO_CATEGORIES." AS p2c ON (p.products_id = p2c.products_id) ";
                  
$subcat_where " AND p2c.categories_id = '".(int) $_GET['categories_id']."' ";
            }
      }

      if (
$_GET['pfrom'] || $_GET['pto']) {
            
$rate xtc_get_currencies_values($_SESSION['currency']);
            
$rate $rate['value'];
            if (
$rate && $_GET['pfrom'] != '') {
                  
$pfrom $_GET['pfrom'] / $rate;
            }
            if (
$rate && $_GET['pto'] != '') {
                  
$pto $_GET['pto'] / $rate;
            }
      }

      
//price filters
      
if (($pfrom != '') && (is_numeric($pfrom))) {
            
$pfrom_check " AND (IF(s.status = '1' AND p.products_id = s.products_id, s.specials_new_products_price, p.products_price) >= ".$pfrom.") ";
      } else {
            unset (
$pfrom_check);
      }

      if ((
$pto != '') && (is_numeric($pto))) {
            
$pto_check " AND (IF(s.status = '1' AND p.products_id = s.products_id, s.specials_new_products_price, p.products_price) <= ".$pto." ) ";
      } else {
            unset (
$pto_check);
      }

      
//build query
      
$select_str "SELECT distinct
                        p.products_id,
                        p.products_price,
                        p.products_model,
                        p.products_quantity,
                        p.products_shippingtime,
                        p.products_fsk18,
                        p.products_image,
                        p.products_weight,
                        p.products_tax_class_id,
                        pd.products_name,
                        pd.products_short_description,
                        pd.products_description "
;

// ***************** Um inaktive Kategorien auszuschalten!
//      $from_str  = "FROM ".TABLE_PRODUCTS." AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) "; // alt
      
$from_str  "FROM (".TABLE_PRODUCTS." AS p, ".TABLE_PRODUCTS_TO_CATEGORIES." AS pc, ".TABLE_CATEGORIES." AS c ) LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) "//neu
//**************************

      
$from_str .= $subcat_join;
      if (
SEARCH_IN_ATTR == 'true')
        {
          
$from_str .= " LEFT OUTER JOIN ".TABLE_PRODUCTS_ATTRIBUTES." AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN ".TABLE_PRODUCTS_OPTIONS_VALUES." AS pov ON (pa.options_values_id = pov.products_options_values_id) ";
        }
      
$from_str .= "LEFT OUTER JOIN ".TABLE_SPECIALS." AS s ON (p.products_id = s.products_id) AND s.status = '1'";

      if ((
DISPLAY_PRICE_WITH_TAX == 'true') && ((isset ($_GET['pfrom']) && xtc_not_null($_GET['pfrom'])) || (isset ($_GET['pto']) && xtc_not_null($_GET['pto']))))
      {
        if (!isset (
$_SESSION['customer_country_id']))
        {
          
$_SESSION['customer_country_id'] = STORE_COUNTRY;
          
$_SESSION['customer_zone_id'] = STORE_ZONE;
        }
        
$from_str .= " LEFT OUTER JOIN ".TABLE_TAX_RATES." tr ON (p.products_tax_class_id = tr.tax_class_id) LEFT OUTER JOIN ".TABLE_ZONES_TO_GEO_ZONES." gz ON (tr.tax_zone_id = gz.geo_zone_id) ";
        
$tax_where " AND (gz.zone_country_id IS NULL OR gz.zone_country_id = '0' OR gz.zone_country_id = '".(int) $_SESSION['customer_country_id']."') AND (gz.zone_id is null OR gz.zone_id = '0' OR gz.zone_id = '".(int) $_SESSION['customer_zone_id']."')";
      }
      else
      {
        unset (
$tax_where);
      }

      
//where-string
      
$where_str " WHERE p.products_status = '1' "." AND pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;
// ***************** Um inaktive Kategorien auszuschalten!
      
$where_str .= " AND pc.products_id = p.products_id AND c.categories_id = pc.categories_id AND c.categories_status = 1 "// zusätzlich
//**************************

      //go for keywords... this is the main search process
      
if (isset ($_GET['keywords']) && xtc_not_null($_GET['keywords'])) {
            if (
xtc_parse_search_string(stripslashes($_GET['keywords']), $search_keywords)) {
                  
$where_str .= " AND ( ";
                  for (
$i 0$n sizeof($search_keywords); $i $n$i ++) {
                        switch (
$search_keywords[$i]) {
                              case 
'(' :
                              case 
')' :
                              case 
'and' :
                              case 
'or' :
                                    
$where_str .= " ".$search_keywords[$i]." ";
                                    break;
                              default :
                                    
$where_str .= " ( ";
                                    
$where_str .= "pd.products_keywords LIKE ('%".addslashes($search_keywords[$i])."%') ";
                                    if (
SEARCH_IN_DESC == 'true') {
                                       
$where_str .= "OR pd.products_description LIKE ('%".addslashes($search_keywords[$i])."%') ";
                                       
$where_str .= "OR pd.products_short_description LIKE ('%".addslashes($search_keywords[$i])."%') ";
                                    }
                                    
$where_str .= "OR pd.products_name LIKE ('%".addslashes($search_keywords[$i])."%') ";
                                    
$where_str .= "OR p.products_model LIKE ('%".addslashes($search_keywords[$i])."%') ";
                                    if (
SEARCH_IN_ATTR == 'true') {
                                       
$where_str .= "OR (pov.products_options_values_name LIKE ('%".addslashes($search_keywords[$i])."%') ";
                                       
$where_str .= "AND pov.language_id = '".(int) $_SESSION['languages_id']."')";
                                    }
                                    
$where_str .= " ) ";
                                    break;
                        }
                  }
                  
$where_str .= " ) GROUP BY p.products_id ORDER BY p.products_id ";
            }
      }

      
//glue together
      
$listing_sql $select_str.$from_str.$where_str;
      require (
DIR_WS_MODULES.FILENAME_PRODUCT_LISTING);
}
$smarty->assign('language'$_SESSION['language']);
$smarty->caching 0;
if (!
defined(RM))
      
$smarty->load_filter('output''note');
$smarty->display(CURRENT_TEMPLATE.'/index.html');
include (
'includes/application_bottom.php');
?>
Mit Zitat antworten