как отображать скрытые поля формы на основе условных флажков в 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="[email protected]">');
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')) {

Без везения.

Любая помощь приветствуется!


person Keith    schedule 03.05.2012    source источник


Ответы (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="[email protected]">');
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 или оба, только когда пользователь выбирает хотя бы один продукт.

Надеюсь это поможет :-)

person Oscar Jara    schedule 03.05.2012
comment
Итак, есть ли способ проверить, установлен ли флажок, без использования сообщения? Что-то более похожее на IsCheked - person Keith; 03.05.2012
comment
Я редактирую свой пост и привожу вам пример, попробуйте использовать jQuery с PHP, сейчас я кодирую, подождите 2 минуты и снова проверьте мой пост :-) - person Oscar Jara; 03.05.2012
comment
Идеальный Оскар! Большое спасибо! - person Keith; 03.05.2012

Похоже, вы пытаетесь заставить PHP выполнять поведение на стороне клиента, что невозможно. PHP отображает страницу один раз, когда пользователь впервые запрашивает страницу, и ничего не делает после этого, пока не отправит форму или не загрузит другую страницу (или пока не произойдет какая-либо другая связь, если вы используете ajax или jquery). Если вы хотите, чтобы содержимое страницы менялось в ответ на нажатие флажка, вам нужно включить некоторый javascript.

person octern    schedule 03.05.2012
comment
хорошо, это хорошее начало, спасибо, я начну искать решение с помощью js - person Keith; 03.05.2012