Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Quick Search has stopped working on my site?


Angela_Brown

Recommended Posts

Posted

I have no idea how this has happened - the quick search has stopped working and finds no results no matter what is typed into the search box.

 

The only change made (apart from product updates) was the inclusion of code snippet in the footer for google analytics.

 

Any clues as to how to get this working?

Posted

I really have no further detail to add, the search facility always worked just fine.The site has been up for several years. Unfortunately I do not know when it stopped working, it was brought to my attention today. The only changes made to the site has been the inclusion of the google analytics code;

 

 

<script type="text/javascript">

 

var _gaq = _gaq || [];

_gaq.push(['_setAccount', 'UA-2980756-1']);

_gaq.push(['_trackPageview']);

 

(function() {

var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);

})();

 

</script>

 

This was just c/p into the footer.php file as directed in another post in this forum.

 

As far as I am aware nobody has made any other changes other than product updates.

 

Is there a way to check the search code against a working version?

Posted

I have gone back and commented out the google analytics code and this made no difference to the search problem, so have since replaced it.

 

Is there a way to check the search code against a working version???

Posted

Hi

Any chance that your hosting server has upgraded/changed their PHP version? If your site is a few years old then you could be running some code that is PHP4 stuff and a move to PHP5 may be killing it?

Posted

The host has confirmed that they are not using PHP 5, however there is an error in the code on the quick search, I have no idea how to correct this, can anybody help?

 

1054 - Unknown column 'p.products_id' in 'on clause'

select count(distinct p.products_id) as total from products p left join manufacturers m using(manufacturers_id), products_description pd left join specials s on p.products_id = s.products_id, categories c, products_to_categories p2c where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '1' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and ((pd.products_name like '%jacket%' or p.products_model like '%jacket%' or m.manufacturers_name like '%jacket%' or pd.products_description like '%jacket%') )

Posted

Put this into google:

1054 - Unknown column 'p.products_id' in 'on clause'

 

several posts and a whole thread about mysql 1054 errors.

 

Tim

Posted

The changes mentioned in the article were already in effect on my site, I am still looking for answers and have found a few links here to work through. I will post back here if I find a solution that might help anybody else.

 

In the meantime, any bright ideas or suggestions are welcome.

Posted

Hi - are you sure that the left joins in advanced_search_results.php have been correctly bracketed out? If you try a search from the advanced_search page and get the same error then the problem is in advanced_search_results.php

 

Bob

Posted

Hi,

 

I have not managed to resolve the search issue, I followed the article mentioned above and my code already has the parentheses in the correct places.

 

I checked out advanced_search_results.php and there are no mentions of joins in the code at all.

 

Help, I cannot work this out, have I missed something?

Posted

Hi

 

You'd be needing

 

select count(distinct p.products_id) as total

from ((products p)

left join manufacturers m using(manufacturers_id), products_description pd)

left join specials s on p.products_id = s.products_id, categories c, products_to_categories p2c

where p.products_status = '1'

and p.products_id = pd.products_id

and pd.language_id = '1'

and p.products_id = p2c.products_id

and p2c.categories_id = c.categories_id

and ((pd.products_name like '%jacket%'

or p.products_model like '%jacket%'

or m.manufacturers_name like '%jacket%'

or pd.products_description like '%jacket%') )

 

 

-------------------------------------------------------------------

In catalog/advanced_search_result.php

 

Find this

 

 

$from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c";

 

----------------------------------------

and replace with this

 

 

$from_str = "from ((" . TABLE_PRODUCTS . " p) left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c";

 

See how that goes

 

Bob

 

p.s. if you cannot find the exact line just look out for left join statements and fiddle with brackets

Posted

Thank you for your reply.

 

I cannot find that code on my advanced_search_result.php - this is what is there;

 

 

<?php

/*

$Id: advanced_search_result.php,v 1.72 2003/06/23 06:50:11 project3000 Exp $

 

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

 

Copyright © 2003 osCommerce

 

Released under the GNU General Public License

*/

 

require('includes/application_top.php');

 

require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_ADVANCED_SEARCH);

 

$error = false;

 

