Здравствуйте,Уважаемые пользователи форума!Моя проблема заключается вот в чём,решил подключить платёжную систему,по задумке
скрипт обработчик должен оплачиваемую сумму прибавить к столбцу Donate значение переменной $test1.Информация в эти переменные должна записываться из POST запроса.Так-же стоит условие,по которому информация в столбце Donate должна обновляться,в той строке,где ID равна значению переменной $test2. При тестировании,выяснилось,что в базу ничего не записывается,то есть,какое было значение у Donate,такое и осталось.
Вот сам
скрипт обработчика:
<?php
require_once ('parse.inc.php');
$q = $_POST;
$params = _yusoft_parse($q);
$hostname = "*****";
$username = "*****";
$password = "******";
$dbName = "user_arad";
$userstable = "Accounts1";
$test1 = $params['partner_income'];
$test2 = $params['name'];
if ($params['check']) {
$link_db = MYSQL_CONNECT($hostname,$username,$password)
OR DIE("Не могу создать соединение ");
mysql_select_db($dbName, $link_db);
$request = mysql_query("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."", $link_db) or die(mysql_error());
}
else {
$message = 'Платеж не принят!';
}
jimport('joomla.error.log');
$log =& JLog::getInstance();
$log->addEntry(array('comment' => $message, 'status' => 0));
?>
Mysql_error выдаёт:
Что бы вы посоветовали сделать,для того,что бы хорошо работало?
Спустя 20 минут, 45 секунд (26.02.2012 - 19:24) Rand написал(а):
Скорее всего $test2 не содержит значения.
Спустя 14 минут, 19 секунд (26.02.2012 - 19:39) arad написал(а):
Цитата (Rand @ 26.02.2012 - 16:24) |
Скорее всего $test2 не содержит значения. |
Попробовал протестировать вот так
mysql_query("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=4", $link_db);
Всё равно запись не идёт.
Спустя 13 минут, 11 секунд (26.02.2012 - 19:52) Guest написал(а):
Перед строкой
$request = mysql_query("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."", $link_db) or die(mysql_error());
поставь вывод
die("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."");
и посмотри, что он тебе выдаст.
Спустя 1 минута, 59 секунд (26.02.2012 - 19:54) Krevedko написал(а):
Блин. всегда надо запрос перед выполнением записывать в переменную $sql, чтобы можно было написать echo $sql и посмотреть, что в ней.
Спустя 17 минут, 28 секунд (26.02.2012 - 20:11) arad написал(а):
Цитата (Krevedko @ 26.02.2012 - 16:54) |
Блин. всегда надо запрос перед выполнением записывать в переменную $sql, чтобы можно было написать echo $sql и посмотреть, что в ней. |
Вот так:
$sql = mysql_query("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."", $link_db);
echo $sql;
имеете в виду?
Если да,то на экран ничего не выводит :(
Спустя 4 минуты, 29 секунд (26.02.2012 - 20:16) Guest написал(а):
die("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."");
Спустя 4 минуты, 28 секунд (26.02.2012 - 20:20) arad написал(а):
Цитата (Guest @ 26.02.2012 - 17:16) |
die("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2.""); |
Попробовал,ничего не выводит.Или я что то не правильно делаю?
die("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."");
mysql_query("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."", $link_db) or die(mysql_error());
Спустя 3 минуты, 5 секунд (26.02.2012 - 20:23) Игорь_Vasinsky написал(а):
echo "UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2;
что вывело
Спустя 3 минуты, 49 секунд (26.02.2012 - 20:27) Krevedko написал(а):
Цитата (arad @ 26.02.2012 - 17:11) |
Цитата (Krevedko @ 26.02.2012 - 16:54) | Блин. всегда надо запрос перед выполнением записывать в переменную $sql, чтобы можно было написать echo $sql и посмотреть, что в ней. |
Вот так: $sql = mysql_query("UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."", $link_db); echo $sql; имеете в виду? Если да,то на экран ничего не выводит :( |
$sql = "UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2."";
die($sql);
$sql = mysql_query($sql);
смотришь, чинишь...потом die убираешь
Спустя 51 секунда (26.02.2012 - 20:28) Игорь_Vasinsky написал(а):
Цитата |
$sql = "UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2.""; |
$sql = "UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2;
Спустя 2 минуты, 4 секунды (26.02.2012 - 20:30) Krevedko написал(а):
ну да ну да. я скопировал, не смотрел
Спустя 55 секунд (26.02.2012 - 20:31) Guest написал(а):
Фигней не страдайте, там ветка условия не выполняется в
скрипте
Спустя 7 минут, 24 секунды (26.02.2012 - 20:38) arad написал(а):
echo "UPDATE Accounts1 SET Donate=Donate+".(int)$test1." WHERE ID=".(int)$test2;
Выводит
Цитата |
UPDATE Accounts1 SET Donate=Donate+50 WHERE ID=4 |
Но почему то в базу не записывается
Спустя 1 минута, 31 секунда (26.02.2012 - 20:40) Guest написал(а):
А в таблице Accounts1 есть строка с ID=4 на момент ее обновления этой командой?
Спустя 3 минуты, 26 секунд (26.02.2012 - 20:43) arad написал(а):
Цитата (Guest @ 26.02.2012 - 17:40) |
А в таблице Accounts1 есть строка с ID=4 на момент ее обновления этой командой? |
Да,если это выполнить через sql запрос в pma,то всё проходит успешно
Спустя 1 минута, 2 секунды (26.02.2012 - 20:44) Игорь_Vasinsky написал(а):
Цитата |
else {
// Действия по ошибке. A1Lite - Ключи не совпали.
$message = 'Платеж не принят!';
} |
else {
echo $message = 'Платеж не принят!';
}
Цитата |
if ($params['check']) { |
что содержит???
Спустя 1 минута, 36 секунд (26.02.2012 - 20:46) arad написал(а):
Цитата (Игорь_Vasinsky @ 26.02.2012 - 17:44) |
Цитата | else {
// Действия по ошибке. A1Lite - Ключи не совпали.
$message = 'Платеж не принят!';
} |
else {
echo $message = 'Платеж не принят!'; }
Цитата | if ($params['check']) { |
что содержит???
|
Данные с post запроса от платёжной системы
Спустя 50 секунд (26.02.2012 - 20:47) Guest написал(а):
echo $message = 'Платеж не принят!';
Что за хитрый план написал?
Спустя 3 минуты, 12 секунд (26.02.2012 - 20:50) arad написал(а):
Цитата (Guest @ 26.02.2012 - 17:47) |
echo $message = 'Платеж не принят!'; Что за хитрый план написал? |
Это должно выводить на странице об успешной оплате
Спустя 2 минуты, 25 секунд (26.02.2012 - 20:52) Игорь_Vasinsky написал(а):
это супер пупер нубский приём чтоб узнать у ТС выполнилось ли условие
Спустя 2 минуты, 47 секунд (26.02.2012 - 20:55) Krevedko написал(а):
Цитата (Guest @ 26.02.2012 - 17:31) |
Фигней не страдайте, там ветка условия не выполняется в скрипте |
если бы ветка не выполнялась, то и ошибки бы не было )
Спустя 4 минуты, 20 секунд (26.02.2012 - 21:00) Игорь_Vasinsky написал(а):
Спустя 4 минуты, 9 секунд (26.02.2012 - 21:04) Guest написал(а):
mysql_select_db($dbName, $link_db);
замени на
if (!@mysql_select_db($dbName, $link_db))
die('Нема базы!');
Спустя 2 минуты, 36 секунд (26.02.2012 - 21:06) Игорь_Vasinsky написал(а):
Спустя 7 минут (26.02.2012 - 21:13) arad написал(а):
Цитата (Guest @ 26.02.2012 - 18:04) |
mysql_select_db($dbName, $link_db); замени на
if (!@mysql_select_db($dbName, $link_db)) die('Нема базы!'); |
И что это даст?
Спустя 4 минуты, 56 секунд (26.02.2012 - 21:18) Guest написал(а):
Точную уверенность того, что к моменту выполнения последнего запроса у нас все ОК.
Спустя 2 минуты, 40 секунд (26.02.2012 - 21:21) arad написал(а):
Цитата (Guest @ 26.02.2012 - 18:18) |
Точную уверенность того, что к моменту выполнения последнего запроса у нас все ОК. |
Ну так он же завершает работу скрипта,может тогда or die?
Спустя 56 секунд (26.02.2012 - 21:22) Игорь_Vasinsky написал(а):

а как ТС в PMA успешный запрос отправлялто???
Спустя 53 секунды (26.02.2012 - 21:23) Игорь_Vasinsky написал(а):
скрипт остановиться если функция вернёт false т.е. не сможет выбрать базу тк её нет, например
Спустя 6 секунд (26.02.2012 - 21:23) inpost написал(а):
aradШило на мыло?
Спустя 1 минута, 8 секунд (26.02.2012 - 21:24) arad написал(а):
Цитата (Игорь_Vasinsky @ 26.02.2012 - 18:22) |
а как ТС в PMA успешный запрос отправлялто??? |
UPDATE Accounts1 SET Donate=Donate+10 WHERE ID=4
Спустя 1 минута, 11 секунд (26.02.2012 - 21:25) Игорь_Vasinsky написал(а):
я и не сомневался

я для гостя написал, он считает что твоей БД нет.
Спустя 22 минуты, 55 секунд (26.02.2012 - 21:48) arad написал(а):
Проблема в самом запросе или где то в скрипте?
Спустя 3 минуты, 59 секунд (26.02.2012 - 21:52) Игорь_Vasinsky написал(а):
сделай в начале кода
echo '<pre>' . print_r($params, 1) . '</pre>';
вывод сюда.
Спустя 4 минуты, 25 секунд (26.02.2012 - 21:56) Krevedko написал(а):
да он издевается над нами
Спустя 4 минуты, 52 секунды (26.02.2012 - 22:01) arad написал(а):
<pre></pre><br />
<b>Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /home2/w76hd397/public_html/modules/mod_a1pay/process.php:10) in <b>/home2/w76hd397/public_html/libraries/joomla/session/session.php</b> on line <b>423</b><br />
<br />
<b>Warning</b>: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cache limiter - headers already sent (output started at /home2/w76hd397/public_html/modules/mod_a1pay/process.php:10) in <b>/home2/w76hd397/public_html/libraries/joomla/session/session.php</b> on line <b>423</b><br />
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home2/w76hd397/public_html/modules/mod_a1pay/process.php:10) in <b>/home2/w76hd397/public_html/libraries/joomla/session/session.php</b> on line <b>426</b><br />
Вот что выдало
Спустя 59 секунд (26.02.2012 - 22:02) Игорь_Vasinsky написал(а):
в конец т.е.

а то у тя заголовки не работаеют и сессия не стартует
Спустя 18 часов, 51 минута, 51 секунда (27.02.2012 - 16:54) arad написал(а):
Цитата (Игорь_Vasinsky @ 26.02.2012 - 18:52) |
сделай в начале кода
echo '<pre>' . print_r($params, 1) . '</pre>';
вывод сюда. |
<pre>Array
(
[tid] => 1297249736
[name] => 4
[comment] =>
[partner_id] => 187471
[service_id] => 34263
[order_id] => 1
[type] => ym
[partner_income] => 10
[system_income] => 10
[check] =>
[email] =>
[phone_number] =>
)
</pre>
Вот что вывело
Спустя 20 минут, 20 секунд (27.02.2012 - 17:14) Visman написал(а):
Цитата (arad @ 27.02.2012 - 21:54) |
[check] => |
Условие
if ($params['check']) {
не выполняется.
А еще тут
$log->addEntry(array('comment' => $message, 'status' => 0));
добавляется $message, но эта переменная заполняется только в одной ветке условия!?
Спустя 51 минута, 37 секунд (27.02.2012 - 18:06) arad написал(а):
Цитата (Visman @ 27.02.2012 - 14:14) |
Цитата (arad @ 27.02.2012 - 21:54) | [check] => |
Условие if ($params['check']) { не выполняется. А еще тут $log->addEntry(array('comment' => $message, 'status' => 0)); добавляется $message, но эта переменная заполняется только в одной ветке условия!? |
Хм,не много не понял,а почему не выполняется?
Спустя 8 минут, 30 секунд (27.02.2012 - 18:15) Visman написал(а):
Цитата (arad @ 27.02.2012 - 23:06) |
Хм,не много не понял,а почему не выполняется? |
$params['check'] пуст, судя по распечатке массива.
Следовательно условие не является истинной.
Выполняется ветка
else {
$message = 'Платеж не принят!';
}
Спустя 7 минут, 20 секунд (27.02.2012 - 18:22) arad написал(а):
Цитата (Visman @ 27.02.2012 - 15:15) |
Цитата (arad @ 27.02.2012 - 23:06) | Хм,не много не понял,а почему не выполняется? |
$params['check'] пуст, судя по распечатке массива. Следовательно условие не является истинной. Выполняется ветка else {
$message = 'Платеж не принят!';
} |
Тоесть получается post запрос с параметром chek не доходит до обработчика?
Спустя 18 минут, 16 секунд (27.02.2012 - 18:40) Visman написал(а):
Цитата (arad @ 27.02.2012 - 23:22) |
Тоесть получается post запрос с параметром chek не доходит до обработчика? |
У меня встречный вопрос: Что должно содержаться в $params['check']? Какое значение, если с данными все ок?
Или этот элемент просто должен присутствовать в массиве, когда все нормально и отсутствовать, когда произошла ошибка?
Спустя 10 минут, 37 секунд (27.02.2012 - 18:51) arad написал(а):
Цитата (Visman @ 27.02.2012 - 15:40) |
Цитата (arad @ 27.02.2012 - 23:22) | Тоесть получается post запрос с параметром chek не доходит до обработчика? |
У меня встречный вопрос: Что должно содержаться в $params['check']? Какое значение, если с данными все ок? Или этот элемент просто должен присутствовать в массиве, когда все нормально и отсутствовать, когда произошла ошибка?
|
POST запрос отправляет значение chek вот такое:
check=c25f9b465f00286b4019a6fb5f80699a
Насколько я понимаю,это персональный индификатор оплаты
Спустя 7 минут, 46 секунд (27.02.2012 - 18:59) Visman написал(а):
<?php
require_once ('parse.inc.php');
$params = _yusoft_parse($_POST);
$hostname = "*****";
$username = "*****";
$password = "******";
$dbName = "user_arad";
$userstable = "Accounts1";
$test1 = (int)$params['partner_income'];
$test2 = (int)$params['name'];
if (!empty($params['check'])) {
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
if (!@mysql_select_db($dbName, $link_db)) die('База '.$dbName.' отсутствует!');
$request = mysql_query("UPDATE ".$userstable." SET Donate=Donate+".$test1." WHERE ID=".$test2."", $link_db) or die('Ошибка запроса UPDATE - '.mysql_error());
} else {
$message = 'Платеж не принят!';
die($message);
}
jimport('joomla.error.log');
$log =& JLog::getInstance();
$log->addEntry(array('comment' => $message, 'status' => 0));
?>
Что выведет этот код?
Спустя 6 минут, 54 секунды (27.02.2012 - 19:05) arad написал(а):
Цитата (Visman @ 27.02.2012 - 15:59) |
<?php
require_once ('parse.inc.php');
$params = _yusoft_parse($_POST); $hostname = "*****"; $username = "*****"; $password = "******"; $dbName = "user_arad"; $userstable = "Accounts1";
$test1 = (int)$params['partner_income']; $test2 = (int)$params['name'];
if (!empty($params['check'])) {
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение "); if (!@mysql_select_db($dbName, $link_db)) die('База '.$dbName.' отсутствует!'); $request = mysql_query("UPDATE ".$userstable." SET Donate=Donate+".$test1." WHERE ID=".$test2."", $link_db) or die('Ошибка запроса UPDATE - '.mysql_error()); } else {
$message = 'Платеж не принят!'; die($message);
} jimport('joomla.error.log'); $log =& JLog::getInstance(); $log->addEntry(array('comment' => $message, 'status' => 0));
?>
Что выведет этот код? |
Это скрипт обработчик.Он обрабатывает платёж от клиента и записывает сумму которую он оплатил в бд.Сумма находится в переменной $test1.В случае успешного платежа платёжная система перенаправляет на страницу успешного платежа и выводит переменную $message
Спустя 3 минуты, 29 секунд (27.02.2012 - 19:09) Visman написал(а):
Цитата (Visman @ 27.02.2012 - 23:59) |
Что выведет этот код? |
Я попросил этот (именно этот, измененный код) выполнить, чтобы удостовериться, что ошибка возникает в той строке на которую все нацелены.
Спустя 4 минуты (27.02.2012 - 19:13) arad написал(а):
Цитата (Visman @ 27.02.2012 - 16:09) |
Цитата (Visman @ 27.02.2012 - 23:59) | Что выведет этот код? |
Я попросил этот (именно этот, измененный код) выполнить, чтобы удостовериться, что ошибка возникает в той строке на которую все нацелены.
|
Выдало:
Платеж не принят!
.
Получается,действительно,выполняется
else {
$message = 'Платеж не принят!';
die($message);
}
Спустя 5 минут, 29 секунд (27.02.2012 - 19:18) Visman написал(а):
arad, получается что так.
Т.е. возвращается пустой $params['check'].
Спустя 2 минуты, 14 секунд (27.02.2012 - 19:21) arad написал(а):
Цитата (Visman @ 27.02.2012 - 16:18) |
arad, получается что так. Т.е. возвращается пустой $params['check']. |
Немного не понятно,он не приходит от сервиса или это проблема в скрипте?
Спустя 6 минут, 39 секунд (27.02.2012 - 19:27) Visman написал(а):
В
скрипте обработкой данных занимается эта функция
$params = _yusoft_parse($_POST);
Т.е. берет данные переданные методом $_POST и как-то их обработов кидает в массив $params.
Поставь перед этой строкой код
echo '<pre>' . print_r($_POST, 1) . '</pre>';
die();
Увидишь, что приходит от сервиса.
Спустя 4 минуты, 19 секунд (27.02.2012 - 19:32) arad написал(а):
Цитата (Visman @ 27.02.2012 - 16:27) |
В скрипте обработкой данных занимается эта функция
$params = _yusoft_parse($_POST); Т.е. берет данные переданные методом $_POST и как-то их обработов кидает в массив $params. Поставь перед этой строкой код
echo '<pre>' . print_r($_POST, 1) . '</pre>'; die(); Увидишь, что приходит от сервиса. |
<pre>Array
(
[tid] => 1374321841
[name] => 4
[comment] =>
[partner_id] => 187471
[service_id] => 34263
[order_id] => 1
[type] => sms
[partner_income] => 9.5
[system_income] => 10
[test] => 1
[check] => 099eec717108f3620a0475fcc566d68a
)
</pre>
От сервиса cheсk всё таки приходит.Хм,где же тут проблема?
Всё же вроде правильно.
Спустя 3 минуты, 25 секунд (27.02.2012 - 19:35) Visman написал(а):
Разбирай функцию _yusoft_parse.
Спустя 5 минут, 58 секунд (27.02.2012 - 19:41) arad написал(а):
Цитата (Visman @ 27.02.2012 - 16:35) |
Разбирай функцию _yusoft_parse. |
Мне кажется или с функцией действительно что то не так?
Я имею ввиду,если в
$params = array(
нет параметра check?
function _yusoft_parse($q) {
jimport('joomla.html.parameter');
$database =& JFactory::getDBO();
$params = $database->GetOne("SELECT params FROM #__modules WHERE module='mod_a1pay'");
preg_match('/a1pay_skey=(\S+)/i', $params, $match);
$skey = $match[1];
$params = array(
'tid' => _yusoft_plain($q['tid']),
'name' => _yusoft_plain($q['name']),
'comment' => _yusoft_plain($q['comment']),
'partner_id' => _yusoft_plain($q['partner_id']),
'service_id' => _yusoft_plain($q['service_id']),
'order_id' => _yusoft_plain($q['order_id']),
'type' => _yusoft_plain($q['type']),
'partner_income' => _yusoft_plain($q['partner_income']),
'system_income' => _yusoft_plain($q['system_income'])
);
$check = md5(join('', array_values($params)) . $skey);
$params['check'] = ($q['check'] === $check);
$params['email'] = _yusoft_plain($q['email']);
$params['phone_number'] = _yusoft_plain($q['phone_number']);
return $params;
}
Спустя 7 минут, 5 секунд (27.02.2012 - 19:48) Visman написал(а):
Вот проверка
$params['check'] = ($q['check'] === $check);
Если все правильно, то должно возвращать
true.
Т.е. в измененном коде можно строчку
if (!empty($params['check']))
вернуть как была
if ($params['check'])
И если снова выведется
Платеж не принят!
значит присланные данные не подтверждаются функцией
_yusoft_parse.
Спустя 5 минут, 1 секунда (27.02.2012 - 19:53) arad написал(а):
Цитата (Visman @ 27.02.2012 - 16:48) |
Вот проверка
$params['check'] = ($q['check'] === $check); Если все правильно, то должно возвращать true.
Т.е. в измененном коде можно строчку
if (!empty($params['check'])) вернуть как была
if ($params['check'])
И если снова выведется
Платеж не принят! значит присланные данные не подтверждаются функцией _yusoft_parse. |
Да,выдаёт
Платеж не принят!
Спустя 9 минут, 50 секунд (27.02.2012 - 20:03) Visman написал(а):
Система передает кроме всего прочего этот элемент
[test] => 1
Возможно из-за этого идет несовпадения контрольных сумм? Инструкцию к системе прочитай, про ее тестовый режим.
Ну а первоначальный
скрипт можно проверить заменив уже
if ($params['check'])
на
if ($params['check'] || 1==1)
Спустя 10 минут, 7 секунд (27.02.2012 - 20:13) arad написал(а):
Цитата (Visman @ 27.02.2012 - 17:03) |
Система передает кроме всего прочего этот элемент
[test] => 1 Возможно из-за этого идет несовпадения контрольных сумм? Инструкцию к системе прочитай, про ее тестовый режим.
Ну а первоначальный скрипт можно проверить заменив уже
if ($params['check']) на
if ($params['check'] || 1==1) |
Не могу это
[test] => 1
найти в
скрипте.
Как сказали разработчики системы,нужно добавить параметр test со значением 1.Но я вижу,что вы где то нашли его?
Спустя 6 минут, 43 секунды (27.02.2012 - 20:20) Visman написал(а):
Вот такой проверь, он будет выполнять первую ветку даже если данные придут неправильные
<?php
require_once ('parse.inc.php');
$params = _yusoft_parse($_POST);
$hostname = "*****";
$username = "*****";
$password = "******";
$dbName = "user_arad";
$userstable = "Accounts1";
$test1 = (int)$params['partner_income'];
$test2 = (int)$params['name'];
if ($params['check'] || 1 == 1) {
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
if (!@mysql_select_db($dbName, $link_db)) die('База '.$dbName.' отсутствует!');
$request = mysql_query("UPDATE ".$userstable." SET Donate=Donate+".$test1." WHERE ID=".$test2."", $link_db) or die('Ошибка запроса UPDATE - '.mysql_error());
} else {
$message = 'Платеж не принят!';
die($message);
}
jimport('joomla.error.log');
$log =& JLog::getInstance();
$log->addEntry(array('comment' => $message, 'status' => 0));
?>
Спустя 5 минут (27.02.2012 - 20:25) arad написал(а):
Цитата (Visman @ 27.02.2012 - 17:20) |
Вот такой проверь, он будет выполнять первую ветку даже если данные придут неправильные
<?php
require_once ('parse.inc.php');
$params = _yusoft_parse($_POST); $hostname = "*****"; $username = "*****"; $password = "******"; $dbName = "user_arad"; $userstable = "Accounts1";
$test1 = (int)$params['partner_income']; $test2 = (int)$params['name'];
if ($params['check'] || 1 == 1) {
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение "); if (!@mysql_select_db($dbName, $link_db)) die('База '.$dbName.' отсутствует!'); $request = mysql_query("UPDATE ".$userstable." SET Donate=Donate+".$test1." WHERE ID=".$test2."", $link_db) or die('Ошибка запроса UPDATE - '.mysql_error());
} else {
$message = 'Платеж не принят!'; die($message);
} jimport('joomla.error.log'); $log =& JLog::getInstance(); $log->addEntry(array('comment' => $message, 'status' => 0));
?> |
Нет,данные всё равно не записываются
Спустя 8 минут (27.02.2012 - 20:33) Visman написал(а):
Спустя 15 минут, 13 секунд (27.02.2012 - 20:48) arad написал(а):
Цитата (Visman @ 27.02.2012 - 17:33) |
Текст ошибки какой? |
Ничего не выводит
Спустя 8 минут, 44 секунды (27.02.2012 - 20:57) Visman написал(а):
В логах ошибок на сервере есть что?
Если нет, то запускай этот вариант
<?php
require_once ('parse.inc.php');
$params = _yusoft_parse($_POST);
$hostname = "*****";
$username = "*****";
$password = "******";
$dbName = "user_arad";
$userstable = "Accounts1";
$test1 = (int)$params['partner_income'];
$test2 = (int)$params['name'];
if ($params['check'] || 1 == 1) {
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
if (!@mysql_select_db($dbName, $link_db)) die('База '.$dbName.' отсутствует!');
$request = mysql_query("UPDATE ".$userstable." SET Donate=Donate+".$test1." WHERE ID=".$test2."", $link_db) or die('Ошибка запроса UPDATE - '.mysql_error());
die('Запись данных прошла успешно');
} else {
$message = 'Платеж не принят!';
die($message);
}
jimport('joomla.error.log');
$log =& JLog::getInstance();
$log->addEntry(array('comment' => $message, 'status' => 0));
?>
Спустя 8 минут, 29 секунд (27.02.2012 - 21:05) arad написал(а):
Цитата (Visman @ 27.02.2012 - 17:57) |
В логах ошибок на сервере есть что?
Если нет, то запускай этот вариант
<?php
require_once ('parse.inc.php');
$params = _yusoft_parse($_POST); $hostname = "*****"; $username = "*****"; $password = "******"; $dbName = "user_arad"; $userstable = "Accounts1";
$test1 = (int)$params['partner_income']; $test2 = (int)$params['name'];
if ($params['check'] || 1 == 1) {
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение "); if (!@mysql_select_db($dbName, $link_db)) die('База '.$dbName.' отсутствует!'); $request = mysql_query("UPDATE ".$userstable." SET Donate=Donate+".$test1." WHERE ID=".$test2."", $link_db) or die('Ошибка запроса UPDATE - '.mysql_error());
die('Запись данных прошла успешно');
} else {
$message = 'Платеж не принят!'; die($message);
} jimport('joomla.error.log'); $log =& JLog::getInstance(); $log->addEntry(array('comment' => $message, 'status' => 0));
?> |
Вот логи:
[27-Feb-2012 20:34:26] PHP Parse error: syntax error, unexpected T_INT_CAST, expecting T_STRING or T_VARIABLE or '$' in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 15
[27-Feb-2012 20:44:05] PHP Parse error: syntax error, unexpected T_INT_CAST, expecting T_STRING or T_VARIABLE or '$' in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 15
[27-Feb-2012 21:07:34] PHP Warning: mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 110 in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 18
[27-Feb-2012 21:15:33] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home2/w76hd397/public_html/modules/mod_a1pay/parse.inc.php on line 28
[27-Feb-2012 21:16:13] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home2/w76hd397/public_html/modules/mod_a1pay/parse.inc.php on line 28
[27-Feb-2012 21:23:37] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home2/w76hd397/public_html/modules/mod_a1pay/parse.inc.php on line 28
[27-Feb-2012 21:24:25] PHP Warning: mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 110 in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 18
[27-Feb-2012 21:50:03] PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')' in /home2/w76hd397/public_html/modules/mod_a1pay/parse.inc.php on line 28
[27-Feb-2012 21:54:08] PHP Parse error: syntax error, unexpected '(' in /home2/w76hd397/public_html/modules/mod_a1pay/parse.inc.php on line 30
[27-Feb-2012 21:54:47] PHP Parse error: syntax error, unexpected '=' in /home2/w76hd397/public_html/modules/mod_a1pay/parse.inc.php on line 30
[27-Feb-2012 21:57:29] PHP Warning: mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 110 in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 18
[27-Feb-2012 21:58:41] PHP Warning: mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 110 in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 18
Спустя 4 минуты, 48 секунд (27.02.2012 - 21:10) Visman написал(а):
Какие из ошибок относятся к обсуждаемому файлу?
Эта
[27-Feb-2012 21:58:41] PHP Warning: mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 110 in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 18
Т.е. 18 строка в файле /modules/mod_a1pay/process.
phpэто
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
или другая?
Спустя 3 минуты, 3 секунды (27.02.2012 - 21:13) arad написал(а):
Цитата (Visman @ 27.02.2012 - 18:10) |
Какие из ошибок относятся к обсуждаемому файлу? Эта
[27-Feb-2012 21:58:41] PHP Warning: mysql_connect() [<a href='function.mysql-connect'>function.mysql-connect</a>]: Lost connection to MySQL server at 'reading initial communication packet', system error: 110 in /home2/w76hd397/public_html/modules/mod_a1pay/process.php on line 18 Т.е. 18 строка в файле /modules/mod_a1pay/process.php это
$link_db = MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение "); или другая? |
На данный момент это
// Действия по зачислению платежа. A1Lite - Ключи совпали.
Может быть при редактировании я создал новую строку.
Спустя 6 минут, 7 секунд (27.02.2012 - 21:19) Visman написал(а):
На коммент система не может ругаться.
Ругается на подключение к серверу MySQL, если я правильно понимаю.
По этому коду
function _yusoft_parse($q) {
jimport('joomla.html.parameter');
$database =& JFactory::getDBO();
$params = $database->GetOne("SELECT params FROM #__modules WHERE module='mod_a1pay'");
preg_match('/a1pay_skey=(\S+)/i', $params, $match);
$skey = $match[1];
$params = array(
'tid' => _yusoft_plain($q['tid']),
'name' => _yusoft_plain($q['name']),
'comment' => _yusoft_plain($q['comment']),
'partner_id' => _yusoft_plain($q['partner_id']),
'service_id' => _yusoft_plain($q['service_id']),
'order_id' => _yusoft_plain($q['order_id']),
'type' => _yusoft_plain($q['type']),
'partner_income' => _yusoft_plain($q['partner_income']),
'system_income' => _yusoft_plain($q['system_income'])
);
$check = md5(join('', array_values($params)) . $skey);
$params['check'] = ($q['check'] === $check);
$params['email'] = _yusoft_plain($q['email']);
$params['phone_number'] = _yusoft_plain($q['phone_number']);
return $params;
}
я предполагаю, что используется joomla и работа с базой она ведет через это JFactory::getDBO().
Чтобы избавиться от косяков надо переписать обсуждаемый код по аналогии.
Спустя 16 минут, 19 секунд (27.02.2012 - 21:36) Guest написал(а):
Цитата (Visman @ 27.02.2012 - 18:19) |
На коммент система не может ругаться. Ругается на подключение к серверу MySQL, если я правильно понимаю.
По этому коду
function _yusoft_parse($q) {
jimport('joomla.html.parameter');
$database =& JFactory::getDBO(); $params = $database->GetOne("SELECT params FROM #__modules WHERE module='mod_a1pay'");
preg_match('/a1pay_skey=(\S+)/i', $params, $match); $skey = $match[1];
$params = array( 'tid' => _yusoft_plain($q['tid']), 'name' => _yusoft_plain($q['name']), 'comment' => _yusoft_plain($q['comment']), 'partner_id' => _yusoft_plain($q['partner_id']), 'service_id' => _yusoft_plain($q['service_id']), 'order_id' => _yusoft_plain($q['order_id']), 'type' => _yusoft_plain($q['type']), 'partner_income' => _yusoft_plain($q['partner_income']), 'system_income' => _yusoft_plain($q['system_income']) );
$check = md5(join('', array_values($params)) . $skey); $params['check'] = ($q['check'] === $check);
$params['email'] = _yusoft_plain($q['email']); $params['phone_number'] = _yusoft_plain($q['phone_number']);
return $params; } я предполагаю, что используется joomla и работа с базой она ведет через это JFactory::getDBO(). Чтобы избавиться от косяков надо переписать обсуждаемый код по аналогии. |
Да,этот модуль,специально для этой версии joomla.Я лишь попытался добавить туда запись в
mysql.Модуль писался специально для версии,которая у меня.Поэтому,ошибок по идеи не должно быть.
Прочитал в wiki системы вот что
Внимание! При тестировании сервиса A1Lite, в личном кабинете в код к этим параметрам предпоследним (до параметра key) необходимо добавить параметр test со значением 1, который надо учитывать при определении параметра check.