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++){
$aux= split(" ",$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