if ( (isset($HTTP_GET_VARS['keywords']) && empty($HTTP_GET_VARS['keywords'])) &&

(isset($HTTP_GET_VARS['dfrom']) && (empty($HTTP_GET_VARS['dfrom']) || ($HTTP_GET_VARS['dfrom'] == DOB_FORMAT_STRING))) &&

(isset($HTTP_GET_VARS['dto']) && (empty($HTTP_GET_VARS['dto']) || ($HTTP_GET_VARS['dto'] == DOB_FORMAT_STRING))) &&

(isset($HTTP_GET_VARS['pfrom']) && !is_numeric($HTTP_GET_VARS['pfrom'])) &&

(isset($HTTP_GET_VARS['pto']) && !is_numeric($HTTP_GET_VARS['pto'])) ) {

$error = true;

 

$messageStack->add_session('search', ERROR_AT_LEAST_ONE_INPUT);

} else {

$dfrom = '';

$dto = '';

$pfrom = '';

$pto = '';

$keywords = '';

 

if (isset($HTTP_GET_VARS['dfrom'])) {

$dfrom = (($HTTP_GET_VARS['dfrom'] == DOB_FORMAT_STRING) ? '' : $HTTP_GET_VARS['dfrom']);

}

 

if (isset($HTTP_GET_VARS['dto'])) {

$dto = (($HTTP_GET_VARS['dto'] == DOB_FORMAT_STRING) ? '' : $HTTP_GET_VARS['dto']);

}

 

if (isset($HTTP_GET_VARS['pfrom'])) {

$pfrom = $HTTP_GET_VARS['pfrom'];

}

 

if (isset($HTTP_GET_VARS['pto'])) {

$pto = $HTTP_GET_VARS['pto'];

}

 

if (isset($HTTP_GET_VARS['keywords'])) {

$keywords = $HTTP_GET_VARS['keywords'];

}

 

$date_check_error = false;

if (tep_not_null($dfrom)) {

if (!tep_checkdate($dfrom, DOB_FORMAT_STRING, $dfrom_array)) {

$error = true;

$date_check_error = true;

 

$messageStack->add_session('search', ERROR_INVALID_FROM_DATE);

}

}

 

if (tep_not_null($dto)) {

if (!tep_checkdate($dto, DOB_FORMAT_STRING, $dto_array)) {

$error = true;

$date_check_error = true;

 

$messageStack->add_session('search', ERROR_INVALID_TO_DATE);

}

}

 

if (($date_check_error == false) && tep_not_null($dfrom) && tep_not_null($dto)) {

if (mktime(0, 0, 0, $dfrom_array[1], $dfrom_array[2], $dfrom_array[0]) > mktime(0, 0, 0, $dto_array[1], $dto_array[2], $dto_array[0])) {

$error = true;

 

$messageStack->add_session('search', ERROR_TO_DATE_LESS_THAN_FROM_DATE);

}

}

 

$price_check_error = false;

if (tep_not_null($pfrom)) {

if (!settype($pfrom, 'double')) {

$error = true;

$price_check_error = true;

 

$messageStack->add_session('search', ERROR_PRICE_FROM_MUST_BE_NUM);

}

}

 

if (tep_not_null($pto)) {

if (!settype($pto, 'double')) {

$error = true;

$price_check_error = true;

 

$messageStack->add_session('search', ERROR_PRICE_TO_MUST_BE_NUM);

}

}

 

if (($price_check_error == false) && is_float($pfrom) && is_float($pto)) {

if ($pfrom >= $pto) {

$error = true;

 

$messageStack->add_session('search', ERROR_PRICE_TO_LESS_THAN_PRICE_FROM);

}

}

 

if (tep_not_null($keywords)) {

if (!tep_parse_search_string($keywords, $search_keywords)) {

$error = true;

 

$messageStack->add_session('search', ERROR_INVALID_KEYWORDS);

}

}

}

 

if (empty($dfrom) && empty($dto) && empty($pfrom) && empty($pto) && empty($keywords)) {

$error = true;

 

$messageStack->add_session('search', ERROR_AT_LEAST_ONE_INPUT);

}

 

if ($error == true) {

tep_redirect(tep_href_link(FILENAME_ADVANCED_SEARCH, tep_get_all_get_params(), 'NONSSL', true, false));

}

 

$breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_ADVANCED_SEARCH));

$breadcrumb->add(NAVBAR_TITLE_2, tep_href_link(FILENAME_ADVANCED_SEARCH_RESULT, tep_get_all_get_params(), 'NONSSL', true, false));

 

$content = CONTENT_ADVANCED_SEARCH_RESULT;

 

include (bts_select('main', $content_template)); // BTSv1.5

 

require(DIR_WS_INCLUDES . 'application_bottom.php');

?>

 

 

As you can see there are no mentions of 'join'.

 

I am lost with this now, I need the search function to work and have no clue how to fix it.

Posted

Hi Again, New information.

 

I have been looking through all the site files and found that the documents I was checking are not those that the site is running from. Here is the actual code that my search is running from;

 

 

