Foros del Web » Programando para Internet » PHP »

foreach: varios problemas.

Estas en el tema de foreach: varios problemas. en el foro de PHP en Foros del Web. Tengo una error con los foreach. En un formulario de venta, donde selecciono 1 o varios checkbox. Estos datos se van con ajax a otra ...
  #1 (permalink)  
Antiguo 10/02/2011, 22:19
 
Fecha de Ingreso: octubre-2008
Mensajes: 17
Antigüedad: 15 años, 6 meses
Puntos: 0
Pregunta foreach: varios problemas.

Tengo una error con los foreach.

En un formulario de venta, donde selecciono 1 o varios checkbox. Estos datos se van con ajax a otra pagina (con un foreach) para calcular el vuelto.
Y de hecho calcula el vuelto, pero me imprime la pagina dos veces y en la segunda vez me tira error de sql.
mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in


Código PHP:
<?
include "../funciones.php";
if(empty(
$_POST['seleccion'])){
        echo 
"Usted no a seleccionado ningun pasajero para pagar su pasaje";
        exit;
    }
    
$o=0;
    foreach (
$_POST['seleccion'] as $id){ 
          
$o$o+1;
          echo 
"\n VUELTA N.".$o." ID N.".$id;
      
$sql "select id, total_pago from postulacion where id=$id";
      
$dni mysql_query($sql);
      
$resultfa mysql_fetch_assoc($dni);
      
$tarifa $resultfa['total_pago'];

      
$total$total $tarifa;
    }
    
    echo 
"TOTAL A PAGAR :".$total;
?>
imprimi los id y las vueltas que daba, y me salio esto:
VUELTA N.1 ID N.
VUELTA N.1 ID N.3
VUELTA N.2 ID N.4
TOTAL A PAGAR :75000

Supongo que el error sql es porque el valor es vacio, pero aun no se porque me llega vacio si yo solo selecciono 2 checkbox para las pruebas.
Aparte que tampoco se porque se imprime 2 veces el formulario.

Me pueden hechar una ayudadita?

Última edición por Shoyke; 10/02/2011 a las 22:25
  #2 (permalink)  
Antiguo 10/02/2011, 22:42
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: foreach: varios problemas.

Hola,

¿Cómo tienes el evento que llama a esa página?
  #3 (permalink)  
Antiguo 10/02/2011, 23:02
Avatar de jonasanx  
Fecha de Ingreso: enero-2011
Ubicación: La Via Lactea, Mexico, Mexico, Mexico
Mensajes: 134
Antigüedad: 13 años, 3 meses
Puntos: 4
Respuesta: foreach: varios problemas.

En efecto, simulando el envió de $_POST, optenemos este resultado.
Código PHP:
Ver original
  1. <?php
  2. $_POST['seleccion'] = array(
  3.     'vuelta',
  4.     '',
  5.     'vuelta');
  6.    
  7. $o=0;
  8. foreach ($_POST['seleccion'] as $id){  
  9.     $o= $o+1;
  10.     echo "\n VUELTA N.".$o." ID N.".$id;
  11. }
  12. ?>
Código PHP:
Ver original
  1. VUELTA N.1 ID N.vuelta
  2.  VUELTA N.2 ID N.
  3.  VUELTA N.3 ID N.vuelta

Así que para saltarse esos checkbox vacíos escribimos esta condicional.

Código PHP:
Ver original
  1. foreach ($_POST['seleccion'] as $id){
  2.  
  3.     if(empty($id))  continue; // Con esta condicional le decimos al for que se salte este paso si el $id esta vació.
  4.  
  5.     $o= $o+1;
  6.     echo "\n VUELTA N.".$o." ID N.".$id;
  7. }


Para el resto de los errores, tendrás que mostrar mas código.

Última edición por jonasanx; 10/02/2011 a las 23:13
  #4 (permalink)  
Antiguo 11/02/2011, 07:28
 
Fecha de Ingreso: octubre-2008
Mensajes: 17
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: foreach: varios problemas.

jonasanx, me podrias explicar esto:
Código PHP:
$_POST['seleccion'] = array(
    
'vuelta',
    
'',
    
'vuelta'); 
Yo tenia entendido que con el foreach recogia todos los valores de los ID que es lo que necesito.

Bueno, igual me sigue imprimiendo un valor vacio, y el formulario dos veces. :S

Puse la condicion IF, pero aun se me sigue imprimiendo el valor vacio.

El formulario sería mas o menos asi.

Código HTML:
Ver original
  1. <form action="javascript: calcular_total();" method="post" id="frm_per">
  2.  
  3. ....
  4. <input name="seleccion[]" type="checkbox"  value="<?=$rs_per['id']?>"/>
  5. <input type="submit" name="button" id="button" value="Pagar" />

Al apretar el boton ejecuta la funcion calcular_total():
Código Javascript:
Ver original
  1. function calcular_total(id){
  2.     var str = $("#frm_per").serialize();
  3.         $.ajax({
  4.             url: 'venta/vuelto.php',
  5.             data: str,
  6.             type: 'post',
  7.             success: function(data){
  8.                 if(data != ""){
  9.                         $("#div_oculto").load("venta/vuelto.php", {'seleccion[]': data}, function(){
  10.                             $.blockUI({
  11.                             message: $('#div_oculto'),
  12.                                 css:{
  13.                                     top: '20%'
  14.                                 }
  15.                             });
  16.                         });
  17.                 }
  18.             }
  19.         });
  20.  
  21. };

