Nueva pregunta

Pregunta:

Fecha: 12-12-2018 09:18:44 (En Español)

Evitar que los datos del formulario 2 se pasen a los espacios vacios del formulario 1 al momento de cargarlos a la base de datos[Resuelta]

Hola vuelvo con una pregunta repetida tengo un archivo con varios formularios y los formularios se cargan todos al mismo tiempo por medio de un FOR este es el codigo html

dnlun.php
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>empresa</title>
	<link rel="stylesheet" href="teststyle.css">

</head>
<body>
	<?php
	session_start();
	?>
	<div class="logo">
		<a href="logo.php"><img src="img/acin.jpg"></a>
	</div>	
	<header>
		<center>
		<nav class="navegacion">
			<ul class="menu">
			<!--<a href="">Envio de Sangre</a></li>
				<li><a href="">Distribucion </a></li>-->
				<li>Distribucion de Lunes</li>
			</ul>
		</nav>
		</center>
	</header>
	<h1>Solicitud de Transporte</h1>

	<h2>Seleccione Procedencia</h2>	

	

	<div class="pedido">
		<form action="" id="form_insert" method="POST">
			<?php for ($i=0; $i <=0 ; $i++) { ?>
			
			<h2>Destinos</h2>

			<div>
				<center>
					<label for=""><b>hospi1</b></label>
					Valor<input type="checkbox" id="checkb" name="destino[]" value="hospi1">
				</center>
			</div>
		
			<center>
				<table>
					<tr>
						[code=html]<td>Globulos<input type="checkbox" name="globulos[]" value="Globulos" id="checkbox" class="checar"><br></td>
        				 <td>Plaquetas<input type="checkbox" name="plaquetas[]" value="Plaquetas" id="checkbox" class="checar"><br></td>
       					 <td>Plasma<input type="checkbox" name="plasma[]" value="Plasma" id="checkbox" class="checar"><br></td>
        				 <td>Materiales<input type="checkbox" name="materiales[]" value="Materiales" id="checkbox" class="checar"><br></td>
					</tr>
					<br><br>
					<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

        <script>

            $('#checkb').click(function() {
                $('.checar').each(function(){
                    /*$("#checkbox").click();*/
                    $(this).click();
                })

              });
        </script>
				</table>
				<h4>Hora de Despacho:<input type="time" name="hora[]"></h4>
			</center><br><br>

			<div>
				<center>
					<label for=""><b>hospi2</b></label>
					Valor<input type="checkbox" id="checkb5" name="destino[]" value="hospi2"><br>
				</center>
			</div>
		
			<center>
				<table>
					<tr>
						<td>Globulos<input type="checkbox" name="globulos[]" value="Globulos" id="checkbox5" class="checar5"> <br></td>
        				 <td>Plaquetas<input type="checkbox" name="plaquetas[]" value="Plaquetas" id="checkbox5" class="checar5"><br></td>
       					 <td>Plasma<input type="checkbox" name="plasma[]" value="Plasma" id="checkbox5" class="checar5"><br></td>
        				 <td>Materiales<input type="checkbox" name="materiales[]" value="Materiales" id="checkbox5" class="checar5"><br></td>
					</tr>
					<br>
					<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

        <script>

            $('#checkb5').click(function() {
                $('.checar5').each(function(){
                    /*$("#checkbox").click();*/
                    $(this).click();
                })

              });
        </script>
				</table>
				<div>
					<h4>Hora de Despacho:<input type="time" name="hora[]"></h4>
				</div>
			</center><br><br>


			<div>
				<center>
					<label for=""><b>hospi3</b></label>
					Valor<input type="checkbox" id="checkb2" name="destino[]" value="hospi3"><br>
				</center>
			</div>
		
			<center>
				<table>
					<tr>
						<td>Globulos<input type="checkbox" name="globulos[]" value="Globulos" id="checkbox2" class="checar2"> <br></td>
        				 <td>Plaquetas<input type="checkbox" name="plaquetas[]" value="Plaquetas" id="checkbox2" class="checar2"><br></td>
       					 <td>Plasma<input type="checkbox" name="plasma[]" value="Plasma" id="checkbox2" class="checar2"><br></td>
        				 <td>Materiales<input type="checkbox" name="materiales[]" value="Materiales" id="checkbox2" class="checar2"><br></td>
					</tr>
					<br>
					<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

        <script>

            $('#checkb2').click(function() {
                $('.checar2').each(function(){
                    /*$("#checkbox").click();*/
                    $(this).click();
                })

              });
        </script>
				</table>
				<div>
					<h4>Hora de Despacho:<input type="time" name="hora[]"></h4>
				</div>
			</center><br><br>

			<?php } ?>
			
			<div class="respuesta">
					<center>
						<a href="acin.php"><input type="button" value="Salir"></a>
						<a href="form2.php"><input type="submit" value="Siguiente"></a>
					</center>
				</div>
		</form>
	</div>
	<script src="js/jQuery-3.1.1.js"></script>
	<script src="js/lunes/mainlun.js"></script>
