PHP - Formulario PHP

 
Vista:
sin imagen de perfil
Val: 13
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por sergio (5 intervenciones) el 28/02/2020 14:00:17
Buenos días, estoy atascado con un formulario PHP para un ejercicio, a ver si alguno me podría echar un cable resolviéndomelo.

Enunciado del ejercicio es asi:
Se pide:

• Nombre: es obligatorio, solo debe contener letras y la primera debe estar en mayúscula.
• Apellidos: es obligatorio, solo debe contener letras y la primera debe estar en mayúscula.
• Email: es obligatorio y debe tener el formato de una dirección de correo electrónico.
• Contraseña: es obligatorio y debe contener mínimo una letra mayúscula, una minúscula, un número y debe tener al menos 5 caracteres.
• Confirmación de la contraseña: es obligatorio y debe ser igual que la contraseña.
• Dirección de envío: no es obligatorio.
• Número de tarjeta: no es obligatorio y debe contener 16 números.
• Fecha de caducidad: si el número de tarjeta existe, este campo es obligatorio, si no existe, no es obligatorio. Debe contener una fecha futura.
• Código de seguridad: si el número de tarjeta existe, este campo es obligatorio, si no existe, no es obligatorio. Debe contener solo 3 números.

Cuando el usuario clique al botón de registrarse, se deberá enviar toda la información a través de una petición POST, y se realizarán las siguientes acciones:
1. Se recibirá la información y se comprobará correctamente (Se deben comprobar todos los casos descritos anteriormente).
2. Si toda la información es correcta:
a. Se guardará en un array asociativo (menos la confirmación de la contraseña).
b. Se guardará este array en la sesión.
c. Y se mostrará otra vez el formulario, con los datos rellenados y un mensaje que diga que se ha registrado correctamente.
3. Si alguna información es incorrecta:
a. Se mostrará otra vez el formulario, con los datos rellenados y un mensaje de error al lado del campo o los campos erróneos.


Yo he realizado 3 archivos, el formulario html le llame registro.php, envia los datos a servidor.php y las funciones de validación de datos en un validacion.php

Soy nuevo en esto, y me pierdo en las validaciones y como la 1 mayuscula y esas cosas...

Muchas gracias de antemano, un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.994
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por Julio (830 intervenciones) el 28/02/2020 14:38:50
Hola.

¿Puedes poner el código que tienes? Porque puedes hacer todo eso en el mismo archivo, supongo.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 13
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por sergio (5 intervenciones) el 28/02/2020 15:20:47
Lo requiero en tres archivos.
Hasta el momento tengo esto:

registro.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Registro Usuarios</title>
</head>
 
<?php
//Recuperar inputs por defecto en caso de que existan
if(!empty($_GET['nombre'])){
    $nombreDef = $_GET['nombre'];
}else{
    $nombreDef="";
}
if(!empty($_GET['email'])){
    $emailDef = $_GET['email'];
}else{
    $emailDef="";
}
?>
 
<body>
    <h1>Formulario de registro</h1>
    <section>
    <form name='registro' action='servidor.php' method='post'>
        Nombre: <input type='text' name='nombre' value = <?php echo $nombreDef ?> > <br><br>
        E-mail: <input type='text' name='email'  value = <?php echo $emailDef ?> ><br><br>
        Password: <input type='password' name='password' required > <br><br>
        Repite Password: <input type='password' name='password2' required ><br><br>
        Dirección de envio: <input type='text' name='direccion'><br><br>
        Número de tarjeta: <input type='number' name='tarjeta' ><br><br>
        Fecha de caducidad: <input type='date' name='fecha'><br><br>
        Código de seguridad: <input type='number' name='codigo'><br><br>
        <input type='submit' value='Login'>
    </form>
    </section>
</body>
</html>

----------------------------------------------------------------------------------------------------------------------------
servidor.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Registro Usuarios</title>
</head>
 
<?php
//Recuperar inputs por defecto en caso de que existan
if(!empty($_GET['nombre'])){
    $nombreDef = $_GET['nombre'];
}else{
    $nombreDef="";
}
if(!empty($_GET['email'])){
    $emailDef = $_GET['email'];
}else{
    $emailDef="";
}
?>
 
