PDA

View Full Version : سوال: مشکل در php 5.4



2222222
پنج شنبه 10 مرداد 1392, 21:09 عصر
سلام
این اسکریپت با php 5.4 مشکل داره و تو خط 17 این ارور را میده
Warning: Illegal string offset 'action' in /home/*****/public_html/index.php on line 17
دوستان ممکنه راهنمایی کنند این خط 17 سازگار بشه با نسخه php ?
ممنون

<?
/*
Virtual Freer
http://freer.ir/virtual

Copyright (c) 2011 Mohammad Hossein Beyram, freer.ir

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License v3 (http://www.gnu.org/licenses/gpl-3.0.html)
as published by the Free Software Foundation.
*/
//------------------ Load Configuration
include 'include/configuration.php';
//------------------ Start Smarty
include 'include/startSmarty.php';

if($post['action'] != '' || $get['action'] != '')
{
if($post['action'] == '')
{
$data[action] = $get['action'];
$data[card] = $get['card'];
$data[qty] = $get['qty'];
$data[gateway] = $get['gateway'];
$data[email] = $get['email'];
$data[mobile] = $get['mobile'];
$noJavaScript = 1;
} else {
$data[action] = $post['action'];
$data[card] = $post['card'];
$data[qty] = $post['qty'];
$data[gateway] = $post['gateway'];
$data[email] = $post['email'];
$data[mobile] = $post['mobile'];
$noJavaScript = 0;
}
}
if ($data[action] == "payit")
{
if (!$data[card])
$error .= 'کارتی انتخاب نکرده‌اید.‌<br />';
if (!$data[qty])
$error .= 'تعداد کارت درخواستی مشخص نشده است.‌<br />';
if ($data[card] AND $data[qty])
{
$count_query = 'SELECT COUNT(*) FROM `card` WHERE `card_product` = "'.$data[card].'" AND (`card_res_time` < "'.($now-(60*$config[card][reserveExpire])).'" OR `card_res_time` = "") AND `card_status` = "1" AND `card_show` = "1"';
$count_card = $db->fetch($count_query);
$total_card = $count_card['COUNT(*)'];
if ($total_card < $data[qty])
if ($total_card != 0)
$error .= 'متاسفانه تعداد کارت درخواستی شما در حال حاضر موجود نمی‌باشد٬ شما الان می‌توانید حداکثر '.Convertnumber2farsi($total_card).' کارت از این نوع سفارش دهید.<br />';
else
$error .= 'متاسفانه کارت درخواستی شما در حال حاضر موجود نمی‌باشد.‌<br />';
}
if (!$data[gateway])
$error .= 'دروازه پرداخت را مشخص نکرده اید.‌<br />';

$input_validate = $db->retrieve('config_input_validate','config','config_ id',1);
if ($input_validate)
{
if (!$data[email] AND !$data[mobile])
$error .= 'برای استفاده از پشتیبانی سایت ایمیل یا شماره همراه خود را وارد کنید.‌<br />';
if ($data[email] AND filter_var($data[email], FILTER_VALIDATE_EMAIL)== false)
$error .= 'ایمیل وارد شده نامعتبر است.<br />';
if ($data[mobile] AND !eregi("^09([0-9]{9})$", $data[mobile]))
$error .= "شماره همراه نامعتبر است.<br />";
}
if($error)
echo $error.'__2';
else
{
$insert[payment_user] = $request[PHPSESSID];
$insert[payment_email] = $data[email];
$insert[payment_mobile] = $data[mobile];
$insert[payment_amount] = $db->retrieve('product_price','product','product_id',$d ata[card])*$data[qty];
$insert[payment_gateway] = $data[gateway];
$insert[payment_time] = $now;
$insert[payment_ip] = $server[REMOTE_ADDR];

$sql = $db->queryInsert('payment', $insert);
$db->execute($sql);
$payment_id = mysql_insert_id();

$randlen = 9-strlen($payment_id);
$update[payment_rand] = $payment_id.get_rand_id($randlen);
$sql = $db->queryUpdate('payment', $update, 'WHERE `payment_id` = "'.$payment_id.'" LIMIT 1;');
$db->execute($sql);
$random = $update[payment_rand];
unset($update);

$update[card_customer_email] = $data[email];
$update[card_customer_mobile] = $data[mobile];
$update[card_res_user] = $request[PHPSESSID];
$update[card_res_time] = $now;
$update[card_payment_id] = $payment_id;
$sql = $db->queryUpdate('card', $update, 'WHERE `card_product` = "'.$data[card].'" AND (`card_res_time` < "'.($now-(60*$config[card][reserveExpire])).'" OR `card_res_time` = "") AND `card_status` = "1" AND `card_show` = "1" LIMIT '.$data[qty].';');
$db->execute($sql);

echo 'gateway.php?random='.$random.'__1';
}
exit;
}

