Buenos dias, tengo un problema, estoy creando una encuesta que se crea automanticamente dependiendo del numeto de encuesta elegido para contestar, el problema esta cuando tengo q validar campos obligatorios ( cabe destacar que no todos los campos son obligatorios ) entonces se me hace un poco de lio saber cual de ellos tengo q validar.
Encontre una forma bastante de hacerlo, lo que hago es hacer una consulta sql con todas las preguntas que son obligatorias de esa encuesta entonces guardo los nombre de las preguntas en un array ( el nombre de la pregunta es el nombre del campo name) entonces de esa forma obtengo cuales son las que deben ser completadas.
El codigo es el siguiente:
<?
$id_work_orders_tmp = $_GET[id_work_orders_tmp];
$order_type = $_GET[order_type];
echo '<TABLE BORDER="0"><TR><TD colspan="2"><font size="2"><b>Para que la solicitud sea procesada debera completar estas preguntas.</b></font></TD></TR>';
echo "<TR><TD><br></TR></TD>";
$sql=" where id =".$order_type;
$tipo_encuesta = new request();
$tipo_encuesta->openOrder_type($sql);
$sql=" WHERE usages='".$tipo_encuesta->openOrder_type_name[0]."'";
$listSurvey = new request();
$listSurvey->openSurveys($sql);
$sql=" WHERE id_survey=".$listSurvey->openSurveys_id[0]." order by orden ASC";
$preguntas = new request();
$preguntas->openSrvy_Questions($sql);
$cantidadPreguntas = count($preguntas->openSrvy_Questions_id);
$block1 = new block();
$block1->form = "epD";
$block1->openForm('../projects_site/view_survey_complete.php?id_suvey='.$listSurvey->openSurveys_id[0].'&id_work_orders_tmp='.$_GET[id_work_orders_tmp].'&order_type='.$_GET[order_type].'&'.session_name()."=".session_id().'&action=grab a_nuevo');
$b = 0;
for ($i=0;$i<$cantidadPreguntas;$i++)//recorre cada una de las preguntas
{
if ($preguntas->openSrvy_Questions_mandatory[$i]==1)
{
echo "<TR><TD colspan='2'><font color='red'><b>".($i+1).". ".$preguntas->openSrvy_Questions_description[$i].":</b></TD></TR></font>";
$arreglo[$b] = $preguntas->openSrvy_Questions_description[$i];
$b = $b+1;
}
else
{
echo "<TR><TD colspan='2'><b>".$preguntas->openSrvy_Questions_description[$i].":</b></TD></TR>";
}
$sql=" WHERE id_srvy_qst=".$preguntas->openSrvy_Questions_id[$i]." order by orden ASC";
$opciones=new request();
$opciones->openSrvy_Qst_Option($sql);
$sql=" WHERE id=".$preguntas->openSrvy_Questions_answer_type[$i];
$tipoForm= new request();
$tipoForm->answers_types($sql);
if($tipoForm->answers_types_description[0]=='text')
{
echo "<TR><TD>".$opciones->openSrvy_Qst_Option_description[$m]."</TD></TR>";
echo "<td><textarea class='style_input' rows='5' cols='50' name='".$preguntas->openSrvy_Questions_description[$i]."' ></textarea></tr></td><br>";
}
if($tipoForm->answers_types_description[0]=='radio')
{
$cantidad_de_posibles_rtas = count($opciones->openSrvy_Qst_Option_id);
for($m=0;$m<$cantidad_de_posibles_rtas;$m++)
{
$sql=" WHERE id=".$preguntas->openSrvy_Questions_answer_type[$i];
$tipoForm= new request();
$tipoForm->answers_types($sql);
echo "<TR><TD> ".($i+1).".".($m+1)." ".$opciones->openSrvy_Qst_Option_description[$m];
echo "<input type='".$tipoForm->answers_types_description[0]."' name='".$preguntas->openSrvy_Questions_description[$i]."' value='".$opciones->openSrvy_Qst_Option_description[$m]."' ></TD></TR>";
}
}
if($tipoForm->answers_types_description[0]=='select')
{
echo"<TR><TD><select class='style_select' name='".$preguntas->openSrvy_Questions_description[$i]."' >";
echo "<option value='0' checked>Seleccione</option>";
$cantidad_de_posibles_rtas = count($opciones->openSrvy_Qst_Option_id);
for($m=0;$m<$cantidad_de_posibles_rtas;$m++)
{
echo "<option value='".$opciones->openSrvy_Qst_Option_description[$m]."' >".$opciones->openSrvy_Qst_Option_description[$m]."</option>";
}
echo"</select></TR></TD>";
}
if($tipoForm->answers_types_description[0]=='checkbox')
{
$cantidad_de_posibles_rtas = count($opciones->openSrvy_Qst_Option_id);
for($m=0;$m<$cantidad_de_posibles_rtas;$m++)
{
$sql=" WHERE id=".$preguntas->openSrvy_Questions_answer_type[$i];
$tipoForm= new request();
$tipoForm->answers_types($sql);
//echo "<tr><td>".$opciones->openSrvy_Qst_Option_description[$m]."</td>";
echo "<TR><TD> ".($i+1).'.'.($m+ 1).' '.$opciones->openSrvy_Qst_Option_description[$m]."<input type='".$tipoForm->answers_types_description[0]."' class='style_checkbox' name='".$preguntas->openSrvy_Questions_description[$i]."[]' value='".$opciones->openSrvy_Qst_Option_description[$m]."'></TR></TD>";
}
}
echo "<TR><TD><br></TR></TD>";
}//Fin del for
//echo $arreglo[1];
$arreglo = implode('*', $arreglo);
echo "<TR><TD><input TYPE='button' onClick='validaEncuesta(this.form,\"".$arreglo."\" );' class='style_button' value='".$strings["save"]."' name='aceptar'> <input class='style_button' TYPE='button' value='Cancelar' onclick='history.go(-3)' ></TR></TD>";
$block1->closeForm()
?>
Y el codigo javascript es este:
function validaEncuesta(Form,obligatorios)
{
a = obligatorios.toString();
a = a.split('*');
for (var i=0;i<a.length;i++)
{
nombre = a[i];
if (Form.nombre.value== '')
{
alert('Falta completar' + nombre);
// Form.nombre.focus();
return;
}
}
}
Pero me da un error pq no puedo acceder al value del formularia reemplazando el nombre del campo del formulario por el nombre que contiene la variable "nombre".
Por ejemplo un campo obligatorio que se llama comentarios y si yo pongo :
if (Form.comentarios.value== '')
{
alert('Falta completar el comentario');
// Form.comentario.focus();
return;
}
me da todo bien, pero si lo reemplazo por la variable nombre que tiene el valor comentario no me anda; por ejemplo:
if (Form.nombre.value== '')
{
alert('Falta completar' + nombre);
// Form.nombre.focus();
return;
}
Espero se haya entendido y si alguien me puede ayudar lo agradeceria.
SAludos.