<body>
    <h1>Formulario de registro</h1>
    <section>
    <form name='registro' action='servidor.php' method='post'>
        Nombre: <input type='text' name='nombre' value = <?php echo $nombreDef ?> > <br><br>
        E-mail: <input type='text' name='email'  value = <?php echo $emailDef ?> ><br><br>
        Password: <input type='password' name='password' required > <br><br>
        Repite Password: <input type='password' name='password2' required ><br><br>
        Dirección de envio: <input type='text' name='direccion'><br><br>
        Número de tarjeta: <input type='number' name='tarjeta' ><br><br>
        Fecha de caducidad: <input type='date' name='fecha'><br><br>
        Código de seguridad: <input type='number' name='codigo'><br><br>
        <input type='submit' value='Login'>
    </form>
    </section>
</body>
</html>

-----------------------------------------------------------------------------------------------------------------------

validacion.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
function validatePassword($password){
    $uppercase = preg_match('@[A-Z]@', $password);
    $lowercase = preg_match('@[a-z]@', $password);
    $number    = preg_match('@[0-9]@', $password);
 
    if(!$uppercase || !$lowercase || !$number || strlen($password) < 5) {
        return false;
    }
    return true;
}
 
function validateInput($input){
    $uppercase = preg_match('@[A-Z]@', $input);
    $lowercase = preg_match('@[a-z]@', $input);
    $number    = preg_match('@[0-9]@', $input);
 
    if($uppercase || $lowercase || $number) {
        return true;
    }
    return false;
 
 
}
 
?>



Me falta muchisimo pero estoy atascado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.994
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por Julio (830 intervenciones) el 28/02/2020 16:15:30
Hola.

Te lo he puesto en dos archivos, el primero se llama validacion.php y es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
 
function isNameOrSurname($text) {
	return preg_match('/^[A-Z]{1}[a-zA-Z]*$/', $text);
}
 
function isEmail($email) {
	if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
		return false;
	}
	return true;
}
 
function isCorrectPassword($password, $repassword) {
	$uppercase = preg_match('@[A-Z]@', $password);
	$lowercase = preg_match('@[a-z]@', $password);
	$number = preg_match('@[0-9]@', $password);
	$lenght = strlen($password) >= 5;
 
	return ($uppercase && $lowercase && $number && $lenght && strcmp($password, $repassword) === 0);
}
 
function isCardNumber($cardNumber) {
	return (strlen($cardNumber) === 16);
}
 
function isFutureDate($date) {
	$now = new DateTime();
	$userDate = DateTime::createFromFormat('Y-m-d', $date);
 
	return ($userDate >= $now);
}
 
function isCorrectCode($code) {
	$number = preg_match('@[0-9]@', $code);
 
	return ($number && strlen($code) === 3);
}
 
?>

El segundo se llama login.php y es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
 
session_start();
 
include('validacion.php');
 
if (isset($_POST['submit'])) {
	$validateName = isNameOrSurname($_POST['nombre']);
	$validateSurname = isNameOrSurname($_POST['apellidos']);
	$validateEmail = isEmail($_POST['email']);
	$validatePassword = isCorrectPassword($_POST['password'], $_POST['password2']);
	$validateAllCard = true;
	if (!empty($_POST['tarjeta'])) {
		$validateCardNumber = isCardNumber($_POST['tarjeta']);
		$validateExpirationDate = false;
		if (!empty($_POST['fecha'])) {
			$validateExpirationDate = isFutureDate($_POST['fecha']);
		}
		$validateCode = false;
		if (!empty($_POST['codigo'])) {
			$validateCode = isCorrectCode($_POST['codigo']);
		}
 
		$validateAllCard = $validateCardNumber && $validateExpirationDate && $validateCode;
	}
 
	if ($validateName && $validateSurname && $validateEmail && $validatePassword && $validateAllCard) {
		$userRegister = array(
			'nombre' => $_POST['nombre'],
			'apellidos' => $_POST['apellidos'],
			'email' => $_POST['email'],
			'direccion' => $_POST['direccion'],
			'tarjeta' => $_POST['tarjeta'],
			'fecha' => $_POST['fecha'],
			'codigo' => $_POST['codigo']
		);
 
		$_SESSION['usuario'] = $userRegister;
 
		echo '<h3>Se ha registrado correctamente</h3>';
	} else {
		$errors = true;
	}
}
 