<table border="0" width="100%" cellspacing="0" cellpadding="0" bgcolor="White">

<tr>

<td><table border="0" width="100%" cellspacing="0" cellpadding="0" class="productListing">

<tr>

<td class="productListing-headingbig"><?php echo HEADING_TITLE_2; ?></td>

 

</tr>

</table></td>

</tr>

<tr>

<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>

</tr>

<tr>

<td>

<?php

// create column list

$define_list = array('PRODUCT_LIST_MODEL' => PRODUCT_LIST_MODEL,

'PRODUCT_LIST_NAME' => PRODUCT_LIST_NAME,

'PRODUCT_LIST_MANUFACTURER' => PRODUCT_LIST_MANUFACTURER,

'PRODUCT_LIST_PRICE' => PRODUCT_LIST_PRICE,

'PRODUCT_LIST_QUANTITY' => PRODUCT_LIST_QUANTITY,

'PRODUCT_LIST_WEIGHT' => PRODUCT_LIST_WEIGHT,

'PRODUCT_LIST_IMAGE' => PRODUCT_LIST_IMAGE,

'PRODUCT_LIST_BUY_NOW' => PRODUCT_LIST_BUY_NOW);

 

asort($define_list);

 

$column_list = array();

reset($define_list);

while (list($key, $value) = each($define_list)) {

if ($value > 0) $column_list[] = $key;

}

 

$select_column_list = '';

 

for ($i=0, $n=sizeof($column_list); $i<$n; $i++) {

switch ($column_list[$i]) {

case 'PRODUCT_LIST_MODEL':

$select_column_list .= 'p.products_model, ';

break;

case 'PRODUCT_LIST_MANUFACTURER':

$select_column_list .= 'm.manufacturers_name, ';

break;

case 'PRODUCT_LIST_QUANTITY':

$select_column_list .= 'p.products_quantity, ';

break;

case 'PRODUCT_LIST_IMAGE':

$select_column_list .= 'p.products_image, ';

break;

case 'PRODUCT_LIST_WEIGHT':

$select_column_list .= 'p.products_weight, ';

break;

}

}

 

$select_str = "select distinct " . $select_column_list . " m.manufacturers_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price ";

 

if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) {

$select_str .= ", SUM(tr.tax_rate) as tax_rate ";

}

 

$from_str = "from " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m using(manufacturers_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c";

 

if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) {

if (!tep_session_is_registered('customer_country_id')) {

$customer_country_id = STORE_COUNTRY;

$customer_zone_id = STORE_ZONE;

}

$from_str .= " left join " . TABLE_TAX_RATES . " tr on p.products_tax_class_id = tr.tax_class_id left join " . TABLE_ZONES_TO_GEO_ZONES . " gz on tr.tax_zone_id = gz.geo_zone_id and (gz.zone_country_id is null or gz.zone_country_id = '0' or gz.zone_country_id = '" . (int)$customer_country_id . "') and (gz.zone_id is null or gz.zone_id = '0' or gz.zone_id = '" . (int)$customer_zone_id . "')";

}

 

$where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id ";

 

if (isset($HTTP_GET_VARS['categories_id']) && tep_not_null($HTTP_GET_VARS['categories_id'])) {

if (isset($HTTP_GET_VARS['inc_subcat']) && ($HTTP_GET_VARS['inc_subcat'] == '1')) {

$subcategories_array = array();

tep_get_subcategories($subcategories_array, $HTTP_GET_VARS['categories_id']);

 

$where_str .= " and p2c.products_id = p.products_id and p2c.products_id = pd.products_id and (p2c.categories_id = '" . (int)$HTTP_GET_VARS['categories_id'] . "'";

 

for ($i=0, $n=sizeof($subcategories_array); $i<$n; $i++ ) {

$where_str .= " or p2c.categories_id = '" . (int)$subcategories_array[$i] . "'";

}

 

$where_str .= ")";

} else {

$where_str .= " and p2c.products_id = p.products_id and p2c.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['categories_id'] . "'";

}

}

 

if (isset($HTTP_GET_VARS['manufacturers_id']) && tep_not_null($HTTP_GET_VARS['manufacturers_id'])) {

$where_str .= " and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'";

}

 

if (isset($search_keywords) && (sizeof($search_keywords) > 0)) {

$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:

$keyword = tep_db_prepare_input($search_keywords[$i]);

 

 

 

if (substr($keyword,-1)=='s') // plural

{

 

 

$keyword = substr($keyword,0,strlen($keyword)-1);

 

}

 

 

 

$where_str .= "(pd.products_name like '%" . tep_db_input($keyword) . "%' or p.products_model like '%" . tep_db_input($keyword) . "%' or m.manufacturers_name like '%" . tep_db_input($keyword) . "%'";

if (isset($HTTP_GET_VARS['search_in_description']) && ($HTTP_GET_VARS['search_in_description'] == '1')) $where_str .= " or pd.products_description like '%" . tep_db_input($keyword) . "%'";

$where_str .= ')';

break;

}

}

