Forums / Upgrading to 1.5.x / PHP 8.0 - Search function not working properly following upgrade to 1.5.8

PHP 8.0 - Search function not working properly following upgrade to 1.5.8

Views: 26,437

Results 21 to 36 of 36
27 Feb 2024, 12:14 PM
#21
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

PHP 8.0 - Search function not working properly following upgrade to 1.5.8

Hmmm...not sure what's happening.

I will try your scenario on my unmodified installs after breakfast.

The search mechanism could use some improvements like checkboxes for sale price, regular price, free shipping, in stock,, and anything else that would limit the customers ability to get the product. It would help store owners too.

I may try to work on improvements after I finish updating my cart.

27 Feb 2024, 3:33 PM
#22
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

royaldave:

I have tried that. Updating the sanitize makes it better, but it doesn't work 100%.

As per my examples above, if I do 48 to 48 it only shows products with a '+' in the title (why?)
Same for 46 to 48, and 47 to 48.

However if I do 45 to 48 it works as it should! And also 0 to 48.

In my unmodified 1.5.8a install...except for the init_sanitize.php modification.

I typed in 45 to 50 in just the price range text boxes to see what items show up in that price range...and to verify if I have a $48 item in my cart.

I had four $50s (one sale priced), two $49.99 items, and one $45.00 item.

Next, I searched $50 to $50, $49 to $50, $45 to $45, and $49.99 to $49.99 and all yielded the expected results.

I took it one step further and compared all of these results against the prices in the database price and sale price information.

The catalog search mechanism is picking up everything it is supposed to in my case.

Sale prices are the determining / overriding factor with regards to showing them in the search results...which is good. So, If you are expecting to see a $48 normally priced item with a sale price that is out of your search range, then you are not going to see it in the results.

Make sure you have a $48 non-sale item and a $48 sale item in your cart (thanks Capt Obvious...LOL). Then, repeat the test I just did.

If you are still having issues, report it here and someone will hopefully help you. I don't see a problem with the search engine.

28 Feb 2024, 10:09 AM
#23
royaldave avatar

royaldave

Zen Follower

Join Date:
Aug 2013
Location:
Perth, WA, AU
Posts:
285
Plugin Contributions:
1

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

You're right.

I did a fresh install and it works (with the init_sanitise amendment of course).

I think multisite is interfering with the search. And it's probably been a problem for a long time because my live 157 install is showing the same!

Damn! Have I never tested this before???

28 Feb 2024, 3:17 PM
#24
royaldave avatar

royaldave

Zen Follower

Join Date:
Aug 2013
Location:
Perth, WA, AU
Posts:
285
Plugin Contributions:
1

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

royaldave:

You're right.

I did a fresh install and it works (with the init_sanitise amendment of course).

I think multisite is interfering with the search. And it's probably been a problem for a long time because my live 157 install is showing the same!

Damn! Have I never tested this before???

Actually I take back what I just said. I've gone back to the fresh install and am getting inconsistent results. Some queries work better than others, but I still feel there's something not right about searching in a price range.

28 Feb 2024, 8:30 PM
#25
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

What is multisite and is your fresh install on it?

I am out of ideas...can anyone else shead any light on this?

29 Feb 2024, 3:10 AM
#26
royaldave avatar

royaldave

Zen Follower

Join Date:
Aug 2013
Location:
Perth, WA, AU
Posts:
285
Plugin Contributions:
1

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

Multisite is a plugin that allows multiple domain names/templates to point to one zencart install - and it allows you to choose which categories are listed on each domain.
The "cat_filter" in this plugin immediately jumps out as the likely culprit - however when I say fresh install I do mean unzipping the zencart.zip and not making any amendments.

I really tied myself in knots with this the other night and need a fresh pair of eyes to go over it again in case my thinking was not correct - so will come back to this.

I think previously I've removed the price from/to from the search page (and always the dates) and re-introduced them to my 157 install. I'm quite happy to remove them again to get my 158 install live and I will come back to this.

29 Feb 2024, 2:42 PM
#27
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

Good plan.

I have been upgrading since Jan 21...I finally resolved all of my log errors and issues yesterday!

Next...file taxes.

Good luck.

2 Mar 2024, 8:54 AM
#28
royaldave avatar

