Как отобразить скрытые поля формы на основе условных флажков в PHP?
Я хочу, чтобы форма отображала скрытые поля формы, в зависимости от того, какой флажок установлен, обратите внимание, что мне нужно отобразить скрытые поля формы до нажатия кнопки отправки, так как она собирается PayPal. Вот то, что я имею до сих пор -
<?php
echo ('<form action="https://www.paypal.com/cgi-bin/webscr" method="post">');
echo ('<input type="hidden" name="cmd" value="_cart">');
echo ('<input type="hidden" name="upload" value="1">');
echo ('<input type="hidden" name="business" value="youremail@mail.com">');
echo ('<input type="hidden" name="currency_code" value="US">');
echo ('<input type="checkbox" name="camp1" value="a">');
echo ('<input type="checkbox" name="camp2" value="b">');
if (isset($_POST['camp1'])) {
echo ("<input type='hidden' name='item_name_1' value='beach ball'>");
("<input type='hidden' name='amount_1' value=50'>");
}
if (isset($_POST['camp2'])) {
echo ("<input type='hidden' name='item_name_2' value='towel'>");
("<input type='hidden' name='amount_2' value='20'>");
}
echo ("<input type='submit' value='PayPal'>");
("</form>");
?>
Я также пытался заменить
if (isset($_POST['camp1'])) {
с чем-то вроде
if(IsChecked('camp1','a')) {
Без удачи.
Любая помощь приветствуется!
2 ответа
Если вы не отправляете форму, то нет POST
или же GET
метод выполнен, и вы вызываете в своем операторе if переменную из POST $_POST['camp1']
и вы никогда не получите это значение. Альтернативой для решения этой проблемы может быть использование JS или jQuery, например:
Ваш модифицированный PHP:
<html>
<head>
<title>Paying process</title>
</head>
<script scr="jquery-1.7.2.js" type="text/javascript" />
<script scr="functions.js" type="text/javascript" />
<body>
<?php
echo ('<form id="payForm" action="https://www.paypal.com/cgi-bin/webscr" method="post">');
echo ('<input type="hidden" name="cmd" value="_cart">');
echo ('<input type="hidden" name="upload" value="1">');
echo ('<input type="hidden" name="business" value="youremail@mail.com">');
echo ('<input type="hidden" name="currency_code" value="US">');
echo ('<input type="checkbox" name="camp1" value="a">');
echo ('<input type="checkbox" name="camp2" value="b">');
echo ('<div id="productInfo" style="display:none;"></div>');
echo ("<input type='submit' value='PayPal'>");
echo ("</form>");
?>
</body>
</html>
файл functions.js:
$(document).ready(function(){
$("#payForm").submit(function(e){
if($('#productInfo').html() == ''){
//if there is no product in the hidden div, prevent the submit and show msg.
alert('Please select at least one product');
e.preventDefault();
}
});
// event when user clicks a checkbox
$("input[type='checkbox']").on('click', function(){
var checked = $(this).attr('checked');
if(checked){
var value = $(this).val();
$.post('product.php', { value:value }, function(data){
// data = 0 - means that there was an error or no product
if(data != 0){
// At this point you will have your "a" or "b" products in hidden
// Also submit button will appear
// This means that everything was Ok and the user selected a product
$('#productInfo').append(data);
} else {
// data = 0
alert('Please try again.');
}
});
}
});
});
Файл product.php (используется в посте jQuery):
<?php
if ($_POST && isset($_POST['value'])) {
// db connection
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
// error happened
print(0);
}
mysql_select_db('mydb');
// sanitize the value
$value = mysql_real_escape_string($_POST['value']);
// start the query - I am assuming one :-)
$sql = "SELECT * FROM products WHERE Id = '$value'";
$result = mysql_query($sql, $link);
// check if the product exists
if(mysql_num_rows($result) > 0){
while($row = mysql_fetch_array($result)){
if($value == 'a'){
echo ("<input type='hidden' name='item_name_1' value='".$row['product_name']."' />");
echo ("<input type='hidden' name='amount_1' value='".$row['product_price']."'>");
} else {
echo ("<input type='hidden' name='item_name_2' value='".$row['product_name']."' />");
echo ("<input type='hidden' name='amount_2' value='".$row['product_price']."'>");
}
}
} else {
// no product found
print(0);
}
?>
Теперь вы можете отправить со своими скрытыми значениями, пункт 1 или 2 или оба, только когда пользователь выбирает хотя бы один продукт.
Надеюсь это поможет:-)
Похоже, вы пытаетесь заставить PHP выполнять клиентское поведение, что невозможно. PHP отображает страницу один раз, когда пользователь сначала запрашивает страницу, и ничего не делает после этого, пока они не отправят форму или не загрузят другую страницу (или пока не произойдет какое-либо другое общение, если вы используете ajax или jquery). Если вы хотите, чтобы содержимое страницы изменялось в ответ на нажатие флажка, вам необходимо включить некоторый JavaScript.