?>
 
<!DOCTYPE html>
<html lang="es">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title>Registro Usuarios</title>
</head>
<body>
	<h1>Formulario de registro</h1>
	<section>
		<form name='registro' action='login.php' method='post'>
			<p>Nombre: <input type='text' name='nombre' required value="<?php echo (isset($userRegister)) ? $userRegister['nombre'] : '' ; ?>"></p>
			<?php echo (isset($errors) && !$validateName) ? '<small>El nombre no es correcto</small>' : ''; ?>
 
			<p>Apellidos: <input type="text" name="apellidos" required value="<?php echo (isset($userRegister)) ? $userRegister['apellidos'] : '' ; ?>"></p>
			<?php echo (isset($errors) && !$validateSurname) ? '<small>Los apellidos no son correctos</small>' : ''; ?>
 
			<p>E-mail: <input type='email' name='email' required value="<?php echo (isset($userRegister)) ? $userRegister['email'] : '' ; ?>"></p>
			<?php echo (isset($errors) && !$validateEmail) ? '<small>El email no es correcto</small>' : ''; ?>
 
			<p>Password: <input type='password' name='password' required ></p>
			<?php echo (isset($errors) && !$validatePassword) ? '<small>La contraseña no es correcta o ambas contraseñas no coinciden</small>' : ''; ?>
 
			<p>Repite Password: <input type='password' name='password2' required ></p>
 
			<p>Dirección de envio: <input type='text' name='direccion' value="<?php echo (isset($userRegister)) ? $userRegister['direccion'] : '' ; ?>"></p>
 
			<p>Número de tarjeta: <input type='number' name='tarjeta' value="<?php echo (isset($userRegister)) ? $userRegister['tarjeta'] : '' ; ?>"></p>
			<?php echo (isset($errors) && isset($validateCardNumber) && !$validateCardNumber) ? '<small>El número de tarjeta no es correcto</small>' : ''; ?>
 
			<p>Fecha de caducidad: <input type='date' name='fecha' value="<?php echo (isset($userRegister)) ? $userRegister['fecha'] : '' ; ?>"></p>
			<?php echo (isset($errors) && isset($validateExpirationDate) && !$validateExpirationDate) ? '<small>La fecha no es correcta</small>' : ''; ?>
 
			<p>Código de seguridad: <input type='number' name='codigo' value="<?php echo (isset($userRegister)) ? $userRegister['codigo'] : '' ; ?>"></p>
			<?php echo (isset($errors) && isset($validateCode) && !$validateCode) ? '<small>El código no es correcto</small>' : ''; ?>
 
			<p><input type='submit' name="submit" value='Login'></p>
		</form>
	</section>
</body>
</html>

Si no entiendes muchas de las cosas, ve preguntando. O, mejor aún, podrías pasarte por mi blog y suscribirte en este enlace (si marcas la suscripción al boletín te llegará un aviso con todos los artículos). Todavía no tengo muchos artículos, pero voy poniendo dos o tres cada semana y puedes ver de lo que hablaré en el índice de contenidos. Sería un placer poderte ayudar.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 13
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por sergio (5 intervenciones) el 28/02/2020 16:43:53
Lo primero MUCHISIMAS GRACIAS ¡¡¡

Lo segundo...estoy flipando con la rapidez que has hecho todo. Llevo un rato tratando de digerir todo el codigo que has puesto. Ya que quiero comprenderlo todo, es decir, mi intención es entenderlo y saber hacerlo yo bien. Pero creo que me va a llevar mas de un par de horas...

He realizado 3 cursos en Udemy, de programación basica de PHP, y en ninguno de ellos se cogen los conocimiento para realizar este ejercicios como lo has hecho...de verdad que eres un crack.

Lo 3... ya me he inscrito en tu foro,soy oficialmente un suscriptor tuyo, y muy agradecido, y cuando vaya teniendo tiempo empezaré a verlo todo desde 0, ya que me interesa y seguro que tienes unos contenidos buenísimos.

Ahora voy a probar que todo funcione como pide el enunciado, que estoy seguro que si... pero bueno siempre hay que comprobar.

