Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
Originally Posted by
DrByte
Therein is the problem. It is almost NEVER getting an array. The ONLY time it gets an array is when the product-notifications screen is presented. The zillion other times that the function is used there is no array passed at all.
I submit that your proposed fix is likely to cause the entire function to not return the right results, thus preventing normal operation of the majority of cases where this function is called.
Thus, its NOT SAFE to be used on live sites, unless of course you want to encounter lost sales and poor customer experience while shopping.
Fair point, then you just add a test for an array before it
A quick example is below
PHP Code:
$valueStr=0
if (isarray($value)) {
$valueStr=count($value)
}else {
$valueStr=strlen($value)
}
if ( (!in_array($key, $exclude_array)) && $valueStr > 0) && ($key != 'main_page') && ($key != zen_session_name()) && ($key != 'error') && ($key != 'x') && ($key != 'y') ) {
if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
Originally Posted by
torvista
Thanks for the interest.
This is exactly what I have in the live shop code:
PHP Code:
while (list($key, $value) = each($_GET)) {
if (is_array($value)) trigger_error('GET param found to be array: ' . print_r($value, true) . ' --- contents of GET: ' . print_r($_GET, true));//steve looking for reason, as per http://www.zen-cart.com/forum/showthread.php?t=176804
//if ( (strlen($value) > 0) && ($key != 'main_page') && ($key != zen_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) {//steve original line
if ( (!in_array($key, $exclude_array)) && (strlen($value) > 0) && ($key != 'main_page') && ($key != zen_session_name()) && ($key != 'error') && ($key != 'x') && ($key != 'y') ) {//steve this line edited to stop debug error as per http://www.zen-cart.com/forum/showthread.php?p=1070316#post1070316
if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) {
You just forgot to remove the line containing trigger_error call.
Re: PHP Warning: strlen() expects parameter 1 to be string
Quote:
You just forgot to remove the line containing trigger_error call.
You mean the debug was caused by the info, not the original fault!
Doh! :bangin:
Re: PHP Warning: strlen() expects parameter 1 to be string
What were the actual messages in the most recently logs? If they weren't text generated by the trigger_error() call you had in your code, then that's not the issue.
Re: PHP Warning: strlen() expects parameter 1 to be string
Since the solution posted in post 16, the debug "errors" have indeed just been the output of the error trigger, I just didn't think about it long enough to realise!
Quote:
15-Dec-2011 15:45:48] PHP Notice: GET param found to be array: Array
(
[0] => 136
)
--- contents of GET: Array
(
[main_page] => index
[action] => notify
[notify] => Array
(
[0] => 136
)
)
in blah blah.
Re: PHP Warning: strlen() expects parameter 1 to be string
I understand this error "doesn't matter" but as the fix included in 1.5 does not work (at least on my site), how can I stop this debug error being created (on most sales)?
Its the only fault I get and it's an unnecessary maintenance task to have to check and delete them continually.
Re: PHP Warning: strlen() expects parameter 1 to be string
Quick and dirty idea: if you and your customers don't actually use the product-notification feature, turn it off and/or delete that form from the checkout-success template, and then none of those inputs will trigger the problems you're complaining about.
Re: PHP Warning: strlen() expects parameter 1 to be string
Thanks. I appreciate this is a less than minor problem...and I'll avoid it as you suggest.
Nonetheless I am curious to know why the fix doesn't work (is it just my site?) or does it require a more complicated fix?
I am used to Zen Cart having no errors at all so this stands out.
regards
Steve
Re: PHP Warning: strlen() expects parameter 1 to be string
Try this replacement code as the fix:
Code:
function zen_get_all_get_params($exclude_array = '', $search_engine_safe = true) {
if (!is_array($exclude_array)) $exclude_array = array();
$exclude_array = array_merge($exclude_array, array(zen_session_name(), 'main_page', 'error', 'x', 'y'));
$get_url = '';
if (is_array($_GET) && (sizeof($_GET) > 0)) {
reset($_GET);
while (list($key, $value) = each($_GET)) {
if (is_array($value) || in_array($key, $exclude_array)) continue;
if (strlen($value) > 0) {
$get_url .= zen_sanitize_string($key) . '=' . rawurlencode(stripslashes($value)) . '&';
}
}
}
while (strstr($get_url, '&&')) $get_url = str_replace('&&', '&', $get_url);
while (strstr($get_url, '&&')) $get_url = str_replace('&&', '&', $get_url);
return $get_url;
}
Suitable for v1.3.9a thru v1.5.0
Fix included in v1.5.1