Y el vuelto.php es el que anteriormente comentaba.
Se abre como ventana emergente.
Código PHP:
<?

    
include "../extras/php/conexion.php";
    
if(empty(
$_POST['seleccion'])){
        echo 
"Usted no a seleccionado ningun pasajero para pagar su pasaje";
        exit;
    }
    
$o=1;
    
    
foreach (
$_POST['seleccion'] as $id){
     
    if(empty(
$id))  continue; // Con esta condicional le decimos al for que se salte este paso si el $id esta vació.
       
$o$o+1;
    echo 
"\n VUELTA N: ".$o." ID: ".$id
    
$array[$o] = $id;
    $&
#241;aca = $array[$o];
    
$sql "select id, total_pago from postulacion where id=$ñaca";
    
$dni mysql_query($sql);
    
$resultfa mysql_fetch_assoc($dni);
    
$tarifa $resultfa['total_pago'];

    
$total$total $tarifa;

    }
    echo 
"TOTAL A PAGAR :".$total;
?>

 
<h1>Calculando el vuelto</h1>

<p>Ingrese el monto con el que paga (<em>ej. si el monto a pagar es $53.000 y paga con 6 billetes de $10.000, ingrese $60.000</em>)</p>
<p>APRIETE ENTER PARA CALCULAR VUELTO</p>
<form action="javascript: pagar();" method="post" id="frm_per">
  <table class="formulario">
        <tbody>
        <input type="hidden" id="estado" name="estado" value="1" />
            <!--<tr>
                <td>Usuario</td>
                <td><input name="usu_per" type="text" id="usu_per" size="16" class="required" /></td>
            </tr>-->
            <tr>
                <td>Monto a Pagar</td>
                <td><? echo '$'.$total ?>
               <input type="hidden" name="sum_total" id="sum_total" value="<? echo -$total ?>" action="sumar(this);"/></td>
            </tr>
            <tr>
                <td>Billete</td>
                <td><input name="sum_billete" type="text" id="sum_billete" size="40" class="required"  onkeydown='sumar(this);' onfocus="val(this,'','0');" onblur="val(this,'0','');"/>
               
                </td>
            </tr>
            <tr>
              <td>Vuelto</td>
                <td><div name"suma" id="suma"></div> </td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td colspan="2"><input name="pagar" type="submit" id="pagar" value="Pagar" onclick="javascript: pagar();" />
                    <input name="cancelar" type="button" id="cancelar" value="Cancelar" onclick="fn_cerrar();" />
                </td>
            </tr>
        </tfoot>
    </table>
    <p></p>
</form>
<script language="javascript" type="text/javascript">

function sumar(c){
 var total=0;
 for(i=0;input=c.form.elements[i];i++){
  if(/^sum_/.test(input.id)){
   input.value=input.value.replace(/[A-z]/,'');
   total+=parseInt(input.value);
   $("#suma").text(total);
  }
  
 }
 document.getElementById('res').value=isNaN(total)?document.getElementById('res').value:total;
}
function val(c,v,t){
 c.value=c.value==t?v:c.value;
}

</script>

Última edición por Shoyke; 11/02/2011 a las 07:46
  #5 (permalink)  
Antiguo 11/02/2011, 08:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 17
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: foreach: varios problemas.

Ya logre que me salque el Valor vacio con:
Código PHP:
Ver original
  1. if(is_numeric($&#241;aca)) //o sea si el array es numerico

Pero aun se sigue imprimiendo el formulario dos veces.
Por qué sera?
  #6 (permalink)  
Antiguo 11/02/2011, 09:23
 
Fecha de Ingreso: octubre-2008
Mensajes: 17
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: foreach: varios problemas.

Ya resolvi lo demas.

Si tiene un total, es porque ya recorrio los id.
entonces
Código HTML:
Ver original
  1. <? if ($total) { ?>
  2. <html>Formulario de calculo de vuelto </html>



Gracias. por todo:D
  #7 (permalink)  
Antiguo 11/02/2011, 09:29
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Respuesta: foreach: varios problemas.

intenta con esto
Código PHP:
Ver original
  1. foreach ($_POST['seleccion'] as $id){
  2.     if(!empty($id)){ // Con esta condicional le decimos al for que se salte este paso si el $id esta vació.
  3.         $o= $o+1;
  4.         $sql = "select id, total_pago from postulacion where id=$id";
  5.         $dni = mysql_query($sql);
  6.         $resultfa = mysql_fetch_assoc($dni);
  7.         $tarifa = $resultfa['total_pago'];
  8.         $total= $total + $tarifa;
  9.     }
  10. }
  11. echo "TOTAL A PAGAR :".$total;
como consejo, evita usar caracteres especiales en nombres de variables como la ñ, á, é, etc.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #8 (permalink)  
Antiguo 11/02/2011, 11:21
 
Fecha de Ingreso: octubre-2008
Mensajes: 17
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: foreach: varios problemas.

Lo habia intentado con el empty, y aun asi se metia al if.
Asi que finalmente lo arregle preguntandole si era numerico con la funcion is_numeric

Ya me funciona por si acaso.

Etiquetas: foreach
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:00.