$where_str .= " )";

}

 

if (tep_not_null($dfrom)) {

$where_str .= " and p.products_date_added >= '" . tep_date_raw($dfrom) . "'";

}

 

if (tep_not_null($dto)) {

$where_str .= " and p.products_date_added <= '" . tep_date_raw($dto) . "'";

}

 

if (tep_not_null($pfrom)) {

if ($currencies->is_set($currency)) {

$rate = $currencies->get_value($currency);

 

$pfrom = $pfrom / $rate;

}

}

 

if (tep_not_null($pto)) {

if (isset($rate)) {

$pto = $pto / $rate;

}

}

 

if (DISPLAY_PRICE_WITH_TAX == 'true') {

if ($pfrom > 0) $where_str .= " and (IF(s.status, s.specials_new_products_price, p.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) >= " . (double)$pfrom . ")";

if ($pto > 0) $where_str .= " and (IF(s.status, s.specials_new_products_price, p.products_price) * if(gz.geo_zone_id is null, 1, 1 + (tr.tax_rate / 100) ) <= " . (double)$pto . ")";

} else {

if ($pfrom > 0) $where_str .= " and (IF(s.status, s.specials_new_products_price, p.products_price) >= " . (double)$pfrom . ")";

if ($pto > 0) $where_str .= " and (IF(s.status, s.specials_new_products_price, p.products_price) <= " . (double)$pto . ")";

}

 

if ( (DISPLAY_PRICE_WITH_TAX == 'true') && (tep_not_null($pfrom) || tep_not_null($pto)) ) {

$where_str .= " group by p.products_id, tr.tax_priority";

}

 

if ( (!isset($HTTP_GET_VARS['sort'])) || (!ereg('[1-8][ad]', $HTTP_GET_VARS['sort'])) || (substr($HTTP_GET_VARS['sort'], 0, 1) > sizeof($column_list)) ) {

for ($i=0, $n=sizeof($column_list); $i<$n; $i++) {

if ($column_list[$i] == 'PRODUCT_LIST_NAME') {

$HTTP_GET_VARS['sort'] = $i+1 . 'a';

$order_str = ' order by pd.products_name';

break;

}

}

} else {

$sort_col = substr($HTTP_GET_VARS['sort'], 0 , 1);

$sort_order = substr($HTTP_GET_VARS['sort'], 1);

$order_str = ' order by ';

switch ($column_list[$sort_col-1]) {

case 'PRODUCT_LIST_MODEL':

$order_str .= "p.products_model " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name";

break;

case 'PRODUCT_LIST_NAME':

$order_str .= "pd.products_name " . ($sort_order == 'd' ? "desc" : "");

break;

case 'PRODUCT_LIST_MANUFACTURER':

$order_str .= "m.manufacturers_name " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name";

break;

case 'PRODUCT_LIST_QUANTITY':

$order_str .= "p.products_quantity " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name";

break;

case 'PRODUCT_LIST_IMAGE':

$order_str .= "pd.products_name";

break;

case 'PRODUCT_LIST_WEIGHT':

$order_str .= "p.products_weight " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name";

break;

case 'PRODUCT_LIST_PRICE':

$order_str .= "final_price " . ($sort_order == 'd' ? "desc" : "") . ", pd.products_name";

break;

}

}

 

$listing_sql = $select_str . $from_str . $where_str . $order_str;

 

require(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING_COL);

?>

</td>

</tr>

<tr>

<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>

</tr>

<tr>

<td class="maininfo"><?php echo '<a href="' . tep_href_link(FILENAME_ADVANCED_SEARCH, tep_get_all_get_params(array('sort', 'page')), 'NONSSL', true, false) . '">' . tep_image_button('button_back2.gif', IMAGE_BUTTON_BACK) . '</a>'; ?></td>

</tr>

</table>

 

 

 

I can see where I need to make the adjustments to the code I have highlighted in red - but the other left joins mentioned in the code highlighted in blue I am not sure of - do I need to add parenthesis to these too?

 

Help please?

Posted

Thanks - ignore my previous post - I went ahead with the changes I knew about and the search function is working again.

 

Thank you to those who helped me :)

Archived

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

×
×
  • Create New...