Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: danny920825 en 28 Diciembre 2016, 20:35 pm



Título: [Resuelto] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 20:35 pm
Hola a todos. Hace unos días empecé a estudiar PHP y llegué a la parte de las BD. Logré implementar un pequeño formulario que recopila unos datos y los almacena en una BD llamada "trabajo" en una tabla "datos". Luego los llamo desde otra página y los muestro en una tabla donde tengo un boton de borrar. El botón puede borrar el campo sin problemas, pero lo que quiero es que antes de borrar los datos de la tabla "datos" los inserte en otra tabla llamada "eliminados" para que no se pierdan los datos, sino que dejen de estar en la tabla principal (No sé si me hago entender).
Estos son los datos del formulario

Código
  1. <!-- index.php-->
  2. <html>
  3. <head>
  4. <title>Registro de Ordenes de Trabajo</title>
  5. </head>
  6. <body>
  7. <center><H2>Registro de Ordenes de Trabajo</h2>
  8. <form action="bd.php" method="post" target="_blank">
  9. <table border='1'>
  10. <tr><td>No. de Orden</td><td><input type="text" name="orden"></td></tr>
  11. <tr><td>Nombre completo del trabajador</td><td><input type="text" name="trabajador"></td></tr>
  12. <tr><td>Departamento</td><td><select name="departamento"><option value="produccion">produccion<option value="tratamiento termico">tratamiento termico</option><option value="taladro">taladro</option><option value="metrologia">metrologia</option><option value="tecnologia">tecnologia</option><option value="cnc">cnc</td></tr>
  13. <tr><td>Fecha de Entrada (dd/mm/aaaa)</td><td align="center"><input type="text" size="2" name="diai"><input type="text" size="2" name="mesi"><input type="text" size="4" name="anioi"></td></tr>
  14. <tr><td>Fecha de Finalizacion (dd/mm/aaaa)</td><td align="center"><input type="text" size="2" name="diaf"><input type="text" size="2" name="mesf"><input type="text" size="4" name="aniof"></td></tr>
  15. <tr align="center"><td></td><td><input type="submit" value="enviar" name="enviar"><input type="reset" value="limpiar" name="limpiar"></td></tr>
  16.        </table>
  17. </form>
  18. </center>
  19. </body>
  20. </html>
  21.  

Esta es la página que procesa los datos y redirecciona hacia la página donde está la tabla

Código
  1. <?php
  2. //bd.php
  3.  
  4. //Primero comprobamos que la fecha esté correcta
  5. if (checkdate($_REQUEST['mesi'], $_REQUEST['diai'], $_REQUEST['anioi']) || checkdate($_REQUEST['mesf'], $_REQUEST['diaf'], $_REQUEST['aniof']))
  6. {
  7. $fechai=$_REQUEST['anioi']."-".$_REQUEST['mesi']."-".$_REQUEST['diai'];
  8. $fechaf=$_REQUEST['aniof']."-".$_REQUEST['mesf']."-".$_REQUEST['diaf'];
  9. //creamos la variable para la conexion y la variable para la tabla
  10. $conexion=mysqli_connect("localhost", "root", "") or die("Problemas de conexion");
  11. $tabla="datos";
  12. $bd="trabajo";
  13. $tabla2="elementos_eliminados";
  14. //seleccionamos la base de datos
  15. mysqli_select_db($conexion, $bd)or die ("Problemas en la seleccion de la BD");
  16.  
  17. //Añadir datos a la BD
  18. mysqli_query($conexion, "insert into $tabla (orden, trabajador, departamento, fechainicio, fechafinal) values ( '$_REQUEST[orden]', '$_REQUEST[trabajador]', '$_REQUEST[departamento]', '$fechai', '$fechaf')") or die ("Problemas al añadir elementos a la BD".mysqli_error());
  19. mysqli_close($conexion);
  20. header("location:listado_orden.php");
  21. }
  22. else
  23. {
  24. echo ("La fecha introducida es incorrecta");
  25. }
  26.  
  27. ?>
  28.  
