как да отразя скрити полета на формуляр въз основа на условни квадратчета за отметка в 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