royaldave

Zen Follower

Join Date:
Aug 2013
Location:
Perth, WA, AU
Posts:
285
Plugin Contributions:
1

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

OK, my 158 upgrade has worked fine so I'm back to investigating this.

I have freshly unzipped the 158 onto my server at home and am getting the same results.

Without updating the init_sanitize file, doing a price range without the .00 added to the price values causes the search to basically ignore that criteria and display all matching products at any price.

However even with the .00 added, doing my from:48.00 to:48.00 or from:47.00 to:48.00 will display nothing that should match - except products that have a '+' in the title will show up!

When I update the init_sanitize file as recommended all it means I can get the same results by entering from:48 to:48 - ie I don't need the .00 anymore.

It's a strange one.

Maybe it's an issue with my DB - but everything else works!

4 Mar 2024, 2:37 PM
#29
royaldave avatar

royaldave

Zen Follower

Join Date:
Aug 2013
Location:
Perth, WA, AU
Posts:
285
Plugin Contributions:
1

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

OK, I have kind of worked out the problem here.

This section of code in header_php.php in modules/search_result

if (DISPLAY_PRICE_WITH_TAX == 'true') {
if ($pfrom) {
$where_str .= " AND (p.products_price_sorter * IF(gz.geo_zone_id IS null, 1, 1 + (tr.tax_rate / 100)) >= :price)";
$where_str = $db->bindVars($where_str, ':price', $pfrom, 'float');
}
if ($pto) {
$where_str .= " AND (p.products_price_sorter * IF(gz.geo_zone_id IS null, 1, 1 + (tr.tax_rate / 100)) <= :price)";
$where_str = $db->bindVars($where_str, ':price', $pto, 'float');
}
} else {
if ($pfrom) {
$where_str .= " and (p.products_price_sorter >= :price)";
$where_str = $db->bindVars($where_str, ':price', $pfrom, 'float');
}
if ($pto) {
$where_str .= " and (p.products_price_sorter <= :price)";
$where_str = $db->bindVars($where_str, ':price', $pto, 'float');
}
}

What is P.products_price_sorter all about?

If I replace that with p.products_price I get the desired result!

Actually now i know what the issue is - not too long ago I decided to increase all products with a $45 price tag to $48 and I did a quick and dirty sql query in admin to change the price. I didn't realise there was this price_sorter field so my sql query didn't take care of it. What's it for anyway?

4 Mar 2024, 2:47 PM
#30
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

Price sorter is the sale price...

5 Mar 2024, 2:17 AM
#31
royaldave avatar

royaldave

Zen Follower

Join Date:
Aug 2013
Location:
Perth, WA, AU
Posts:
285
Plugin Contributions:
1

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

mikeel100:

Price sorter is the sale price...

I see, well I won't be doing that again..

5 Mar 2024, 10:36 AM
#32
torvista avatar

torvista

Totally Zenned

Join Date:
Aug 2007
Location:
Gijón, Asturias, Spain
Posts:
2,876
Plugin Contributions:
7

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

There is an explanation of price_sorter here
https://docs.zen-cart.com/user/admin_pages/tools/store_manager/

Steve
github.com/torvista: BackupMySQL, Structured Data, Multiple Copy-Move-Delete, Google reCaptcha, Image Checker, Spanish Language Pack and more...

14 Mar 2024, 6:25 PM
#33
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

The search by date function is broken as well.

In my unmodified cart, I changed the first graphic card due date to a couple of months out and made it zero balance.

It shows up on the Upcoming Products list just fine, but when you search for 03/14/2024 to 05/15/2024, nothing comes back.

It is definitely buggy.

I'll see what I can figure out, but if someone knows the fix for this, I'd appreciate it.

26 Mar 2024, 5:42 PM
#34
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

Modifying the includes/modules/pages/search_result/header_php.php file fixed my date search problems and empty breadcrumb issues as well.

Search for "mikeel100" in the attached header_php.zip file and you can see the changes I made.

I also modified includes/init_includes/overrides/init_add_crumbs.php...see the zip file.

Keep in mind, these attached files are from my customized cart where I have added center boxes for All Products, Upcoming, Price Range, Free Shipping, and Best Sellers. All of my center and sideboxes are pulled from a function I developed that totally bypasses modules and modules/sideboxes.

