PHP - no me graba el insert en la base de datos

 
Vista:
sin imagen de perfil
Val: 15
Ha disminuido su posición en 77 puestos en PHP (en relación al último mes)
Gráfica de PHP

no me graba el insert en la base de datos

Publicado por javier (7 intervenciones) el 21/06/2020 21:27:02
antes de escribir esta pregunta he revuelto a san google para encontrar una respuesta y las que hay no se asemejan, o por lo menos eso creo, a lo que me ocurre. Tengo el siguiente archivo encontrado en la prehistoria, cuando estudiaba php y lo he rescatado del baul de los recuerdos con pequeñas modificaciones de variables, el caso es que no me da error ninguno en vista previa pero no me graba los datos en la base de datos mysql y no encuentro razon alguna para ello. Necesito encarecidamente ayuda, pues es un proyecto que debia de haber acabado hace dos meses. Gracias a todos y todas.

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
90
91
92
93
94
<?php
$nombre=$_POST['nombre'];
     $apellidos=$_POST['apellidos'];
     $email=$_POST['email'];
     $direccion=$_POST['direccion'];
     $poblacion=$_POST['poblacion'];
     $provincia=$_POST['provincia'];
     $cp=$_POST['cp'];
     $movil=$_POST['movil'];
     $adultos=$_POST['adultos'];
     $infantiles=$_POST['infantiles'];
     $fechareserva=$_POST['fechareserva'];
     $horareserva=$_POST['horareserva'];
     $alergias=$_POST['alergias'];
 
// Recibimos por POST los datos procedentes del formulario
 
     $nombre= htmlentities($_POST['nombre']);
     $apellidos= htmlentities($_POST['apellidos']);
     $email= htmlentities($_POST['email']);
     $direccion= htmlentities($_POST['direccion']);
     $poblacion= htmlentities($_POST['poblacion']);
     $provincia= htmlentities($_POST['provincia']);
     $cp= htmlentities($_POST['cp']);
     $movil= htmlentities($_POST['movil']);
     $adultos= htmlentities($_POST['adultos']);
     $infantiles= htmlentities($_POST['infantiles']);
     $fechareserva= htmlentities($_POST['fechareserva']);
     $horareserva= htmlentities($_POST['horareserva']);
     $alergias= htmlentities($_POST['alergias']);
 
      // Procedemos a comprobar que los campos del formulario no estén vacíos
 
if(empty($_POST['nombre'])){ // comprobamos que el campo nombre no esté vacío
  echo "No has ingresado tu nombre. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['apellidos'])) { // comprobamos que el campo password no esté vacío
  echo "No has ingresado tus apellidos. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['email'])) { // comprobamos que el campo email no esté vacío
  echo "El email ingresado no es válido. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['direccion'])) { // comprobamos que el campo direccion no esté vacío
  echo "No has ingresado la direccion. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['poblacion'])) { // comprobamos que el campo poblacion no este vacio
   echo "No has ingresado la poblacion. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['provincia'])) { // comprobamos que el campo provincia no este vacio
   echo "No has ingresado la provincia. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['cp'])) { // comprobamos que el campo cp no este vacio
   echo "No has ingresado el codigo postal. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['movil'])) { // comprobamos que el campo movil no este vacio
   echo "No has ingresado el telefono. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['adultos'])) { // comprobamos que el campo adultos no este vacio
   echo "No has ingresado los adultos. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['infantiles'])) { // comprobamos que el campo infantiles no este vacio
   echo "No has ingresado los niños. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['fechareserva'])) { // comprobamos que el campo fechareserva no este vacio
   echo "No has ingresado la fechareserva. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['horareserva'])) { // comprobamos que el campo horareserva no este vacio
   echo "No has ingresado la horareserva. <a href='javascript:history.back();'>Reintentar</a>";
}elseif(empty($_POST['alergias'])) { // comprobamos que el campo alergias no este vacio
   echo "No has ingresado las alergias. <a href='javascript:history.back();'>Reintentar</a>";
}else{
 
     $nombre= mysqli_real_escape_string($link, $_POST['nombre']);
     $apellidos= mysqli_real_escape_string($link, $_POST['apellidos']);
     $email= mysqli_real_escape_string($link, $_POST['email']);
     $direccion= mysqli_real_escape_string($link, $_POST['direccion']);
     $poblacion= mysqli_real_escape_string($link, $_POST['poblacion']);
     $provincia= mysqli_real_escape_string($link, $_POST['provincia']);
     $cp= mysqli_real_escape_string($link, $_POST['cp']);
     $movil= mysqli_real_escape_string($link, $_POST['movil']);
     $adultos= mysqli_real_escape_string($link, $_POST['adultos']);
     $infantiles= mysqli_real_escape_string($link, $_POST['infantiles']);
     $fechareserva= mysqli_real_escape_string($link, $_POST['fechareserva']);
     $horareserva= mysqli_real_escape_string($link, $_POST['horareserva']);
     $alergias= mysqli_real_escape_string($link, $_POST['alergias']);
 
// comprobamos que el usuario ingresado no haya sido registrado antes
  $sql= "SELECT * FROM reservas WHERE nombre='$nombre'";
  $result = mysqli_query($link, $sql);
 
  if(isset($_POST['nombre']) && !empty($_POST['nombre']) && isset($_POST['apellidos']) && !empty($_POST['apellidos']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['direccion']) && !empty($_POST['direccion']) && isset($_POST['poblacion']) && !empty($_POST['poblacion']) && isset($_POST['provincia']) && !empty($_POST['provincia']) && isset($_POST['cp']) && !empty($_POST['cp']) && isset($_POST['movil']) && !empty($_POST['movil']) && isset($_POST['adultos']) && !empty($_POST['adultos']) && isset($_POST['infantiles']) && !empty($_POST['infantiles']) && isset($_POST['fechareserva']) && !empty($_POST['fechareserva']) && isset($_POST['horareserva']) && !empty($_POST['horareserva']) && isset($_POST['alergias']) && !empty($_POST['alergias'])){
 
  mysqli_query($link,("INSERT INTO reservas (id, nombre, apellidos, email, direccion, poblacion, provincia, cp, movil, adultos, infantiles, fechareserva, horareserva, alergias, freg) VALUES ('$_POST[nombre]','$_POST[apellidos]','$_POST[email]','$_POST[direccion]','$_POST[poblacion]','$_POST[provincia]','$_POST[cp]','$_POST[movil]','$_POST[adultos]','$_POST[infantiles]','$_POST[fechareserva]','$_POST[horareserva]','$_POST[alergias]',NOW())"));
   echo '<script> alert("Reserva registrada");
location.href="index.php";
</script>';
 
  }else{
      echo '<script> alert ("Ha ocurrido un error y no se registraron los datos.");
          </script>';
  }
}
 
 
?>

