¿Cómo hacer eco de los campos de formulario ocultos basados en casillas de verificación condicionales en php?
Frecuentes
Visto 5,128 veces
2
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!
2 Respuestas
3
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
1
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
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