Luego los datos se muestran en esta página:
Código
  1. <html>
  2. <head>
  3. <title>Listado de Ordenes de Trabajo</title>
  4. </head>
  5. <?php
  6. /*ahora el invento: que debajo aparezcan todos los campos en una tabla dinámica que crezca con cada registro que se haga en la BD*/
  7. $conexion=mysqli_connect("localhost", "root", "") or die("Problemas de conexion");
  8. $tabla="datos";
  9. $bd="trabajo";
  10. mysqli_select_db($conexion, $bd)or die ("Problemas en la seleccion de la BD");
  11. $registro=mysqli_query ($conexion, "select id, orden, trabajador, departamento, fechainicio, fechafinal from $tabla") or die ("Problemas en la seleccion".mysqli_error());
  12. echo ("<h2>Listado Actualizado</h2>");
  13. echo ("<table border='2'>");
  14. echo ("<tr><td align='center'>Orden</td><td align='center'>Trabajador</td><td align='center'>Departamento</td><td align='center'>Fecha Inicial</td><td align='center'>Fecha Final</td><td align='center'>Editar</td><td align='center'>Eliminar</td></tr>");
  15. while ($reg=mysqli_fetch_array($registro))
  16. {
  17. echo ("<tr><td align='center'>$reg[orden]</td><td align='center'>$reg[trabajador]</td><td align='center'>$reg[departamento]</td><td align='center'>$reg[fechainicio]</td><td align='center'>$reg[fechafinal]</td><td align='center'><a href='edit.php?id=$reg[id]'><img src='images/edit.png'></img></a></td><td align='center'><a href='borrar.php?id=$reg[id]'><img src='images/deny.png'</img></a></td></tr>");
  18. }
  19. echo ("</table>");
  20. mysqli_close($conexion);
  21.  
  22. ?>
  23. </body>
  24. </html>
  25.  
y como ven, hay un enlace para borrar el contenido asociado al id. Y aquí está el problema

