PHP - Insercion datos PHP en MYSQL, no genera nada

   
Vista:

Insercion datos PHP en MYSQL, no genera nada

Publicado por Juan Manuel (18 intervenciones) el 08/11/2015 00:05:05
Buenas noches, tengo el siguiente código, en el archivo "nuevoarbitro.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
<html>
	<head><title>Nuevo &aacuterbitro</title></head>
		<body>
			<h1>Formulario para introducci&oacuten &aacuterbitro</h1>
 
			<?php
				if (isset($_GET['enviar'])) {
					$link= mysql_connect("localhost", "root","1234");
						mysql_select_db("proyecto",$db);
							$sql = "INSERT INTO ARBITROS(nombre, apellido_1, apellido_2, fecha_nacimiento, telefono_1, telefono_2)".
								"VALUES ('$nombre','$ape1','$ape2','$nacimiento','$movil1','$movil2')";
									$result = mysql_query($sql);
										echo "Introducido correctamente.\n";
				}else{
			?>
			<form method="post" action="nuevoarbitro.php">
				Nombre:<input type="text" name="nombre"/>
				Apellido1:<input type="text" name="ape1"/>
				Apellido2:<input type="text" name="ape2"/><br>
				Fecha de Nacimiento:<input type="datetime" name="nacimiento"/><br>
				Telefono1:<input type="tel" name="movil1"/>
				Telefono2:<input type="tel" name="movil2"/><br>
 
				<input type="submit" value="enviar"/>
				<input type="reset" value="borrar"/>
				<input type="submit" value="volver atras" onclick="this.form.action='calcurefhome.html'"/>
			</form>
			<?php
				} //end if
			?>
		</body>
</html>

Al hacer click en el boton "Enviar" no hace nada(parece que refresca la página), pero no inserta datos en la base de datos.

¿Cual es el error? Llevo un largo intentando dar con el error y no lo encuentro

Aclarar que la tabla en la que quiero meter los datos del formulario, está vacía y el primer campo, es auto_increment.
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por cesar (24 intervenciones) el 08/11/2015 04:07:09
y la conexion donde esta?
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Juan Manuel (18 intervenciones) el 08/11/2015 12:28:19
Buenas, en primer lugar gracias por contestar.

La conexión con la base de datos, no estaría en estas lineas?

1
2
$link= mysql_connect("localhost", "root","1234");
mysql_select_db("proyecto",$db);
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Fernando Muñoz (1 intervención) el 08/11/2015 05:04:09
Tu error es que estas tratando de obtener por medio de $_GET y los datos están siendo enviados por $_POST

Saludos! y si quieres un consejo, deberías utilizar algún ORM :)


