[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оператор UPDATE не производит эффекта
arad
Здравствуйте,Уважаемые пользователи форума!Моя проблема заключается вот в чём,решил подключить платёжную систему,по задумке скрипт обработчик должен оплачиваемую сумму прибавить к столбцу 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']) {

// Действия по зачислению платежа. A1Lite - Ключи совпали.
$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$message = 'Платеж не принят!';


}
jimport('joomla.error.log');
$log =& JLog::getInstance();
$log->addEntry(array('comment' => $message, 'status' => 0));

?>

Mysql_error выдаёт:
Цитата
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Что бы вы посоветовали сделать,для того,что бы хорошо работало?



Спустя 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 написал(а):
Фигней не страдайте, там ветка условия не выполняется в скрипте biggrin.gif

Спустя 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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

echo $message = 'Платеж не принят!';
}


Цитата
if ($params['check']) {

что содержит???

Спустя 1 минута, 36 секунд (26.02.2012 - 20:46) arad написал(а):
Цитата (Игорь_Vasinsky @ 26.02.2012 - 17:44)
Цитата
else {

  // Действия по ошибке. A1Lite - Ключи не совпали.

  $message  = 'Платеж не принят!';


}


else {

// Действия по ошибке. A1Lite - Ключи не совпали.

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 написал(а):
это супер пупер нубский приём чтоб узнать у ТС выполнилось ли условие biggrin.gif

Спустя 2 минуты, 47 секунд (26.02.2012 - 20:55) Krevedko написал(а):
Цитата (Guest @ 26.02.2012 - 17:31)
Фигней не страдайте, там ветка условия не выполняется в скрипте biggrin.gif

если бы ветка не выполнялась, то и ошибки бы не было )

Спустя 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 написал(а):
biggrin.gif biggrin.gif

Спустя 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 написал(а):
biggrin.gif а как ТС в PMA успешный запрос отправлялто???

Спустя 53 секунды (26.02.2012 - 21:23) Игорь_Vasinsky написал(а):
скрипт остановиться если функция вернёт false т.е. не сможет выбрать базу тк её нет, например

Спустя 6 секунд (26.02.2012 - 21:23) inpost написал(а):
arad
Шило на мыло? smile.gif

Спустя 1 минута, 8 секунд (26.02.2012 - 21:24) arad написал(а):
Цитата (Игорь_Vasinsky @ 26.02.2012 - 18:22)
biggrin.gif а как ТС в PMA успешный запрос отправлялто???

UPDATE Accounts1 SET Donate=Donate+10 WHERE ID=4

Спустя 1 минута, 11 секунд (26.02.2012 - 21:25) Игорь_Vasinsky написал(а):
я и не сомневался biggrin.gif я для гостя написал, он считает что твоей БД нет.

Спустя 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 написал(а):
да он издевается над нами biggrin.gif

Спустя 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 написал(а):
в конец т.е. biggrin.gif а то у тя заголовки не работаеют и сессия не стартует biggrin.gif

Спустя 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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$message = 'Платеж не принят!';


}

Спустя 7 минут, 20 секунд (27.02.2012 - 18:22) arad написал(а):
Цитата (Visman @ 27.02.2012 - 15:15)
Цитата (arad @ 27.02.2012 - 23:06)
Хм,не много не понял,а почему не выполняется?

$params['check'] пуст, судя по распечатке массива.
Следовательно условие не является истинной.
Выполняется ветка
else {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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'])) {

// Действия по зачислению платежа. A1Lite - Ключи совпали.
$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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'])) {

// Действия по зачислению платежа. A1Lite - Ключи совпали.
$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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']), // ID транзакции
'name' => _yusoft_plain($q['name']), // название товара или услуги
'comment' => _yusoft_plain($q['comment']), // комментарий платежа
'partner_id' => _yusoft_plain($q['partner_id']), // ваш ID
'service_id' => _yusoft_plain($q['service_id']), // ID сервиса
'order_id' => _yusoft_plain($q['order_id']), // ID заказа
'type' => _yusoft_plain($q['type']), // тип платежа (“sms”, “wm”, “terminal”)
'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']); // E-mail плательщика
$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) {

// Действия по зачислению платежа. A1Lite - Ключи совпали.
$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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) {

// Действия по зачислению платежа. A1Lite - Ключи совпали.
$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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) {

// Действия по зачислению платежа. A1Lite - Ключи совпали.
$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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) {

// Действия по зачислению платежа. A1Lite - Ключи совпали.
$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 {

// Действия по ошибке. A1Lite - Ключи не совпали.

$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']), // ID транзакции
'name' => _yusoft_plain($q['name']), // название товара или услуги
'comment' => _yusoft_plain($q['comment']), // комментарий платежа
'partner_id' => _yusoft_plain($q['partner_id']), // ваш ID
'service_id' => _yusoft_plain($q['service_id']), // ID сервиса
'order_id' => _yusoft_plain($q['order_id']), // ID заказа
'type' => _yusoft_plain($q['type']), // тип платежа (“sms”, “wm”, “terminal”)
'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']); // E-mail плательщика
$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']), // ID транзакции
'name' => _yusoft_plain($q['name']), // название товара или услуги
'comment' => _yusoft_plain($q['comment']), // комментарий платежа
'partner_id' => _yusoft_plain($q['partner_id']), // ваш ID
'service_id' => _yusoft_plain($q['service_id']), // ID сервиса
'order_id' => _yusoft_plain($q['order_id']), // ID заказа
'type' => _yusoft_plain($q['type']), // тип платежа (“sms”, “wm”, “terminal”)
'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']); // E-mail плательщика
$params['phone_number'] = _yusoft_plain($q['phone_number']); // телефон плательщика

return $params;
}

я предполагаю, что используется joomla и работа с базой она ведет через это JFactory::getDBO().
Чтобы избавиться от косяков надо переписать обсуждаемый код по аналогии.

Да,этот модуль,специально для этой версии joomla.Я лишь попытался добавить туда запись в mysql.Модуль писался специально для версии,которая у меня.Поэтому,ошибок по идеи не должно быть.
Прочитал в wiki системы вот что
Внимание! При тестировании сервиса A1Lite, в личном кабинете в код к этим параметрам предпоследним (до параметра key) необходимо добавить параметр test со значением 1, который надо учитывать при определении параметра check.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.