• Добро пожаловать на инвестиционный форум!

    Во всем многообразии инвестиций трудно разобраться. MMGP станет вашим надежным помощником и путеводителем в мире инвестиций. Только самые последние тренды, передовые технологии и новые возможности. 400 тысяч пользователей уже выбрали нас. Самые актуальные новости, проверенные стратегии и способы заработка. Сюда люди приходят поделиться своим опытом, найти и обсудить новые перспективы. 16 миллионов сообщений, оставленных нашими пользователями, содержат их бесценный опыт и знания. Присоединяйтесь и вы!

    Впрочем, для начала надо зарегистрироваться!
  • 🐑 Моисей водил бесплатно. А мы платим, хотя тоже планируем работать 40 лет! Принимай участие в партнеской программе MMGP
  • 📝 Знаешь буквы и умеешь их компоновать? Платим. Дорого. Бессрочная акция от MMGP: "ОПЛАТА ЗА СООБЩЕНИЯ"

Помогите пожалуйста! Проблема с обработчиком!!!

Troodi

Интересующийся
Регистрация
18.07.2014
Сообщения
6
Реакции
0
Поинты
0.000
Вот в чем проблема: прикрепил платежную систему 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
)
 

Progrer

Интересующийся
Регистрация
20.09.2014
Сообщения
10
Реакции
1
Поинты
0.000
Меня смущат эта строка:
$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]."'";
 
Последнее редактирование:

cloudopia

Интересующийся
Регистрация
21.09.2014
Сообщения
10
Реакции
4
Поинты
0.000
Ошибка имхо в том, что индексы массивов не закавычены. В 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');
 
Последнее редактирование:

GoldScript

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