All of the changes I made to these files may not work for you. It's a start though...and I hope it helps someone.

26 Mar 2024, 6:11 PM
#35
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

This constant, ADVANCED_SEARCH_NEW_PRODUCTS_DATE_FROM, in the init_add_crumbs files has to be in YOUR_TEMPLAGE/lang.english

'ADVANCED_SEARCH_NEW_PRODUCTS_DATE_FROM' => '01/01/1900',

$dfrom = ADVANCED_SEARCH_NEW_PRODUCTS_DATE_FROM has to be set in any link leading to New Products. In my case, it is in my custom function. You should find or put similar code in the modules and sideboxes new products files.

		case ADVANCED_SEARCH_HEADING_NEW_PRODUCTS:
			$dto = date('m/d/Y');
			if (SHOW_NEW_PRODUCTS_LIMIT == 0) {
				$dfrom = ADVANCED_SEARCH_NEW_PRODUCTS_DATE_FROM;
			} else {
				$dfrom = strtotime ( '-' . SHOW_NEW_PRODUCTS_LIMIT . ' day' , strtotime ( $date ) ) ;
				$dfrom = date('m/d/Y', $dfrom );
			}
28 Mar 2024, 6:06 PM
#36
mikeel100 avatar

mikeel100

Zen Follower

Join Date:
Sep 2012
Location:
West Jefferson, NC
Posts:
391
Plugin Contributions:
0

Re: PHP 8.0 - Search function not working properly following upgrade to 1.5.8

In trying fix an issue with the search engine where price from and price to do not go into the text boxes all the time, I've hit a snag that I can't explain and don't understand.

My understanding of the process is that it starts in tpl_search_default.php and uses the $sData values from modules/pages/search/header_php.php...like so.

$sData['pto'] = (isset($_GET['pto']) ? zen_output_string($_GET['pto']) : '');

For troubleshooting purposes, I changed the above code to the code below...using 1000, '1000', and "1000" at many different points in my testing.

$sData['pto'] = 1000;

In tpl_search_default.php, line 37, I tested if $sData['pto'] was available and correct...like so.

<?php print_r('$sData[pto] before sanitizing = ' . $sData['pto'] . '<br>'); //this is not making it's way into zen_draw_input_field('pto', $sData['pto'], 'id="pto"'); below 
?>
<div id="searchPriceTo"><label for="pto"><?php echo ENTRY_PRICE_TO; ?></label><?php echo zen_draw_input_field('pto', $sData['pto'], 'id="pto"'); ?></div>

It is available and correct but it is not getting into the text box.

So I moved on to verifying function zen_draw_input_field in the html_output.php file.

Around line 585, I tested for $value ($sData...).

print_r('VALUE = ' . $value);
    $field = '<input type="' . zen_output_string($type) . '" name="' . zen_sanitize_string(zen_output_string($name)) . '"';
    if (isset($GLOBALS[$name]) && is_string($GLOBALS[$name]) && $reinsert_value == true) {
      $field .= ' value="' . zen_output_string(stripslashes($GLOBALS[$name])) . '"';
    } elseif (zen_not_null($value)) {
      $field .= ' value="' . zen_output_string($value) . '"';
    }
print_r('FIELD = ' . $field . ' | VALUE = ' . $value);

$value is still correct and available ** but it still isn't inside of the text box...but it should be, right?** The empty text box appears at is should...other than being empty.

My confusion comes here while anylizing the above code. Why would you use $name in any part of this if statement below? The goal is to set $field .= ' value=" to the $value...not the $name, right?

    if (isset($GLOBALS[$name]) && is_string($GLOBALS[$name]) && $reinsert_value == true) {
      $field .= ' value="' . zen_output_string(stripslashes($GLOBALS[$name])) . '"';
    }

So, I changed $name to $value and the text box now has the correct value in it.

Now, I'm reluctant to leave it this way because this function is WIDELY used throughout the programming.

My question, is this a good fix and a BUG?

I have no idea where the search engine NOTIFY system is located nor do I understand how the "watcher class" system works...so I couldn't analyze it.

I would appreciate some insight and help please.