$query = 'SELECT * FROM `category` WHERE `category_parent_id` = "0" ORDER BY `category_order`';
$categories = $db->fetchAll($query);
if ($categories)
foreach ($categories as $key => $category)
{
if ($categories[$key][category_image])
$categories[$key][category_image] = $config[MainInfo][url].$config[MainInfo][upload][image].'resized/category_'.$category[category_image];
$query = 'SELECT * FROM `product` WHERE `product_category` = "'.$category[category_id].'" ORDER BY `product_id` ASC';
$categories[$key][products] = $db->fetchAll($query);
if ($categories[$key][products])
foreach ($categories[$key][products] as $product_key => $product)
{
$count_query = 'SELECT COUNT(*) FROM `card` WHERE `card_product` = "'.$product[product_id].'" AND (`card_res_time` < "'.($now-(60*$config[card][reserveExpire])).'" OR `card_res_time` = "") AND `card_status` = "1" AND `card_show` = "1"';
$count_card = $db->fetch($count_query);
$total_card = $count_card['COUNT(*)'];
$categories[$key][products][$product_key][counter] = $total_card;
}
}

$query = 'SELECT * FROM `plugin` WHERE `plugin_type` = "payment" AND `plugin_status` = "1"';
$payment_methods = $db->fetchAll($query);

for ($i=0;$i<768;$i=$i+32) {
$banks_logo .= '<li style="background-position: -'.$i.'px 0px;"></li>';
}

//-- نمایش صفحه
$query = 'SELECT * FROM `config` WHERE `config_id` = "1" LIMIT 1';
$config = $db->fetch($query);

$smarty->assign('config', $config);
$smarty->assign('categories', $categories);
$smarty->assign('products', $products);
$smarty->assign('payment_methods', $payment_methods);
$smarty->assign('banks_logo', $banks_logo);
$smarty->display('index.tpl');
exit;

engmmrj
پنج شنبه 10 مرداد 1392, 21:47 عصر
local اجرا می کنید ؟

2222222
پنج شنبه 10 مرداد 1392, 21:54 عصر
local اجرا می کنید ؟
خیر
این الان ناقصه و اجرا نمیشه چون فایلهای دیگه ای هم نیاز داره(اسکریپت freer.ir هست)
اما مشکل تویه خط 17 هست که طبق نسخه جدید php باید اصلاح بشه اما متاسفانه من بلد نیستم

Tarragon
پنج شنبه 10 مرداد 1392, 22:00 عصر
با سلام
بنظرم شما با isset چک کنید ببینید متغیر ارسال شده درست می شه.

2222222
پنج شنبه 10 مرداد 1392, 22:44 عصر
با سلام
بنظرم شما با isset چک کنید ببینید متغیر ارسال شده درست می شه.

یعنی به جای post بزارم isset ؟
این کارو کردم ارور رفت ولی دیگه اسکریپت کار نمیکنه:افسرده:

WOLF_MEHRDAD
پنج شنبه 10 مرداد 1392, 22:50 عصر
یعنی به جای post بزارم isset ؟
این کارو کردم ارور رفت ولی دیگه اسکریپت کار نمیکنه:افسرده:
نه منظور ایشون استفاده به صورت زیر هست :



if(isset($_POST]'do'])) }
//do some thing
}

2222222
پنج شنبه 10 مرداد 1392, 23:04 عصر
نه منظور ایشون استفاده به صورت زیر هست :



if(isset($_POST]'do'])) }
//do some thing
}


بلد نیستم اینو چجوری و کجا بزارم؟:افسرده:

sanecity
پنج شنبه 10 مرداد 1392, 23:30 عصر
سلام
همون خط 17 :

if(isset($post['action'],$get['action']))

2222222
پنج شنبه 10 مرداد 1392, 23:39 عصر
با این کد خطا میره اما دیگه اسکریپت کار نمیکنه:عصبانی++:
یک نکته را هم بگم اسکریپت در حالت معمول با وجود خطا به خوبی کار میکنه فقط اون خطا تو چشم هست
میشه کاری کرد اصلا خطا را نشون نده؟

Tarragon
پنج شنبه 10 مرداد 1392, 23:53 عصر
سلام
یه راه هست (تقریبا می شه گفت پاک صورت مسئله :)


if(@$post['action'] != '' || @$get['action'] != '')

2222222
جمعه 11 مرداد 1392, 00:01 صبح
سلام
یه راه هست (تقریبا می شه گفت پاک صورت مسئله :)


if(@$post['action'] != '' || @$get['action'] != '')
ممنون خطا رفت:بوس:
ما که نفهمیدیم این خطا برا چی بود ولی اگه کسی فهمید بگه ما هم یاد بگیریم:متفکر:

sanecity
جمعه 11 مرداد 1392, 00:31 صبح
اینو بزار توی htaccess تا دیگه هیچ خطایی توی سایت نبینی
برای امنیت سایت هم بهتره

# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

2222222
جمعه 11 مرداد 1392, 00:50 صبح
اینو بزار توی htaccess تا دیگه هیچ خطایی توی سایت نبینی
برای امنیت سایت هم بهتره

# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

گزاشتم اما ارور میده و سایت بالا نمیاد
Internal Server Error

sanecity
جمعه 11 مرداد 1392, 01:05 صبح
http://perishablepress.com/advanced-php-error-handling-via-htaccess/