[Resuelto] Consulta mysqli_query no funciona

Iniciado por danny920825, 28 Diciembre 2016, 20:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

danny920825

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 (php) [Seleccionar]

<!-- index.php-->
<html>
<head>
<title>Registro de Ordenes de Trabajo</title>
</head>
<body>
<center><H2>Registro de Ordenes de Trabajo</h2>
<form action="bd.php" method="post" target="_blank">
<table border='1'>
<tr><td>No. de Orden</td><td><input type="text" name="orden"></td></tr>
<tr><td>Nombre completo del trabajador</td><td><input type="text" name="trabajador"></td></tr>
<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>
<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>
<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>
<tr align="center"><td></td><td><input type="submit" value="enviar" name="enviar"><input type="reset" value="limpiar" name="limpiar"></td></tr>
       </table>
</form>
</center>
</body>
</html>


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

Código (php) [Seleccionar]

<?php
//bd.php

//Primero comprobamos que la fecha esté correcta
if (checkdate($_REQUEST['mesi'], $_REQUEST['diai'], $_REQUEST['anioi']) || checkdate($_REQUEST['mesf'], $_REQUEST['diaf'], $_REQUEST['aniof']))
{
$fechai=$_REQUEST['anioi']."-".$_REQUEST['mesi']."-".$_REQUEST['diai'];
$fechaf=$_REQUEST['aniof']."-".$_REQUEST['mesf']."-".$_REQUEST['diaf'];
//creamos la variable para la conexion y la variable para la tabla
$conexion=mysqli_connect("localhost""root""") or die("Problemas de conexion");
$tabla="datos";
$bd="trabajo";
$tabla2="elementos_eliminados";
//seleccionamos la base de datos
mysqli_select_db($conexion$bd)or die ("Problemas en la seleccion de la BD"); 

//Añadir datos a la BD
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());
mysqli_close($conexion);
header("location:listado_orden.php");
}
else
{
echo ("La fecha introducida es incorrecta");
}

?>


Luego los datos se muestran en esta página:
Código (php) [Seleccionar]

<html>
<head>
<title>Listado de Ordenes de Trabajo</title>
</head>
<?php 
/*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*/
$conexion=mysqli_connect("localhost""root""") or die("Problemas de conexion");
$tabla="datos";
$bd="trabajo";
mysqli_select_db($conexion$bd)or die ("Problemas en la seleccion de la BD"); 
$registro=mysqli_query ($conexion"select id, orden, trabajador, departamento, fechainicio, fechafinal from $tabla") or die ("Problemas en la seleccion".mysqli_error());
echo ("<h2>Listado Actualizado</h2>");
echo ("<table border='2'>");
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>");
while ($reg=mysqli_fetch_array($registro))
{
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>");
}
echo ("</table>");
mysqli_close($conexion);

?>

</body>
</html>

y como ven, hay un enlace para borrar el contenido asociado al id. Y aquí está el problema

Código (php) [Seleccionar]

<?php 
//borrar.php
/*implementar un algoritmo que al presionar en el boton "borrar" elimine ese usuario de la bd*/

//conectar con la BD
$conexion=mysqli_connect("localhost""root""") or die("Problemas de conexion");
$tabla="datos";
$bd="trabajo";
$tabla2="eliminados";
$ids=$_REQUEST['id'];
$fechaeliminado=date("Y")."-".date("m")."-".date("d");

//seleccion de datos
mysqli_select_db($conexion$bd) or die("Problemas en la seleccion de la BD");

//crear registros
$registro=mysqli_query($conexion"select * from $tabla where id=$ids") or die ("Problemas al seleccionar desde la BD".mysqli_error());

echo ("<h2>Listado Actualizado</h2>");
echo ("<table border='2'>");
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>");
if ($reg=mysqli_fetch_array($registro))
{
//Insertamos los datos que se van a borrar en la otra tabla llamada "eliminados"
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());
//Eliminar datos de la tabla
mysqli_query($conexion"delete from $tabla where id='$_REQUEST[id]'") or die ("Problemas al borrar".mysqli_error());
//Cerramos la conexion a la BD
mysqli_close($conexion);
//Redireccionamos a la pagina anterior para ver los datos
header("location:listado_orden.php");

?>



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
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

#1
CitarWarning: 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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

#2
Gracias por el consejo, decidí hacer esto
Código (php) [Seleccionar]

mysqli_error($link);

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"?
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

CitarYa 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






tu codigo






la documentación

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

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 (php) [Seleccionar]
mysqli_error()
le paso como parámetro la conexion quedando así
Código (php) [Seleccionar]
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.
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

ese es un error de alguna sentencia sql... revisa cual sentencia da ese error
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

la sentencia es la siguiente:
Código (php) [Seleccionar]

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));


pero si hago esto antes de poner la sentencia:

Código (php) [Seleccionar]

echo ("$reg[id], $reg[orden], $reg[trabajador], $reg[departamento], $reg[fechainicio], $reg[fechafinal], $fechaeliminado");


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  :-\ :-\
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

danny920825

Dices algo asi:
Código (php) [Seleccionar]

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>");


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í??  :-\
"Los que reniegan de Dios es por desesperación de no encontrarlo".
   Miguel de Unamuno

engel lex

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?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.