Código
  1. <?php
  2. //borrar.php
  3. /*implementar un algoritmo que al presionar en el boton "borrar" elimine ese usuario de la bd*/
  4.  
  5. //conectar con la BD
  6. $conexion=mysqli_connect("localhost", "root", "") or die("Problemas de conexion");
  7. $tabla="datos";
  8. $bd="trabajo";
  9. $tabla2="eliminados";
  10. $ids=$_REQUEST['id'];
  11. $fechaeliminado=date("Y")."-".date("m")."-".date("d");
  12.  
  13. //seleccion de datos
  14. mysqli_select_db($conexion, $bd) or die("Problemas en la seleccion de la BD");
  15.  
  16. //crear registros
  17. $registro=mysqli_query($conexion, "select * from $tabla where id=$ids") or die ("Problemas al seleccionar desde la BD".mysqli_error());
  18.  
  19. echo ("<h2>Listado Actualizado</h2>");
  20. echo ("<table border='2'>");
  21. echo ("<tr><td align='center'>id</td><td align='center'>Orden</td><td align='center'>Trabajador</td><td align='center'>Departamento</td><td align='center'>Fecha Inicial</td><td align='center'>Fecha Final</td><td align='center'>Fecha Eliminado</td></tr>");
  22. if ($reg=mysqli_fetch_array($registro))
  23. {
  24. //Insertamos los datos que se van a borrar en la otra tabla llamada "eliminados"
  25. mysqli_query($conexion, "insert into $tabla2 (id, orden, trabajador, departamento, fechainicio, fechafinal) values ( $reg[id], $reg[orden], $reg[trabajador], $reg[departamento], $reg[fechainicio], $reg[fechafinal], $fechaeliminado") or die ("Problemas al anadir elementos a la BD '$tabla2'<br>".mysqli_error());
  26. //Eliminar datos de la tabla
  27. mysqli_query($conexion, "delete from $tabla where id='$_REQUEST[id]'") or die ("Problemas al borrar".mysqli_error());
  28. //Cerramos la conexion a la BD
  29. mysqli_close($conexion);
  30. //Redireccionamos a la pagina anterior para ver los datos
  31. header("location:listado_orden.php");
  32.  
  33. ?>
  34.  

Y cuando ejecuto la consulta me arroja el siguiente error:
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\Trabajo\borrar.php on line 29

Por favor ayudenme. Estoy aprendiendo y si no puedo pasar de aqui no quiero entrar en otros temas más complicados


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 20:39 pm
Citar
Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\Trabajo\borrar.php on line 29

traduzco:

Warning: mysqli_error() esperaba exactamente 1 parametro, 0 dados


aquí la pagina oficial... por si más dudas... lee eso antes de repsonder cualquier cosa a este tema

http://php.net/mysqli_error (http://php.net/mysqli_error)


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 21:23 pm
Gracias por el consejo, decidí hacer esto
Código
  1. mysqli_error($link);
  2.  
en el or die y me arroja el siguiente texto:

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 'Paula, produccion, 2016-12-25, 2016-12-27, 2016-12-28' at line 1

Puede ser debido a que el campo trabajador tiene mas de una palabra? O sea, no separé el trabajador por nombre, apellido sino que en el campo trabajador el formato es "nombre apellido"?


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 21:32 pm
Citar
Ya revisé la documentación y nada

claramente no estás leyendo ni lo que escribí ni la documentación...

solo te repetiré todo pero en imagenes para centrarte en que leer

el error

(http://i.imgur.com/OF5Jtm6.png)

(http://i.imgur.com/racQKCT.png)

tu codigo

(http://i.imgur.com/vCKM0Bg.png)

(http://i.imgur.com/cfjnzat.png)

la documentación

(http://i.imgur.com/3xTiuHK.png)


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 21:44 pm
Parece que coincidimos al escribir. Mientras me escribías que me fijara bien y lo hacías muy didáctico, yo modificaba el comentario donde decía que si a la función
Código
le paso como parámetro la conexion quedando así
Código
  1. mysqli_error($conexion);
entonces el texto cambia a
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 '' at line 1

Donde la traduccion india de Google dice:
Usted tiene un error en su sintaxis de SQL; Compruebe el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de '' en la línea 1

Puede ser alguna " que esté mal puesta? Me siento frustrado y solo llevo 1 semana.


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 21:47 pm
ese es un error de alguna sentencia sql... revisa cual sentencia da ese error


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 21:54 pm
la sentencia es la siguiente:
Código
  1. mysqli_query($conexion, "insert into $tabla2 (id, orden, trabajador, departamento, fechainicio, fechafinal, fechaeliminado) values ( '$reg[id]', '$reg[orden]', '$reg[trabajador]', '$reg[departamento]', '$reg[fechainicio]', '$reg[fechafinal]', '$fechaeliminado'") or die ("Problemas al anadir elementos a la BD '$tabla2'<br>".mysqli_error($conexion));
  2.  

pero si hago esto antes de poner la sentencia:

Código
  1. echo ("$reg[id], $reg[orden], $reg[trabajador], $reg[departamento], $reg[fechainicio], $reg[fechafinal], $fechaeliminado");
  2.  

Entonces en el navegador se obtiene esto:
1, 123, Danny Paula, produccion, 2016-12-25, 2016-12-27, 2016-12-28
Problemas al anadir elementos a la BD 'eliminados'
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 '' at line 1


O sea que los datos están siendo recibidos por la página pero no los añade a la tabla  :-\ :-\


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 21:56 pm
no,has echo de la sentencia completa... incluyendo el insert y todo... luego agarras el phpmyadmin y la ejecutas directo sobre la tabla a ver si el problema es como la escribiste o los datos


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 22:01 pm
Dices algo asi:
Código
  1. echo ("insert into $tabla2 (id, orden, trabajador, departamento, fechainicio, fechafinal, fechaeliminado) values ( '$reg[id]', '$reg[orden]', '$reg[trabajador]', '$reg[departamento]', '$reg[fechainicio]', '$reg[fechafinal]', '$fechaeliminado'<br>");
  2.  

Pues esto es lo que se obtiene:

insert into eliminados (id, orden, trabajador, departamento, fechainicio, fechafinal, fechaeliminado) values ( '1', '123', 'Danny Paula', 'produccion', '2016-12-25', '2016-12-27', '2016-12-28'
Problemas al anadir elementos a la BD 'eliminados'
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 '' at line 1


Ves algo que esté mal o algo así??  :-\


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 22:05 pm
id es de tipo texto ? porque los tipo texto son los que llevan comillas, no lo hacen los tipos numericos... por otro lado... estás ignorando todos los errores


donde está el parentesis de cierre?


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 22:16 pm
Código
  1. # Nombre Tipo Cotejamiento Atributos Nulo Predeterminado Extra Accion
  2. 1 id INT(11) No       Ninguna                                Cambiar Cambiar Eliminar Eliminar

Así se ve mi campo "id" en el phpMyAdmyn.

Y con respecto a lo de las comillas... Mis más sinceras y frustradas disculpas. Si hago esto:
 
Código
  1. echo ("insert into $tabla2 (id, orden, trabajador, departamento, fechainicio, fechafinal, fechaeliminado) values ( '$reg[id]', '$reg[orden]', '$reg[trabajador]', '$reg[departamento]', '$reg[fechainicio]', '$reg[fechafinal]', '$fechaeliminado')<br>");
  2.  
respetando los () en cada caso, obtengo el siguiente resultado
insert into eliminados (id, orden, trabajador, departamento, fechainicio, fechafinal, fechaeliminado) values ( '1', '123', 'Danny Paula', 'produccion', '2016-12-25', '2016-12-27', '2016-12-28')
Problemas al anadir elementos a la BD 'eliminados'
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 '' at line 1


que es el mismo de la vez anterior


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 22:19 pm
con phpmyadmin puedes ingresar un valor a una tabla... has eso, el te mostrará la sentencia sql que usó y comparala con la tuya a ver que tienes mal... me suena que son comillas, pero no estoy seguro...


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 22:27 pm
Ya lo hice y cuando le di "Crear Código PHP" sale esto

Código
  1. $sql = "INSERT INTO `trabajo`.`eliminados` (`id`, `orden`, `trabajador`, `departamento`, `fechainicio`, `fechafinal`, `fechaeliminado`) VALUES (\'1\', \'123\', \'Danny Paula\', \'produccion\', \'2016-12-25\', \'2016-12-27\', \'2016-12-28\');";

Lo pongo así mismo aunque creo que hay algún error en las comillas del phpMyAdmin. Igual veo que el phpMyAdmin pone
Código
  1. $sql = "insert into (BD).(TABLA)"
pero yo tengo el código dividido por secciones. O sea, yo tengo creo la conexion, selecciono la BD y despues hago la consulta...


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 23:32 pm
Un paso de avance. Cuando dijiste hace un rato que era problemas de comillas lo que hice fue que quite las ' ' de la expresion $reg[variable]:
Código
  1. mysqli_query($conexion, "insert into $tabla2 (id, orden, trabajador, departamento, fechainicio, fechafinal, fechaeliminado) values ( '$reg[id]', '$reg[orden]', \"$reg[trabajador]\", $reg[departamento], $reg[fechainicio], $reg[fechafinal], $fechaeliminado") or die ("Problemas al anadir elementos a la BD '$tabla2'<br>".mysqli_error($conexion));
como ves está sin terminar, pues el error lo da en el trabajador. Cuando llegue a la casa voy a probar creando las tablas de nuevo y separando el nombre de los apellidos en campos diferentes. Pues parece que ahi está el error, pero no puedo lograr que funcione así. A pesar que en la tabla anterior si guardé los datos con espacios en la BD.


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 23:37 pm
tarabajador me imagino que es un tipo de texto... debes pasarlo con comillas si es asi


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 28 Diciembre 2016, 23:48 pm
ya pase los 2 datos que son de tipo text con comillas usando
Código
  1. \"$reg[trabajador]\", \"$reg[departamento]\"
pero sigue dando el mismo error. Algo más para probar? Ya intenté poner las "" dentro de los [] con el \ y nada. Tambien probé usando dentro del [] \' pero tampoco


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: engel lex en 28 Diciembre 2016, 23:55 pm
no... comillas simples siempre... olvidate del \  has tu texto abriendo y cerrando con comillas dobles y usa comillas simples donde deban ir comillas


Título: Re: [Ayuda] Consulta mysqli_query no funciona
Publicado por: danny920825 en 4 Enero 2017, 16:54 pm
Antes que todo Felicidades por año nuevo. Gracias a engel lex por brindarme su ayuda cuando podría estar preparando las cosas de fin de año. Al final me senté en mi casa con calma esa noche y lo hice. Lo que tenia mal era que me faltaba un ) en la sentencia. Lo puse y listo. Así que pueden cerrar el tema. Nos vemos en la próxima entrada. Que PHP es interesante y las ayudas son validas