**
Podría funcionar cambiando la línea "if (isset($_GET['enviar'])) {" por if (isset($_POST['enviar'])) {
**
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Juan Manuel (18 intervenciones) el 08/11/2015 12:28:57
Gracias, error tonto, pero aún así, sigue sin hacer nada cuando pulso el botón enviar.
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 Lawliet

Insercion datos PHP en MYSQL, no genera nada

Publicado por Lawliet (222 intervenciones) el 08/11/2015 22:32:57
Hola...

Más que nada el error se encuentra en la forma en que tienes organizado tu código. Te explico...

1.- Si vas a usar el mismo archivo para obtener los datos y guardar, entonces en el action de tu form no debería hacer referencia a ningún archivo, se recomienda dejarlo con con el signo #, quedando de la siguiente manera: action="#".
2.- No tienes por que realizar validación alguna o por lo menos la validación que realizas es incorrecta, no tienes porque dejar como else el formulario ya que siempre tendrás que mostrar el formulario para ingresar los datos, por lo tanto es innecesario lo que estas haciendo.
3.- Es buena practica que todo tu código PHP siempre valla al último del código HTML, aunque puede haber excepción alguna pero para estos casos en particular; es decir, cuando guardamos, actualizamos o borramos un registro dentro del mismo archivo .php, entonces se recomiendo colocar el código PHP al final.
4.- Sinceramente no estoy seguro que tu contraseña sea correcta, ya que si estas trabajando con WAMP como servidor, no existe una contraseña para la base de datos.
5.- mysql_select_db, recibe dos parámetros; el primero corresponde al nombre de la base de datos, mientras que el segundo corresponde a tu cadena de conexión, en tu caso la cadena viene siendo $link, no se de donde sacas esa variable $db.
6.- Si vas a insertar en todos los campos de tu table, entonces no le veo sentido a lo siguiente...
1
INSERT INTO ARBITROS(nombre, apellido_1, apellido_2, fecha_nacimiento, telefono_1, telefono_2)

Esto es totalmente aceptable, cuando no insertas en todos los campos ya que cuando viene la inserción de datos puede ocasionarte un error de indices, pero si vas a insertar en todos los campos, esto sería lo correcto...

1
INSERT INTO ARBITROS VALUES ()

7.- Cuando ingresas un acento a través del código HTML, no te olvides de terminar el código con ;, ya que sino puede ocasionar problemas de vista al cerrar correctamente la etiqueta donde colocaste el carácter con acento.

Te proporciono un ejemplo de como guardar tu información con el mismo archivo...

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
<html>
	<head><title>Nuevo &aacuterbitro;</title></head>
	<body>
		<h1>Formulario para introducci&oacuten &aacuterbitro;</h1>
		<form action="#" method="get">
			<table>
				<tr>
					<td>ID:</td>
					<td><input type="text" name="id"/></td>
				</tr>
				<tr>
					<td>NOMBRE:</td>
					<td><input type="text" name="nombre"/></td>
				</tr>
				<tr>
					<td>APE. PATERNO:</td>
					<td><input type="text" name="ape_paterno"/></td>
				</tr>
				<tr>
					<td>APE. MATERNO:</td>
					<td><input type="text" name="ape_materno"/></td>
				</tr>
				<tr>
					<td>EDAD:</td>
					<td><input type="text" name="edad"/></td>
				</tr>
				<tr>
					<td>E-MAIL:</td>
					<td><input type="text" name="correo"/></td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit" value="Guardar"/></td>
				</tr>
			</table>
		</form>
		<?php
			if(isset($_GET['id'])){
				$id=$_GET['id'];
				$nombre=$_GET['nombre'];
				$ape_paterno=$_GET['ape_paterno'];
				$ape_materno=$_GET['ape_materno'];
				$edad=$_GET['edad'];
				$correo=$_GET['correo'];
 
				$link= mysql_connect("localhost", "root","") or die("Error de conexión: ".mysql_error());
				mysql_select_db("practicas",$link) or die("Error de base de datos: ".mysql_error());
				$sql = "INSERT INTO usuario VALUES ('$id','$nombre','$ape_paterno','$ape_materno','$edad','$correo')";
				$result = mysql_query($sql);
				if($result){
					echo "Registro guardado correctamente.";
				} else {
					die("Error de consulta: ".mysql_error());
				}
			}
		?>
	</body>
</html>

Sin más que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Juan Manuel (18 intervenciones) el 09/11/2015 00:23:58
Gracias por responder, de tan buena forma, lo cierto es que seguí tu consejo y transformé un poco lo que hice a lo largo del día de hoy.

Tu punto nº1 me parece simplemente espectacular, es algo que no me han enseñado en el grado superior.
Respecto al punto 2, puse el else para que en el caso de no enviar nada o hubiese error, saltase un mensaje de error(aunque lo quité siguiendo tu consejo).
Lo del punto 3, tampoco lo sabía, me enseñaron en clases, que "por comodidad" el codigo PHP fuese al principio.
En el punto 4, la contraseña es la correcta, trabajo en XAMPP, y cambié la contraseña a "1234" pero al intentar insertar registros en la base de datos desde el formulario, decia que no tenía permisos(más adelante detallo el problema).
El punto 5, pongo todas las variables, porque me pongo en el supuesto de que haya gente, que solo tenga un apellido o solo un numero de movil, si no, como bien dices, pondría:

1
INSERT INTO ARBITROS VALUES ()

Tengo una pregunta que me puede aclarar bastante en un futuro:

¿Por qué usas el metodo GET y no POST? Me recomendaron usar POST porque al ir incluido en el mismo fichero era el idoneo a usar.

Corregí todo tal y como dijiste, pero es que ahora da el siguiente error:

1
Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in C:\proyecto\nuevoarbitro.php on line 53

Fui a la linea 53 y se supone que lo que tengo mal es...
1
mysqli_select_db("proyecto",$link) or die ("Error de base de datos: ".mysql_error());

Posibles causas:

-Usé Mysqli en lugar de Mysql porque mysql está "deprecated" y actualmente recomiendan usar mysqli o pdo.
-No veo indicio de error en esa línea, la base de datos que contiene las tablas se llama "proyecto", y la tabla en la que introduzco los datos se llama "arbitros" por lo que está todo, aparentemente bien, de todas formas dejo también la línea

1
$link= mysqli_connect("localhost", "root","") or die ("Error de conexion: ".mysql_error());

Como comenté anteriormente, estoy usando XAMPP, desde la consola en CMD>c:\xampp\mysql\bin mysql -u root -p accedo sin problemas, quité la contraseña 1234 por si podría ocasionar algún problema, asi que cuando me pide contraseña doy intro, y ya puedo crear bases de datos, introducir datos en las tablas, crear tablas, alterarlas, o borrarlas, es decir, tengo total control sobre la base de datos.

Muchas 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 Lawliet

Insercion datos PHP en MYSQL, no genera nada

Publicado por Lawliet (222 intervenciones) el 09/11/2015 01:15:58
Hola...

¿Por qué usas el metodo GET y no POST? Me recomendaron usar POST porque al ir incluido en el mismo fichero era el idoneo a usar.

Use GET por que era el método que usabas en tu código, no obstante, tanto el GET como el POST son usados dependiendo de la necesidad de tu aplicación, en mi experiencia eh usado tanto el GET como el POST, aunque eh usado mas veces el POST para recuperar los datos que el GET.

Efectivamente, como mencionas mysql_ esta siendo obsoleto por que lo que se recomienda actualmente trabajar con mysqli_, incluso creo que en las versiones mas recientes de PHP te mandan la advertencia donde dice que mysql_ esta siendo obsoleto. En lo personal eh trabajado con mysqli_ pero no lo saque en el tema debido a que en tu código usabas mysql_, sin embargo, es importante que comiences a actualizarte e implementar los nuevos métodos y/o funciones que nos proporciona PHP.

Primero, es importante mencionarte una cosa, no puedes combinar ambos métodos; es decir, si vas a trabajar con mysql_ entonces tu código no debe contener mysqli_, si vas a trabajar con mysqli_ entonces tu código no debe contener mysql_, incluso el mismo PHP te manda un error si haces una combinación de ambas.

Warning: mysql_fetch_array() expects parameter 1 to be resource, object given in C:\wamp\www\ejercicio\index.php on line 17

Por lo tanto, es un punto muy importante a aclarar, puede que la lógica del programa este correcto pero son la simple combinación de ambas funciones y/o métodos puedes desperdiciar tiempo buscando el error.

En segundo lugar, es importante mencionar que una conexión con mysqli_ es totalmente diferente a la manera tradicional; es decir, mysql_.


Conexión mysql_.
1
2
3
4
5
6
7
8
9
10
11
$link = mysql_connect("localhost", "root","") or die("Error de conexion: ".mysql_error());
mysql_select_db("practicas",$link) or die("Error de base de datos: ".mysql_error());
$sql = "SELECT * FROM usuario";
$result = mysql_query($sql);
if($result){
	while($row = mysql_fetch_array($result)){
		echo $row["id"]." - ".$row["nombre"]." - ".$row["apellido_p"]." - ".$row["apellido_m"]." - ".$row["edad"]." - ".$row["correo"]."</br>";
	}
} else {
	die("Error de consulta: ".mysql_error());
}

Con la manera tradicional podemos observar que después de ingresar los datos de conexión al servidor donde nos vamos a conectar, tenemos que hacer uso de un método donde nos permite seleccionar la base de datos (mysql_select_db), donde el primer parámetro corresponde al nombre de la base de datos y el segundo a tu conexión, posteriormente, la ejecución de la consulta y demás es algo que ya conoces a estas alturas.

Con mysqli_ ocurre un cambio en la conexión, nosotros seleccionamos la base de datos cuando ingresamos la dirección, usuario y contraseña del servidor; es decir, mysqli_connect("server","usuario","password","basedatos"), recibiendo como cuarto parámetro el nombre de la base de datos, la función mysqli_connect te ahorra una línea de código, eliminando el mysqli_select_db.

Conexión mysqli_.
1
2
3
4
5
6
$link = mysqli_connect("localhost","root","","practicas") or die ("Error de conexion: ".mysqli_connect_error());
$sql = "SELECT * FROM usuario";
$result = mysqli_query($link, $sql) or die (mysqli_error($link));
while($row = mysqli_fetch_array($result)){
	echo $row["id"]." - ".$row["nombre"]." - ".$row["apellido_p"]." - ".$row["apellido_m"]." - ".$row["edad"]." - ".$row["correo"]."</br>";
}

Otro cambio ocurre cuando ejecutamos la consulta; con mysql_query únicamente pasamos la cadena a ejecutar por lo tanto no tenemos problemas alguno, sin embargo, con mysqli_ además de ejecutar la consulta tenemos que pasar la conexión ya que la función recibe como entrada dos parámetros: el primero corresponde a la cadena de conexión y el segundo a la cadena a ejecutar.

Te proporciono ambos códigos para que veas las diferencias entre uno y otro, no obstante, te recomiendo investigues en Internet y vallas leyendo la documentación de ambos ya que aprenderás mas por tu cuenta que lo que te enseñan en la carrera.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Juan Manuel (18 intervenciones) el 09/11/2015 09:19:07
Algo tengo que seguir haciendo mal, cuando sigue sin funcionar

Da un warning en esta linea:



1
die ("Error de consulta: ".mysqli_error($result));

El warning en cuestion: "Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in C:\proyecto\nuevoarbitro.php on line 59"

La he comentado para "forzarla" a que entre y nada, vuelvo a poner el codigo de todo lo que hice con mysqli a ver si encontrais el fallo o por qué no funciona

1
2
3
4
5
6
7
8
9
10
$link= mysqli_connect("localhost", "root", "", "proyecto") or die ("Error de conexion: ".mysqli_connect_error());
						$sql = "INSERT INTO ARBITROS values (nombre, apellido_1, apellido_2, fecha_nacimiento, telefono_1, telefono_2,email)
								VALUES ('$nombre','$ape1','$ape2,'$nacimiento','$movil1','$movil2','$mail')";
						$result = mysqli_query($link, $sql);
							if($result){
								echo "Introducido correctamente.\n";
							}else{
								die ("Error de consulta: ".mysqli_error($result));
							}
					}

Es decir, doy a enviar, y no pasa absolutamente nada(bueno si, parece que la pagina se refresca, pero no introduce nada en las tablas)
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 Lawliet

Insercion datos PHP en MYSQL, no genera nada

Publicado por Lawliet (222 intervenciones) el 09/11/2015 19:02:18
Hola...

Tienes ese error por que mysqli_error recibe como parámetro tu cadena de conexión; es decir, $link en este caso, mientras que tu le estás pasando como parámetro la ejecución de tu consulta.

Cambia esta línea.
1
die ("Error de consulta: ".mysqli_error($result));

Por la siguiente.
1
die ("Error de consulta: ".mysqli_error($link));

Cualquier duda y/o inconveniente, aquí estamos.

Suerte!
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Juan Manuel (18 intervenciones) el 09/11/2015 21:24:35
Gracias tio!!! Arreglado, lo malo es que ahora, OTRO ERROR, y ya estoy empezando a estar harto de esta estupidez que me está retrasando bastante...


Ahora el error es:

1
Error de consulta: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES ('Juan Manuel','Apeuno','Apedos,'1970-04-10','666666666','999999999','ju' at line 2

¿Puede ser porque en la tabla tenga en la primera columna el campo ID auto_increment? Es que tampoco funciona en la consulta que ponga



1
2
$sql = "INSERT INTO ARBITROS values (id, nombre, apellido_1, apellido_2, fecha_nacimiento, telefono_1, telefono_2,email)
								VALUES (NULL, '$nombre','$ape1','$ape2,'$nacimiento','$movil1','$movil2','$mail')";

¿Que puede estar fallando ahora?
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
Imágen de perfil de Lawliet

Insercion datos PHP en MYSQL, no genera nada

Publicado por Lawliet (222 intervenciones) el 09/11/2015 21:56:44
El error es totalmente claro, tienes un error en tu sintaxis de MySQL, revisando el código me di cuenta que efectivamente tienes un error. Tienes la siguiente consulta.

1
$sql = "INSERT INTO ARBITROS values (id, nombre, apellido_1, apellido_2, fecha_nacimiento, telefono_1, telefono_2,email) VALUES (NULL, '$nombre','$ape1','$ape2,'$nacimiento','$movil1','$movil2','$mail')";

De entrada, tienes agregado la palabra values después del nombre de la tabla, lo cual es incorrecto ya que cuando nosotros especificamos las columnas a insertar solo las agregamos dentro del paréntesis, y en segundo, te falto cerrar la comilla simple correspondiente a $ape2. Por lo tanto, la consulta corregida sería la siguiente.

1
$sql = "INSERT INTO arbitros(id,nombre,apellido_1,apellido_2,fecha_nacimiento,telefono_1,telefono_2,email) VALUES (NULL,'$nombre','$ape1','$ape2','$nacimiento','$movil1','$movil2','$mail')";

Con la consulta anterior podrás ver lo que te mencionaba anteriormente.

Cualquier duda y/o inconveniente, aquí estamos.

Suerte!
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Juan Manuel (18 intervenciones) el 09/11/2015 22:33:12
Un MILLÓN de gracias a todos!!!! Lo resolví con vuestra ayuda!!!

Ahora a por la siguiente parte del proyecto, esto tiene pinta de no acabar nunca
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

Insercion datos PHP en MYSQL, no genera nada

Publicado por Clemente (1 intervención) el 21/11/2015 00:03:42
Este aporte me resultó bastante útil.

Gracias a todos!!!!!!!
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