Despues me pondre más a fondo a la compresión total de lo que has hecho, ahora necesito desconectar que me estaba trayendo esto por el camino de la amargura, jajajaja,
Muchisimas gracías.¡¡¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.994
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por Julio (830 intervenciones) el 28/02/2020 16:55:49
Muchas gracias por la suscripción, se agradece para ir aumentando poco a poco la base de visitas. No olvides pasarte por el índice de contenidos y verás todo lo que hay planificado para el futuro, que hay mucho (y más sorpresas que estoy preparando). Ahora mismo aún estoy con cosas muy básicas, pero pronto despegará cuando empiece a hablar de clases, bases de datos y sistemas de login de usuarios.

Por lo demás, seguro que los cursos que hiciste son muy buenos, pero como suele suceder en estas cosas, al final quizá es mucha teoría y poca práctica, y cuando te enfrentas a los problemas es cuando te quedas en blanco. Además, las cosas se pueden hacer de muchísimas formas distintas. Lo que sé es más por experiencia laboral que por los propios cursos, pero hay que pegarse con ello siempre, jeje.

Y sí, revisa que todo esté como quieres. Quizá alguna cosa la he interpretado mal, quizá haya algún errorcito que no haya tenido en cuenta o lo que pueda ser. Y pregunta lo que no vayas entendiendo, que ahí hay alguna cosa "en una línea" que siempre llama mucho la atención cuando no se está empezando.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 13
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por sergio (5 intervenciones) el 28/02/2020 18:16:22
Eres un crack, y punto, jajajaja. Esta chapó, creo que solo faltó este punto:

3. Si alguna información es incorrecta:
a. Se mostrará otra vez el formulario, con los datos rellenados y un mensaje de error al lado del campo o los campos erróneos.

Que cuando el formualrio es erroneo lo guarda la información correcta, sale nuevamente todo en blanco.

Y en este otro:
2. Si toda la información es correcta:
a. Se guardará en un array asociativo (menos la confirmación de la contraseña).
b. Se guardará este array en la sesión.
c. Y se mostrará otra vez el formulario, con los datos rellenados y un mensaje que diga que se ha registrado correctamente.

Guarda todo correcto menos el password. Creo que eso se solucionaría en esta parte del codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if ($validateName && $validateSurname && $validateEmail && $validatePassword && $validateAllCard) {
 
    $userRegister = array(
 
        'nombre' => $_POST['nombre'],
 
        'apellidos' => $_POST['apellidos'],
 
        'email' => $_POST['email'],
 
        'direccion' => $_POST['direccion'],
 
        'tarjeta' => $_POST['tarjeta'],
 
        'fecha' => $_POST['fecha'],
 
        'codigo' => $_POST['codigo']
 
    );
 
 
 
    $_SESSION['usuario'] = $userRegister;
 
 
 
    echo '<h3>Se ha registrado correctamente</h3>';


¿Habría que añadir únicamente el password no? y quedaría así...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$userRegister = array(
 
    'nombre' => $_POST['nombre'],
 
    'apellidos' => $_POST['apellidos'],
 
    'email' => $_POST['email'],
 
      'password' => $_POST['password']  --- codigo añadido
 
    'direccion' => $_POST['direccion'],
 
    'tarjeta' => $_POST['tarjeta'],
 
    'fecha' => $_POST['fecha'],
 
    'codigo' => $_POST['codigo']
 
);


Creo que así la parte de datos correctos estaría perfecta, todas las validaciones creo que estan bien, y que más o menos las he comprendido.

Ahora a ver si solucionamos lo de que se guarden los datos introducidos correctos cuando el formulario es erróneo por algún dato.

Mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.994
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Formulario PHP

Publicado por Julio (830 intervenciones) el 28/02/2020 19:21:23
Cierto, lo primero se me pasó. Entonces cambia esto:

1
value="<?php echo (isset($userRegister)) ? $userRegister['nombre'] : '' ; ?>"

Por esto:

1
value="<?php echo (isset($_POST['nombre'])) ? $_POST['nombre'] : ''; ?>"

Y en todos los demás inputs haces lo mismo pero cambiado ese 'nombre' por 'apellidos', 'email', etc. Creo que debería irte bien.

Y lo que comentas de la contraseña, cierto. Leí que no debía guardarse la contraseña, no que no debiera guardarse la repetición (a ese código le falta una coma al final de $_POST['password'], acuérdate).

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar