¿Cómo hacer eco de los campos de formulario ocultos basados ​​​​en casillas de verificación condicionales en php?

Quiero que el formulario repita los campos de formulario ocultos según la casilla de verificación que esté marcada, tenga en cuenta que necesito repetir los campos de formulario ocultos antes de presionar el botón Enviar, ya que va a PayPal. Esto es lo que tengo hasta ahora:

<?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>");
?>

También he intentado reemplazar

if (isset($_POST['camp1'])) {

con algo como

if(IsChecked('camp1','a')) {

Sin suerte.

Cualquier ayuda sería muy apreciada!

preguntado el 03 de mayo de 12 a las 18:05

2 Respuestas

Si no está enviando el formulario, entonces no hay POST or GET método ejecutado y está llamando en su instrucción if a una variable de POST $_POST['camp1'] y nunca obtendrás ese valor. Una alternativa para solucionar esto podría ser usar JS o jQuery, ejemplo:

Su PHP modificado:

<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>

archivo 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.');
              }
          });
       }
    });

});

archivo producto.php (usado en la publicación de 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);                                       
        }
  ?>

Ahora puede enviar con sus valores ocultos, el elemento 1 o 2 o ambos solo cuando el usuario selecciona al menos un producto.

Espero que esto ayude :-)

contestado el 03 de mayo de 12 a las 19:05

Correcto, entonces, ¿hay alguna manera de ver si la casilla de verificación está marcada sin usar la publicación? Algo más en la línea de IsCheked: Keith

Estoy editando mi publicación y brindándole un ejemplo, intente usar jQuery con PHP, estoy codificando ahora, espere 2 minutos y verifique mi publicación nuevamente :-) - Óscar Jara

Perfecto Oscar, muchas gracias!! - Keith

Parece que está intentando que PHP realice un comportamiento del lado del cliente, lo cual no es posible. PHP muestra la página una vez, cuando el usuario solicita la página por primera vez, y no hace nada después de eso hasta que envía el formulario o carga otra página (o hasta que se produce alguna otra comunicación, si está usando ajax o jquery). Si desea que el contenido de la página cambie en respuesta a hacer clic en una casilla de verificación, deberá incorporar algo de javascript.

contestado el 03 de mayo de 12 a las 22:05

ok, es un buen comienzo, gracias, comenzaré a buscar una solución con js - Keith

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.