У меня есть форма Stripe, я пытаюсь добавить дисплей для суммы покупки:
data-description="<?php echo $_POST['plan']; ?>"
но выше выдает ошибки на дисплее "уведомление неопределенных переменных", даже с isset.
Следующий код работает без ошибок, за исключением случаев, когда я пытаюсь выполнить эхо-данные POST.
<form action="pages/scharge.php" method="post">
<div>
<input type="radio" name="plan" value="2500"> Beta membership <br>
<input type="radio" name="plan" value="3500"> VIP membership <br>
</div>
<div>
<label for="plan"> If you would like to pay another amount, enter the amount here:</label>
<input type="text" name="plan" />
<label for="invoice_num"> Enter the invoice number here:</label>
<input type="text" name="invoice_num" />
</div>
<div>
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<?php echo $stripe['publishable_key']; ?>"
data-amount="<?php if(isset($_POST['plan'])); echo $_POST['plan']; ?> " data-description=" ">
</script>
</div>
</form>
Как бы я отбросил данные POST в data-description = "" в формате валюты (полоса составляет 18,00 долл. США = 1800), чтобы клиенты могли видеть нужную сумму до нажатия покупки?
Это должно работать:
data-description="<?php
if (isset($_POST['plan'])) echo htmlspecialchars($_POST['plan']);
?>"
Обратите внимание: нет ;
после if (isset($_POST['plan']))
. Если вы поставили точку с запятой, PHP интерпретирует эту точку с запятой как (пустой) оператор, который предполагается условно выполнить if
.
Если вы чувствуете смущение о точках с запятой, другой, возможно, более безопасный способ написания:
data-description="<?php
if (isset($_POST['plan'])) {
echo htmlspecialchars($_POST['plan']);
}
?>"
Здесь вы можете включить столько операторов, сколько хотите (разделенных точкой с запятой) между фигурными фигурными скобками, и все они будут выполнены только в том случае, если установлен $_POST['plan']
. Убедитесь, что между условием if
и {
, хотя и не существует точки с запятой.
Также обратите внимание на htmlspecialchars()
. Без этого ваш код широко открыт для атак межсайтового скриптинга (XSS), причем злоумышленник переходит в параметр типа plan="><script>alert("XSS");//
.
Каждый раз, когда вы вставляете строку (которая не должна анализироваться как HTML-код) в ваш вывод HTML, вы всегда должны избегать ее с помощью htmlspecialchars()
. Предпочтительно, сделайте это, даже если вы уверены, что строка не может содержать символы, которые могут быть проанализированы как разметка HTML; это просто хорошая привычка и может спасти ваш код от взлома, если вы когда-нибудь решите изменить строку позже.
data-description
, но непустой data-amount
?
if(isset($_POST['plan']));
На самом деле означает «Если установлено $ _POST ['plain'], то ничего не делать».