Присоединяйтесь к нашему инвестиционному форуму, на котором уже 644,916 пользователей. Чтобы получить доступ ко многим закрытым разделам и начать общение - зарегистрируйтесь прямо сейчас.
Все, что относится к Web-Программированию (PHP, Perl, JavaScript, MySQL, XML и т.д.)
Первый пост Опции темы
Старый 20.09.2014, 15:14
#1
Интересующийся
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 17.07.2014
Сообщений: 11
Благодарностей: 0
Помогите пожалуйста! Проблема с обработчиком!!!

Вот в чем проблема: прикрепил платежную систему payeer.com, окей, совершаю оплату, все отлично потом через обработчик должен идти запрос в БД но ничего не происходит баланс остаётся такой же. Деньги не добавляются. В чем может быть ошибка? На одном из сайтов это работает, а на другом вот такая фигня.


<?
include("config.php");

if (isset($_POST["m_operation_id"]) && isset($_POST["m_sign"]))
{
$m_key = "secretkey)))";
$arHash = array($_POST['m_operation_id'],
$_POST['m_operation_ps'],
$_POST['m_operation_date'],
$_POST['m_operation_pay_date'],
$_POST['m_shop'],
$_POST['m_orderid'],
$_POST['m_amount'],
$_POST['m_curr'],
$_POST['m_desc'],
$_POST['m_status'],
$m_key);
$sign_hash = strtoupper(hash('sha256', implode(":", $arHash)));
if ($_POST["m_sign"] == $sign_hash && $_POST['m_status'] == "success")
{
$update='UPDATE tb_users SET money=money+'.$_POST[m_amount].' WHERE id='.$_POST[m_orderid];
mysql_query($update);
echo $_POST['m_orderid'].'|success';
exit;
}
echo $_POST['m_orderid'].'|error';
}
?>
Вот такой обработчик в целом



Ответ обработчика:
Array
(
[REQUEST] => POST /zobrz.php HTTP/1.1
Host: seogem.ru
User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Charset:windows-1251,utf-8;q=0.7,*;q=0.7
Connection:keep-alive
Content-Length: 353
Content-Type: application/x-www-form-urlencoded


[HEADER] => Array
(
[0] => HTTP/1.1 200 OK
[Date] => Fri, 19 Sep 2014 18:46:16 GMT
[Server] => Apache
[Vary] => Accept-Encoding,User-Agent
[Keep-Alive] => timeout=1, max=100
[Connection] => Keep-Alive
[Transfer-Encoding] => chunked
[Content-Type] => text/html
)

[BODY] => |success
)
Troodi вне форума
Старый 20.09.2014, 19:35
#2
Интересующийся
 
Пол: Мужской
Инвестирую в: HYIP
Регистрация: 19.09.2014
Сообщений: 10
Благодарностей: 1
Re: Помогите пожалуйста! Проблема с обработчиком!!!

Меня смущат эта строка:
$update='UPDATE tb_users SET money=money+'.$_POST[m_amount].' WHERE id='.$_POST[m_orderid];
Вы в параметре "m_orderid" передаете ID пользователя?

добавлено через 3 минуты
вообще? там с ковычками проблемма! попробуйте так:
$update="UPDATE tb_users SET money=money+".$_POST[m_amount]." WHERE id='".$_POST[m_orderid]."'";

Последний раз редактировалось Progrer; 20.09.2014 в 19:38. Причина: Добавлено сообщение
Progrer вне форума
Старый 21.09.2014, 22:38
#3
Интересующийся
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 21.09.2014
Сообщений: 11
Благодарностей: 4
Re: Помогите пожалуйста! Проблема с обработчиком!!!

Ошибка имхо в том, что индексы массивов не закавычены. В update надо писать $_POST['m_amount'], то бишь так же, как и выше где инициализируется массив. Тоже и для параметра массива m_orderid: $_POST['m_orderid']

И еще один моментик. Этот код имхо использует устаревшую конструкцию mysql_query. Она, насколько я помню, объявлена deprecated и со временем исчезнет из php. Не лучше ли сразу подстраховаться и перейти на более современные конструкции и использовать в запросах параметры (что позволит еще и исключить sql-инъекции).
То есть примерно так:
$sql = "UPDATE tb_users SET money=money+:money WHERE id=:id";
$result = $this->db->prepare($sql);
$result->execute(array(':money'=>$_POST['m_amount'], ':id'=>$_POST['m_orderid']));

добавлено через 6 минут
Да. и $this->db, если объявляется в классе (или просто $db, если через переменную) инициализируется через PDO:
$db=new PDO('mysql:host=...;port=...;dbname=...','login',' parol');

Последний раз редактировалось cloudopia; 21.09.2014 в 22:45. Причина: Добавлено сообщение
cloudopia вне форума
Сказали спасибо 2 раз(а):
codeAgent (24.09.2014), GoldScript (23.09.2014)
Старый 23.09.2014, 22:12
#4
Любитель
 
Имя: Станислав
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 15.06.2010
Сообщений: 147
Благодарностей: 14
Re: Помогите пожалуйста! Проблема с обработчиком!!!

cloudopia - Дело говорит.

Ещё вариант MySQLi использовать, если PDO не по душе)
mzcoding вне форума
Старый 23.09.2014, 23:30
#5
Интересующийся
 
Пол: Мужской
Инвестирую в: Свой бизнес
Регистрация: 25.07.2014
Сообщений: 47
Благодарностей: 5
Re: Помогите пожалуйста! Проблема с обработчиком!!!

Это ужас, если честно. Где хоть элементарные защиты от инъекций?
Я бы ваш запрос изменил бы минимум на:
$update='UPDATE `tb_users` SET money = money + '.sprintf("%01.2f", $_POST['m_amount']).' WHERE id = '.intval($_POST['m_orderid']).' LIMIT 1';
А вообще cloudopia расписал очень все красиво. Даже для себя кое что черпанул
GoldScript вне форума
Войдите, чтобы оставить комментарий.
Быстрый переход
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста кильбан Программирование 2 05.08.2008 18:05