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 (кнопка «Купить»).
Редактировать:
У тебя есть 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()
,
Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.
Не могли бы вы попробовать переписать код следующим образом:
$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">