Hacerlo con Javascript esta bien para que el proceso se haga rápido, pero, ¿que pasa si el usuario tiene desabilitado javascript?, este código no serviría de nada además que por cuestiones de seguridad debes de validar también del lado del servidor (PHP); ahora, volviendo a lo que preguntabas:
Cita:
Iniciado por Elisa85 Como se puede controlar con PHP que el usuario haya introducido los campos obligatorios? y que vuelva al formulario, sin borrar los otros datos que sí ha completado?
Te acabo de hacer un ejemplo sencillo, de lo que trata es que vamos a crear unos valores de los campos de texto que tendran por default y cuando el usuario pulse el boton enviar se recargara la misma página y evaluaremos si los campos contienen datos válidos y que además no sean vacios de ser así redirigiremos al usuario a otra pagina que se encargara de hacer con estas variables lo que se nos antoje, de lo contrario marcaremos los errores y se los mostraremos al usuario para que los corrija.
ejemplo.php
Código PHP:
<?php
// Valores por default de las variables
$nombre = "";
$ape_pat = "";
$ape_mat = "";
$edad = "";
if( isset( $_POST['submit'] ) )
{
// Creamos nombres de variables cortos
$nombre = trim( $_POST['nombre'] );
$ape_pat = trim( $_POST['ape_pat'] );
$ape_mat = trim( $_POST['ape_mat'] );
$edad = trim( $_POST['edad'] );
// validamos que se hayan enviado los campos nombre, edad y alguno de los 2 apellidos
if( ( !empty( $nombre ) && !is_numeric( $nombre ) ) && ( !empty( $ape_pat ) || !empty( $ape_mat ) ) && ( !is_numeric( $ape_pat ) && !is_numeric( $ape_mat ) ) && ( !empty( $edad ) && is_numeric( $edad ) ) )
{
header("Location: tupagina.php");
exit;
}
else
{
echo "Por favor corrija los campos marcados con rojo.</br>";
if( empty( $nombre ) || is_numeric( $nombre ) )
$nombre = $nombre."\" style=\"background-color: #FF0000\"";
if( empty( $ape_pat ) && empty( $ape_mat ) )
{
echo "Por favor, de los campos que estan marcados con verde llene alguno de ellos.</br>";
$ape_pat = $ape_pat."\" style=\"background-color: #00FF00\"";
$ape_mat = $ape_mat."\" style=\"background-color: #00FF00\"";
}
if( is_numeric( $ape_pat ) )
$ape_pat = $ape_pat."\" style=\"background-color: #FF0000\"";
if( is_numeric( $ape_mat ) )
$ape_mat = $ape_mat."\" style=\"background-color: #FF0000\"";
if( empty( $edad ) || !is_numeric( $edad ) )
$edad = $edad."\" style=\"background-color: #FF0000\"";
echo "<p>";
}
}
echo "Los campos marcados con asterisco (*) son obligatorios y";
echo " en cuanto a los apellidos, por lo menos debe escribir uno:</br>";
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">";
echo "*Nombre: <input type=\"text\" name=\"nombre\" value=\"$nombre\"></br>";
echo "Apellido Paterno: <input type=\"text\" name=\"ape_pat\" value=\"$ape_pat\"></br>";
echo "Apellido Materno: <input type=\"text\" name=\"ape_mat\" value=\"$ape_mat\"></br>";
echo "*Edad: <input type=\"text\" size=\"2\" maxlength=\"2\" name=\"edad\" value=\"$edad\"><p>";
echo "<input type=\"submit\" name=\"submit\" value=\"Enviar\">";
?>
tupagina.php
Código PHP:
<?php
echo "Se enviaron los campos correctamente";
// hacemos lo que se nos antoje con las variables
?>
Luego, en cuanto a tu otra pregunta:
Cita:
Iniciado por Elisa85 Tengo otra duda, como puedo hacer para que en este mismo formulario, un menu desplegable se rellene segun lo que haya seleccionado en otro menu desplegable? (todo dentro del mismo formulario, y sin coger los valores de la base de datos)
Eso lo puedes resolver de dos maneras:
1.- Utilizando JavaScript echandole un vistazo a las Faq's de ese foro:
http://www.forosdelweb.com/showthrea...655#post259655
2.- Utilizando Ajax que en lo personal es lo que más me agrada por que no tienes que cargarle toda la información al usuario más que la que el necesita, aca te dejo un enlace de una pagina que considero muy buena y que te explica como hacer eso y te deja descargar el archivo para que lo puedas analizar:
http://www.formatoweb.com.ar/ajax/se...pendientes.php
Espero sea lo que necesitabas o por lo menos te de una idea. Suerte