gracias
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.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

no me graba el insert en la base de datos

Publicado por Julio (830 intervenciones) el 22/06/2020 09:44:06
Hola.

Antes de llegar a lo que creo que será tu error, ¿eres consciente de que estás haciendo muchiiiiiiiiiiiiiiiiiiiiiísimas cosas que luego son completamente inútiles? Te explico:

Hasta la línea 14 empiezas guardando lo que recibes de $_POST en unas variables más cómodas de manejar. Bien, no hay problema. Luego, de la línea 18 a la 30 sobreescribes estas mismas variables obteniendo de nuevo lo que recibes de $_POST pero pasándole el htmlentities antes. ¿Entonces de qué te sirven las 14 primeras líneas? Sobran, no las usas para nada.

A continuación, de la línea 34 a la 60 compruebas si lo que viene desde $_POST está vacío, ¡otra vez utilizando $_POST! ¿Entonces para qué guardarte el valor de $_POST en cada una de las variables anteriores? Empieza comprobando si está vacío antes de proceder a guardar su valor en una variable.

Pero es que luego de la línea 62 a la 74, una vez has comprobado que no estén vacías, ¡vuelves a sobreescribir de nuevo las mismas variables para pasarles mysqli_real_escape_string utilizando de nuevo los valores de $_POST! Por ello, las primeras variables que definías en las 14 primeras líneas, que luego te cargabas y volvías a definir en las líneas de 18 a la 30 y luego no las usabas en las comprobaciones, vuelven a ser inútiles, ya que no las has utilizado para nada y las has vuelto a sobreescribir. Además, aquí utilizas la variable $link, que imagino que es la conexión a la base de datos pero que yo no la veo definida en ningún sitio. Quizá este es tu primer error.

Luego coges y buscas si hay reservas con $nombre (aquí por fin sí usas una variable definida anteriormente), obtienes el resultado en $result (de nuevo utilizando $link) y, ¿qué haces luego con $result? No la utilizas para nada, con lo que si tiene una reserva, dará igual, porque lo habrás obtenido con $result pero no has hecho ninguna otra comprobación con ello. Deberías hacer algo si hay reservas, supongo.

