Почему мой пользовательский сценарий обработки IPN перестает выполняться? - PullRequest
0 голосов
/ 07 августа 2011

Я создаю собственный обработчик IPN в PHP, который проверяет данные, которые Paypal отправляет в обратной передаче, а затем вставляет некоторые из них в базу данных sqlite.

Каждая часть сценария работала раньше. Транзакции сообщаются как действительные и регистрируются. Все работает, вплоть до строки 32, которая вызывает пользовательскую функцию.

Вот строка 32: $sql = insert_query_builder("PP_Data", $keywords);

и вот как определяется функция в файле require() d:

function insert_query_builder($table, $keywords, $info = NULL) {
        $sql_1 = "INSERT INTO $table (";
        $sql_2 = ") VALUES (";
        foreach ( $keywords as $num => $keyword ) {
            if (isset($info)) {
                if ($num != (count($keywords - 1))) {
                    $sql_2 .= $db->quote($info[$keyword]) . ", ";
                    $sql_1 .= $keyword . ", ";
                } else {
                    $sql_2 .= $db->quote($info[$keyword]) . ")";
                    $sql_1 .= $keyword;
                }
            } else {
                if ($num != (count($keywords - 1))) {
                    $sql_2 .= $db->quote($_POST[$keyword]) . ", ";
                    $sql_1 .= $keyword . ", ";
                } else {
                    $sql_2 .= $db->quote($_POST[$keyword]) . ")";
                    $sql_1 .= $keyword;
                }
            }
        }
        $sql = $sql_1 . $_sql_2;
        return $sql;
}

Этот код сработал. генерируемый им оператор SQL затем используется в БД и отвечает за одну из строк в БД.

Несмотря на это, теперь он молча терпит неудачу. Сценарий работает, в противном случае.

здесь вы можете найти полные копии всех трех используемых файлов и файл журнала. Как видите, после пользовательской функции

ничего не записывает в журнал

и, когда я ставлю этот последний рабочий file_put_contents() сразу после него, он перестает работать.

Есть идеи? выполнение php -f IPNrx.php не дает вывода и регистрирует недопустимую транзакцию, как и должно быть, но не проверяет эту ветвь логики.

РЕДАКТИРОВАТЬ: есть три проблемы, две из них смертельные, одна коварная.

Во-первых, операторы if должны читать if ($num != (count($keywords) - 1)) вместо if ($num != (count($keywords - 1)))

Во-вторых, объект $ db не находится внутри области действия функции, поэтому мне нужно добавить global $db вверху функции

В-третьих, в конце есть дополнительное подчеркивание; $sql = $sql_1 . $_sql_2; должно быть $sql = $sql_1 . $sql_2;

Спасибо миллион парней. я бы никогда не нашел их без твоей помощи.

1 Ответ

0 голосов
/ 07 августа 2011

Эта строка ссылается на несуществующую переменную:

$sql = $sql_1 . $_sql_2;

Должно быть:

$sql = $sql_1 . $sql_2;

Следовательно, запрос недействителен. Вы должны проверить вывод после выполнения запроса SQL (например, mysql_error()).

...