</body>
</html>


el formulario envia los datos ingresados a un JQUERY que es este

jQuery(document).on('submit','#form_insert', function(event){
	event.preventDefault();
	jQuery.ajax({
		url:'pedidolun.php',
		type:'POST',
		datatype:'json',
		data: $(this).serialize(),

	})

	//.done(function(respuesta){
	//	console.log(respuesta);
	//	if (!respuesta.error) {
	//		alert('Datos cargados');
		
	//	}else{
	//		alert('Datos no cargados');
	//	}
	//})
	.fail(function(resp){
		console.log(resp.responseText);
	})
	.always(function(){
		console.log("complete");
	})
	window.location.href = "form2.php";
	
})


este Jquery de igual manera envia los datos a un archivo php para realizar la carga a la BD este es el Codigo php

pedidolun.php

<?php
	//ini_set('display_errors',0);
	
if (!empty($_POST['destino'])) {
	include ("conexion.php");
$origen='Central';
$destino=$_POST['destino'];
$globulos=$_POST['globulos'];
$plaquetas=$_POST['plaquetas'];
$plasma=$_POST['plasma'];
$materiales=$_POST['materiales'];
$hora=$_POST['hora'];
$fecha=date("Y-m-d");
$estado='1';
date_default_timezone_set("America/Caracas");
$hora_soli=date("G:i:s");


$sql = "INSERT INTO pedido (origen, destino, globulos, plaquetas, plasma, materiales, hora, fecha, hora_soli, estado) VALUES";

for ($i=0; $i < count($destino); $i++) { 
	$sql.="('".$origen."', '".$destino[$i]."', '".$globulos[$i]."', '".$plaquetas[$i]."', '".$plasma[$i]."', '".$materiales[$i]."', '".$hora[$i]."', '".$fecha."','".$hora_soli."','".$estado."'),";
}
$sql_final= substr($sql, 0, -1);
$sql_final.=";";

if (mysqli_query($conexion,$sql_final)) {
	echo json_encode(array('error' => false));

	
}else{
	echo json_encode(array('error' => true));

}


//header("location:form.php");
	//echo "datos cargados";

}

?>


el objetivo de este codigo es permitirle al usuario que llene varios formularios y que se carguen todos al mismo tiempo con solo un boton submit y que la informacion proporcionada se almacene en la base de datos

ahora todo el fomulario y el jquery funciona bien pero el codigo php me presenta el siguiente problema cuando el archivo pedidolun.php carga los datos del primer fomulario se carga bien pero si yo dejo un dato en blanco por cualquier motivo al momento de cargar los datos del segundo formulario el campo que yo deje en blanco se rellena con el dato del segundo formulario y no se por que voy a tratar de hacer un ejemplo de la base de datos

en este ejemplo es como da el error:
hospi1=globulos/plaquetas
hospi2=globulos/plaquteas/plasma/materiales<----- OJO AQUI hospi2 esta llevando 2 datos mas que hospi1
bd
tabla pedido

id/origen/destino/globulos/plaquetas/plasma/materiales
1/hospi1/central/Globulos/Plaquetas/Plasma/Materiales
2/hospi2/central/Globulos/Plaquetas

este es el error los datos de hospi2 estan rellenando los datos vacios de hospi1 no quiero que haga eso yo quiero que se hospi1 se carga con datos vacios se quede asi que los datos de hospi2 no se muevan de alli

creo q el problema esta en el FOR creo que me esta faltando algo para que no haga eso al momento de llenar el formulario los datos se almacenan con CORCHETES
<td>Globulos<input type="checkbox" name="globulos[]" value="Globulos" 


quedo atento a sus respuestas gracias
Etiquetas: Base de Datos - HTML - MySQL - PHP Votos: 0 - Respuestas: 4 - Vistas: 9 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 14-12-2018 02:32:20 hey tu problema son los checkboxes, recuerda que si en un formulario este no se clikea, no llega a la pagina destino, es decir, no es como un input text que si no escribes nada llega vacío, en el caso de los checkboxes, estos si estan false en un formulario, no se envían con este.

    Los primero sería comprobar el array que esta llegando antes de ejecutar el resto del proceso. Ya allí verás lo que te digo.

    Ahora bien una solución es verificas si en esa vuelta del bucle, la variable esta presente y simplemente reemplazar con algo.

    Como nota a parte te digo que no debes repetir las IDs en tu DOM, por ejemplo: id="checkbox2" está como 4 veces, si requieres de un valor único para alguna interacción, puedes usar clases o data atributos.


    Continuando con lo anterior, te muestro un ejemplo:



    En ese formulario de pruebas, ves que tengo seleccionado solo dos destinos, ahora si vemos nuestro array de llegada, se notara el problema en cuestion:

    
    array(2) { 
        ["destino"]=> array(5) { 
            [0]=> string(9) "Hospital0" 
            [1]=> string(9) "Hospital1" 
            [2]=> string(9) "Hospital2" 
            [3]=> string(9) "Hospital3" 
            [4]=> string(9) "Hospital4" 
        } 
        ["globulos"]=> array(2) { 
            [0]=> string(9) "Globulos0" 
            [1]=> string(9) "Globulos2" 
        } 
    }
    
    



    Si realizo la interacción por el campo seguro que seria destino, me da que tengo 5 elementos, pero para el bucle eso no vale nada, pues simplemente le asignara a mi hospital1 el valor de Globulos2 cuando no debe ser así.

    una solución un poco loca seria la siguiente:

    Destino se queda como tal solo cambiando el nombre a algo así:

    value="Hospital <?php echo $i; ?>"

    agregando el numero del bucle al nombre, este luego se lo puedes eliminar durante la inserción.



    Pero los exámenes encapsularlos en su propio array, algo así:

    
    <tr>
                            <td>Globulos<input type="checkbox" name="examenes<?php echo $i; ?>[]" value="Globulos" id="checkbox2" class="checar2"> <br></td>
                             <td>Plaquetas<input type="checkbox" name="examenes<?php echo $i; ?>[]" value="Plaquetas" id="checkbox2" class="checar2"><br></td>
                                <td>Plasma<input type="checkbox" name="examenes<?php echo $i; ?>[]" value="Plasma" id="checkbox2" class="checar2"><br></td>
                             <td>Materiales<input type="checkbox" name="examenes<?php echo $i; ?>[]" value="Materiales" id="checkbox2" class="checar2"><br></td>
                        </tr>
    
    


    Como ves allí, cada uno se llamara examenes y estará asociado al numero agregado al nombre del destino y para generar la query, sería algo así:


    
    $sql = "INSERT INTO pedido (origen, destino, globulos, plaquetas, plasma, materiales, hora, fecha, hora_soli, estado) VALUES";
    
    for ($i=0; $i < count($_POST['destino']); $i++) {
        
        $exa= substr($_POST['destino'][$i],-1,1);
        
        $sql.="('".$origen."', '".$_POST['destino'][$i]."', '".(in_array('Globulos',$_POST['examen'.$exa]) ? 'Globulos' : '' )."', '".(in_array('Plaquetas',$_POST['examen'.$exa]) ? 'Plaquetas' : '' )."', '".(in_array('Plasma',$_POST['examen'.$exa]) ? 'Plasma' : '' )."', '".(in_array('Materiales',$_POST['examen'.$exa]) ? 'Materiales' : '' )."', '".$hora."', '".$fecha."','".$hora_soli."','".$estado."'),";
    }
    $sql_final= substr($sql, 0, -1);
    $sql_final.=";";
    
    
    


    alli validamos que este el valor en cada array y lo agregamos o simplemente lo dejamos en blanco, para que quede un poco más legible podemos hacerlo fuera asi:


    
    $sql = "INSERT INTO pedido (origen, destino, globulos, plaquetas, plasma, materiales, hora, fecha, hora_soli, estado) VALUES";
    
    for ($i=0; $i < count($_POST['destino']); $i++) {
        
        $exa= substr($_POST['destino'][$i],-1,1);
        $globulos = (in_array('Globulos',$_POST['examen'.$exa]) ? 'Globulos' : '' );
        $plaquetas = (in_array('Plaquetas',$_POST['examen'.$exa]) ? 'Plaquetas' : '' );
        $plasma = (in_array('Plasma',$_POST['examen'.$exa]) ? 'Plasma' : '' );
        $examenes = (in_array('Materiales',$_POST['examen'.$exa]) ? 'Materiales' : '' );
    
        $sql.="('".$origen."', '".$_POST['destino'][$i]."', '".$globulos."', '".$plaquetas."', '".$plasma."', '".$examenes."', '".$hora."', '".$fecha."','".$hora_soli."','".$estado."'),";
    }
    $sql_final= substr($sql, 0, -1);
    $sql_final.=";";
    
    



    espero se entienda y te sirva, saludos.
      Votos: 1 - Link respuesta
     
  • Fecha: 18-12-2018 09:34:26 hola Carlos disculpa la demora estoy haciendo las pruebas y no funciona estoy viendo la console del navegador y no me arroja ningun error no se porq no funciona no se si es porq en el name dice examenes y en el FOR estoy colocando examen, lo Cambie y d igual forma no funciona no porq no funciona
    quedo atento a tu respuesta
      Votos: 0 - Link respuesta
     
  • Fecha: 26-12-2018 01:58:13 hola gracias por su ayuda al final cambie todo el codigo y aplique otro metodo para lograr la carga de multiples formularios hice lo q CARLOS me dijo que no hiciera la verdad no me quedo de otra por razones de tiempo tuve que, La solucion la halle segun lo que carlos dijo sobre asigana un valor al hospital y que ese valor fuese amarrado a cada componente de ese hospital esta fue mi solucion

    dnlun.php

    <div class="pedido">
    		<form action="pedidolun.php" method="POST">
    			<h2>Destinos</h2>
    
    			<div>
    				<center>
    					<label for=""><b>Hospi1</b></label>
    					<input type="checkbox" id="checkb" name="destino" value="Hospi1">
    				</center>
    			</div>
    		
    			<center>
    				<table>
    					<tr>
    						<td>Globulos<input type="checkbox" name="globulos" value="Globulos" id="checkbox" class="checar"><br></td>
            				 <td>Plaquetas<input type="checkbox" name="plaquetas" value="Plaquetas" id="checkbox" class="checar"><br></td>
           					 <td>Plasma<input type="checkbox" name="plasma" value="Plasma" id="checkbox" class="checar"><br></td>
            				 <td>Materiales<input type="checkbox" name="materiales" value="Materiales" id="checkbox" class="checar"><br></td>
            			</tr>
    					<br><br>
    					<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
            <script>
    
                $('#checkb').click(function() {
                    $('.checar').each(function(){
                        /*$("#checkbox").click();*/
                        $(this).click();
                    })
    
                  });
            </script>
           	</table>
           	<h4>Hora de Despacho:<input type="time" name="hora"></h4>
    			</center><br><br>
    
    			<div>
    				<center>
    					<label for=""><b>Hospi2</b></label>
    					<input type="checkbox" id="checkb5" name="destino2" value="Hospi2"><br>
    				</center>
    			</div>
    		
    			<center>
    				<table>
    					<tr>
    						<td>Globulos<input type="checkbox" name="globulos2" value="Globulos" id="checkbox5" class="checar5"> <br></td>
            				 <td>Plaquetas<input type="checkbox" name="plaquetas2" value="Plaquetas" id="checkbox5" class="checar5"><br></td>
           					 <td>Plasma<input type="checkbox" name="plasma2" value="Plasma" id="checkbox5" class="checar5"><br></td>
            				 <td>Materiales<input type="checkbox" name="materiales2" value="Materiales" id="checkbox5" class="checar5"><br></td>
    					</tr>
    					<br>
    					<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
            <script>
    
                $('#checkb5').click(function() {
                    $('.checar5').each(function(){
                        /*$("#checkbox").click();*/
                        $(this).click();
                    })
    
                  });
            </script>
    				</table>
    				<div>
    					<h4>Hora de Despacho:<input type="time" name="hora2"></h4>
    				</div>
    			</center><br><br>
    
    
    			<div>
    				<center>
    					<label for=""><b>Hospi3</b></label>
    					<input type="checkbox" id="checkb2" name="destino3" value="Hospi3"><br>
    				</center>
    			</div>
    		
    			<center>
    				<table>
    					<tr>
    						<td>Globulos<input type="checkbox" name="globulos3" value="Globulos" id="checkbox2" class="checar2"> <br></td>
            				 <td>Plaquetas<input type="checkbox" name="plaquetas3" value="Plaquetas" id="checkbox2" class="checar2"><br></td>
           					 <td>Plasma<input type="checkbox" name="plasma3" value="Plasma" id="checkbox2" class="checar2"><br></td>
            				 <td>Materiales<input type="checkbox" name="materiales3" value="Materiales" id="checkbox2" class="checar2"><br></td>
    					</tr>
    					<br>
    					<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
            <script>
    
                $('#checkb2').click(function() {
                    $('.checar2').each(function(){
                        /*$("#checkbox").click();*/
                        $(this).click();
                    })
    
                  });
            </script>
    				</table>
    				<div>
    					<h4>Hora de Despacho:<input type="time" name="hora3"></h4>
    				</div>
    			</center><br><br>
    
    				<div class="respuesta">
    					<center>
    						<a href=""><input type="submit" value="Salir"></a>
    						<a href=""><input type="submit" value="Siguiente"></a>
    					</center>
    				</div>
    		</form>
    	</div>
    


    En esta parte cargo el formulario donde el usuario debe rellenar las casillas una lleno los formularios este se envia al archivo PEDIDOLUN.PHP para procesar los datos y almacenarlo en la base de datos
    lo deje igual con checkbox solo que con la asignacion de un numero a cada hospital y componente logre que se independizaran cada formulario.


    pedidolun.php

    <?php
    	ini_set('display_errors',0);
    
    	include ("conexion.php");
    
    $origen="Central";
    $destino=$_POST['destino'];
    $globulos=$_POST['globulos'];
    $plaquetas=$_POST['plaquetas'];
    $plasma=$_POST['plasma'];
    $materiales=$_POST['materiales'];
    $hora=$_POST['hora'];
    $fecha=date("Y-m-d");
    $estado='1'; 
    date_default_timezone_set("America/caracas");
    $hora_soli=date("G:i:s");
    
    
    $sql = "INSERT INTO pedido VALUES('id','$origen','$destino','$globulos','$plaquetas','$plasma','$materiales','$hora','$fecha','$hora_soli', '$estado')";
    mysqli_query($conexion,$sql);
    if (!$sql) {
    	echo "hubo un error al cargar los datos";
    }
    else{
    	header("location:form2.php");
    	//echo "datos cargados";
    }
    ?>
    
    
    <?php
    	//ini_set('display_errors',0);
    
    	include ("conexion.php");
    
    $origen2="Central";
    $destino=$_POST['destino2'];
    $globulos=$_POST['globulos2'];
    $plaquetas=$_POST['plaquetas2'];
    $plasma=$_POST['plasma2'];
    $materiales=$_POST['materiales2'];
    $hora=$_POST['hora2'];
    $fecha2=date("Y-m-d");
    $estado2='1'; 
    date_default_timezone_set("America/caracas");
    $hora_soli2=date("G:i:s");
    
    
    $sql = "INSERT INTO pedido VALUES('id','$origen2','$destino','$globulos','$plaquetas','$plasma','$materiales','$hora','$fecha2','$hora_soli2', '$estado2')";
    mysqli_query($conexion,$sql);
    if (!$sql) {
    	echo "hubo un error al cargar los datos";
    }
    else{
    	header("location:form2.php");
    	//echo "datos cargados";
    }
    ?>
    
    
    
    <?php
    	//ini_set('display_errors',0);
    	include ("conexion.php");
    
    $origen3="Central";
    $destino=$_POST['destino3'];
    $globulos=$_POST['globulos3'];
    $plaquetas=$_POST['plaquetas3'];
    $plasma=$_POST['plasma3'];
    $materiales=$_POST['materiales3'];
    $hora=$_POST['hora3'];
    $fecha3=date("Y-m-d");
    $estado3='1'; 
    date_default_timezone_set("America/caracas");
    $hora_soli3=date("G:i:s");
    
    
    $sql = "INSERT INTO pedido VALUES('id','$origen3','$destino','$globulos','$plaquetas','$plasma','$materiales','$hora','$fecha3','$hora_soli3', '$estado3')";
    mysqli_query($conexion,$sql);
    if (!$sql) {
    	echo "hubo un error al cargar los datos";
    }
    else{
    	header("location:form2.php");
    	//echo "datos cargados";
    }
    ?>
    
    
    
    <?php
    	include("conexion.php");
    	$sql = "DELETE FROM pedido WHERE destino=''";
    	mysqli_query($conexion,$sql);
    
    ?>
    



    aqui esta todo lo que es el procesamiento y almacenamiento de los formularios aqui simplemente recupero los valores por POST y los asigno a variables nuemeradas diferentemente y listo los datos del formulario 2 no se mesclan con los datos de formulario 1 al final hay un codigo de eliminacion eso fue porque se me presento el problema de que existia la posibilidad de cargar los componentes sin escoger un destino lo cual no debe ser asi porq puede pasar que almacenen los componentes y no tengan ningun destino lo cual genera problemas asi que lo que hice crear la funcio de eliminar los datos donde la variable destino este vacia y listo problema resuleto.

    Gracias a todos por su esfuerzo lo resolvi gracias a sus respuestas.
      Votos: 1 - Link respuesta
     
  • Fecha: 18-02-2019 13:45:00 Tu solución es momentanea porque cada vez que agregue un formulario , tendrias que aumentar mas codigo en tu php , hazme un screen de como es tu formulario , para poder ayudarte y dar a una solicion digna

    saludos

    Att
    Jose Quinto
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com