Lo siguiente ya es más redundante aún. Haces un if comprobando si existe cada una de las variables $_POST y si no están vacías. Fíjate bien en lo que estás haciendo. En primer lugar, si no existieran esas variables, ya haría rato que el programa te hubiera fallado (concretamente en la línea 2, cuando haces $nombre = $_POST['nombre'], pues si no existe ya te da error), así que hacer la comprobación aquí carece de sentido, ya que es lo primero que deberías haber hecho. En segundo lugar, compruebas si cada variable no está vacía, ¡una comprobación que has hecho con los if-else justo desde la línea 34! De nuevo es repetir lo mismo que ya has hecho. Ah, y de nuevo utilizando $_POST en lugar de las variables que ya has definido anteriormente y que no las utilizas.

Por último, haces el INSERT pero..., ¡vuelves a utilizar las variables $_POST! De nuevo me pregunto, ¿entonces para qué has definido $nombre, $apellidos, $email, $direccion, etc. unas cuantas veces antes si no las vas a utilizar? Todas esas comprobaciones de htmlentities y mysqli_real_escape_string las has hecho en unas variables que luego no utilizas, con lo que usar ahora de nuevo $_POST hace que todo lo anterior no te haya sido útil.

Y llegamos al que creo que es, finalmente, el error que te dará. Haces un INSERT de 15 campos pero le pasas en VALUES 14 campos, pues por lo que veo, en el INSERT añades id y en VALUES no. Si el id es autoincremental en la base de datos, no necesitas ponerlo aquí, pues ya se insertará solo, así que deberías quitarlo.

Así pues, yo diría que el error está en este INSERT, pero fíjate que tienes ahí casi unas 80 líneas que, al fin y al cabo, no te han servido de mucho. No te lo digo con mal tono (a veces en la escritura lo puede parecer), pero sólo te lo comentaba para que fueras consciente de que estás haciendo muchísimas cosas que luego sobreescribes o no utilizas para nada. Revísalo bien, aparte de corregir ese INSERT.

-----------------------------
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
1
Comentar
sin imagen de perfil
Val: 15
Ha disminuido su posición en 77 puestos en PHP (en relación al último mes)
Gráfica de PHP

no me graba el insert en la base de datos

Publicado por javier (7 intervenciones) el 22/06/2020 16:34:58
Muchas gracias pr las explicacnes yno me tomo a mal el tono pueso he traducido en un no eenseñanz, soy novato ensto aunque enlarhistoriaha estudido php. Probar todolo que e has dco y ya econtar.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.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

no me graba el insert en la base de datos

Publicado por Julio (830 intervenciones) el 22/06/2020 17:25:55
Me alegro. Mira, con una sola variable sería algo así:

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
<?php
// En primer lugar obtenemos la conexión y la guardamos en $link
 
if (isset($_POST['nombre']) && !empty($_POST['nombre'])) {
	// Conversión de entidades HTML
	$nombre = htmlentities($_POST['nombre']);
	// Escape de caracteres especiales
	$nombre = mysqli_real_escape_string($link, $nombre);
 
	// Comprobación de si ya existe una reserva con ese nombre
	$result = mysqli_query($link, "SELECT * FROM reservas WHERE nombre='$nombre'");
	if ($result) {
		if (mysqli_num_rows($result) > 0) {
			echo '<script> alert("La reserva ya existe.");</script>';
		} else {
			$insert = mysqli_query($link, "INSERT INTO reservas (nombre) VALUES ('$nombre')");
			if ($insert) {
				echo '<script> alert("La reserva se ha registrado correctamente.");</script>';
			} else {
				echo '<script> alert("Ha ocurrido un error mientras se guardaba la reserva.");</script>';
			}
		}
	} else {
		echo '<script> alert("Ha ocurrido un error mientras se obtenían las reservas.");</script>';
	}
} else {
	echo '<script> alert("No has ingresado el nombre.");</script>';
}

Primero obtenemos $link (que no sé dónde estará en tu código), luego comprobamos si existe $_POST['nombre'] y no está vacía (aquí tendrías que añadir toooodas las demás variables), haces la conversión, escapas los caracteres (ojo, sobre $nombre, no sobre $_POST['nombre'], el cual ya no utilizo más). Compruebas si existe una reserva con ese nombre comprobando si ha habido algún error de conexión primero y si se ha obtenido algún resultado (con mysqli_num_rows) y, finalmente, insertas y compruebas que no ha ocurrido ningún error.

Espero que te ayude.

-----------------------------
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
2
Comentar
sin imagen de perfil
Val: 15
Ha disminuido su posición en 77 puestos en PHP (en relación al último mes)
Gráfica de PHP

no me graba el insert en la base de datos

Publicado por javier (7 intervenciones) el 22/06/2020 18:04:22
Muchas gracias por la solucion, meha venido de perila. Te reitero mis gracias. Un saludo
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