Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/07/2008, 16:47
rodaeche
 
Fecha de Ingreso: junio-2008
Mensajes: 15
Antigüedad: 15 años, 11 meses
Puntos: 0
Busqueda Respuesta: Problema con formulario generado en php y script de validacion en js

Esta es la funcion js que valida
Código:
function validacion(){

estaBien = true;
//Devuelve el arreglo de acuerdo a la cantidad de piezas que se hayan creado. 
piezas = arreglo(document.fCrear.piezas.value);
aux="";
//Con el nombre de la pieza, verifico que todos los campos esten llenos.
for(i=0;i<piezas.length && estaBien;i++){
	nombre = piezas[i];
	material = document.fCrear["mat_"+nombre].value;
	arreglo= material.split("/");
	unidad= arreglo[2];
	//Validamos que se haya seleccionado un material
	if(material=="Seleccione un material..." && estaBien){
		estaBien = false;
		alert("Debe seleccionar un material para la pieza "+ nombre);
		document.fCrear["mat_"+nombre].focus();
	}else{
		if(unidad==" CMS " || unidad==" LAM "){
			ancho = document.fCrear["ancho_"+nombre].value;
			largo = document.fCrear["largo_"+nombre].value;
			cantidad = document.fCrear["cant_"+nombre].value;
			
			//Validamos el ancho
			if((ancho=="" || ancho==0) && estaBien) {
				estaBien = false;
				alert("Debe digitar el ancho de la pieza " + nombre);
				document.fCrear["ancho_"+nombre].focus();
			}
			//Validamos el largo
			if((largo==0 || largo=="") && estaBien){
				estaBien = false;
				alert("Debe digitar el largo de la pieza " + nombre);
				document.fCrear["largo_"+nombre].focus();
			}
			//Validamos la cantidad
			if((cantidad==0 || cantidad=="") && estaBien){
				estaBien = false;
				alert("Debe digitar la cantidad para la pieza " + nombre);
				document.fCrear["cant_"+nombre].focus();
			}
		}else{
			document.fCrear["ancho_"+nombre].value = 0;
			document.fCrear["largo_"+nombre].value= 0;
		}
	}
}
Y las listas se generan dinamicamente asi:

Código PHP:
<FORM NAME="fCrear" METHOD="POST" ACTION="funcion.php">
<?php
$piezas 
split("/",$_POST['piezas']); // <-- Contiene el arreglo de los NOMBRES de las piezas que el usuario digitó. 
//Con este ciclo volvemos las piezas Pieza Uno Dos a la forma Pieza_Uno_Dos. 
for($i=0$i<count($piezas)-1$i++){
    
$auxsplit(" ",$piezas[$i]);
    if(
count($aux)>1){
        
$piezas[$i]= $aux[0];
        
$j=1;
        for(; 
$j<count($aux)-1$j++){
            
$piezas[$i].= "_".$aux[$j];                            
        }
        
$piezas[$i].="_".$aux[$j];
    }
}
$menu"";
$ancho="";
$largo="";  
$cant="";
echo 
"<tr><td colspan= \"2\"></td><td><center><b>Ancho</td><td><center><b>Largo</td><td><center><b>Cantidad</td>";
//Me conecto a la BD para seleccionar la lista de los materiales.
if($c=mysql_connect("localhost","root","")){
    
//Conexión exitosa con la BD.  Se procede con el 'query' para los clientes.
    
mysql_select_db ("bd_productos_fabrica"$c);
    
$sql 'SELECT * FROM `materiales` ORDER BY `nombre` ASC';
    
//No se incluye la ultima posición de $piezas por ser una cadena vacía.
    
$i=0;
    echo 
"<ul>";
    
//echo "<script>alert('".$piezas[6]."');</script>";
    
for($i=0;$i<(count($piezas)-1);$i++){
        
//Tomo los materiales de la BD.
        
$res mysql_query($sql,$c);
        
$materiales "<option>Seleccione un material...</option>";
        
//Este ciclo me devuelve lista de materiales a escoger para cada pieza
        
while($row mysql_fetch_array($res)) {
            
$materiales.="<option size=\"20\">".$row["nombre"]." / ".$row["id_prov"]." / ".$row["unid_medida"]." / $".$row["costo_unid"]." / ".$row["id_mat"]."</option>";
        }
        
//Esto se hace para cada material en el arreglo de piezas.
                            
        
$menu="<td width=\"70%\"><center><SELECT style=\"width:300px\" size=\"1\" name=\"mat_".$piezas[$i]."\">".$materiales."</SELECT></td>";
        
$ancho="<td width=\"10%\"><center><input type=\"text\" name=\"ancho_".$piezas[$i]."\" size=\"2\"></td>";
        
$largo="<td width=\"10%\"><center><input type=\"text\" name=\"largo_".$piezas[$i]."\" size=\"2\"></td>";
        
$cant="<td width=\"10%\"><center><input type=\"text\" name=\"cant_".$piezas[$i]."\" size=\"2\"></td>";
        
//Crea la fila con el nombre de la pieza, lista de materiales, campo para el ancho, largo y cantidad. 
        
echo "<tr><td>-<font size=\"1\">",$piezas[$i],"</font></td>",$menu,$ancho,$largo,$cant,"</tr>";
    }
    echo 
"</ul>";
    
//Creo variable hidden que envia la cadena con los nombres de las piezas.
    
echo "<input type=\"hidden\" name=\"piezas\" value=\"".$_POST["piezas"]."\">";
    
//Libero recursos y cierro la conexión
    
mysql_free_result($res);
    if(!
mysql_close($c)){    
        
//Entra aquí si ha ocurrido algún error cerrando la conexión con la BD.
        
echo "<script>alert(\"Error cerrando la conexión.\")</script>";
    }
}else{
    echo 
"<script>alert(\"Ha ocurrido un error en la conexión.\")</script>";
}
?>

//...

<input type="button" value="Crear producto!" name="crearProd" onclick="validacion()">

</form>
Entonces como iba diciendo, si ocurre algun tipo de error, este es notificado al usuario y el formulario queda invalido... Ah y pues algunos comments son obvios, pero me sirven para guiarme en medio de todo ese reguero de codigo