Проверьте мой код notify_url для PayPal

notify_url.php

<?php
include('connection.php');
$sql = "UPDATE tablename
SET credit = credit + {$_POST['amount']}
WHERE username = '123456789'";
mysqli_query($con, $sql);
?>

Форма HTML

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="6RNT8A4HBBJRE">
<input type="image"src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif"border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif"width="1" height="1">
<input name="amount" value=10.95 type="hidden"> <<< not sure if this line should be here
<input name="notify_url" value="notify_url.php" type="hidden">
</form>

Приведенный выше код является то, что у меня есть в моем файле notify_url.php. Моя база данных не обновляется :(. С моим файлом подключения все в порядке. И когда я ставлю число вместо переменной POST, она работает нормально. Это означает, что моя переменная POST может быть неправильной или сценарий вообще не вызывается!

Редактировать:
Второй код — это форма, созданная на веб-сайте PayPal (кнопка «Купить»).

-2

Решение

Редактировать:

У тебя есть value=10.95Заверните в кавычки value="10.95" — Это не имеет большого значения, но хорошая практика.

также if(isset($_POST['amount'])){...} или же if(!empty($_POST['amount'])){...}

убедившись, что ваша колонка DECIMAL с длиной / значениями, такими как 10,2 например, чтобы иметь возможность принимать десятичные дроби, такие как 10,95

Consult:

Способ, которым я проверял это, использовал:

$amount = $_POST['amount'];

$sql = "UPDATE tablename
SET credit = credit + $amount
WHERE username = '123456789'";

Или вы можете попробовать использовать сцепления:

SET credit = credit + '".$amount."'

Кроме того, ваше сообщение должно быть action="notify_url.php" а не то, что вы используете сейчас.


Оригинальный ответ до того, как вы разместили свою HTML-форму:

У меня есть подозрение, что ваш элемент формы не имеет атрибута имени и / или значения, а также не использует метод POST.

Если ваша форма не имеет определенного метода POST, так как вы используете $_POST['amount'], по умолчанию это будет метод GET, который, в свою очередь, завершится с ошибкой.

Поскольку вы не разместили свою HTML-форму, вы можете основываться на любом из следующего:

Если используется скрытый тип с предустановленным значением: (в данном случае я использовал 1000).

<form method="post" action="your_handler.php">

<input type="hidden" name="amount" value="1000">
<input type="submit" name="submit">

</form>

Если из пользовательского ввода:

<form method="post" action="your_handler.php">

<input type="text" name="amount">
<input type="submit" name="submit">

</form>

Вы также можете проверить, установлен ли элемент формы пустым, используя:

if(isset($_POST['amount'])){...} или же if(!empty($_POST['amount'])){...}

  • Также убедитесь, что ваша колонка int скорее, чем varcharЭто также может быть одной из причин, по которой ваш код может давать сбой.

Я должен отметить, что ваш настоящий код открыт для SQL-инъекция. использование готовые заявления, или же PDO с подготовленными заявлениями, они намного безопаснее.


добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

так же как or die(mysqli_error($con)) в mysqli_query(),

Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.


  • Если это все еще не работает, опубликуйте форму HTML и схему БД, чтобы быть абсолютно уверенным.
2

Другие решения

Не могли бы вы попробовать переписать код следующим образом:

$sql = "UPDATE tablename SET credit = credit + ". $_POST['amount'] ." WHERE username = '123456789'";

В любом случае, я не одобряю такой подход (передавайте POST прямо к запросу), потому что уязвим для внедрения MySQL.

И попробуй поменять

    <input name="notify_url" value="notify_url.php" type="hidden">

в

    <input name="notify_url" value="http://www.domain.com/notify_url.php" type="hidden">
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector