Foros del Web » Programando para Internet » PHP »

Error que no entiendo

Estas en el tema de Error que no entiendo en el foro de PHP en Foros del Web. Hola: Esta sentencia: $SQLborrar = "DELETE FROM mensajes WHERE msgid IN(".implode(',', $_POST['mens']).")"; mysql_query($SQLborrar); me da un error genérico "bad argument....etc, es decir que la sentencia ...
  #1 (permalink)  
Antiguo 11/10/2004, 22:15
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Error que no entiendo

Hola:

Esta sentencia:

$SQLborrar = "DELETE FROM mensajes WHERE msgid IN(".implode(',', $_POST['mens']).")";
mysql_query($SQLborrar);

me da un error genérico "bad argument....etc, es decir que la sentencia parece mal escrita.

La he revisado mil veces y .... nada...

¿Alguien sabe qué está mal?

Forma parte de un scrit de mensajería interna que está my bien, pero me falla esto. El script de mensajería está en: http://www.forosdelweb.com/showthrea...7&page=1&pp=15

Gracias por vuestra ayuda.

Última edición por javifo; 11/10/2004 a las 22:17
  #2 (permalink)  
Antiguo 11/10/2004, 22:29
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Ese implode() creo que no puedes ejecutarlo dentro de una sentencia SQL hasta donde yo se. En una sentencia SQL solo se pueden usar funciones de SQL.... a no ser de que implode() también sea una función de SQL.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #3 (permalink)  
Antiguo 11/10/2004, 22:54
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
el implode no esta dentro de la consulta SQL, mas bien genera contenido para la consulta. Para estar mas cerca de conocer el error debes indicarnos que contiene la variable a la que aplicas el implode. Asi mismo usa: mysql_query() or die(mysql_error()) y muestranos el error de sql

un saludo
  #4 (permalink)  
Antiguo 12/10/2004, 10:53
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Ahh ok entiendo. No sabía... no estaba seguro.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #5 (permalink)  
Antiguo 12/10/2004, 11:46
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Haz un echo $SQLborrar, para ver exactamente que consulta estas intentando ejecutar. Y un var_dump($_POST['mens']) para ver el contenido de ese array.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 12/10/2004, 12:38
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Gracias por vuestros comentarios. Antes de preguntar más he intentado arreglarlo.Por eso he tardado en responderos. Pero no me salgo.

Me da este error:
Warning: implode(): Bad arguments. in c:\archivos de programa\apache group\apache\htdocs\esla\mensajes\leer_privados.ph p on line 7

Os pongo el código completo, para ver si encontráis algo.

He mirado el contenido de mens. Da null en realidad no esta en la BD. Pero su valor es
&aydi que es la columna con la clave primaria d la BD y da un valor de 81, o sea que vacío no está. No sé aqui pongo el código a ver si véis algo.

Gracias


<?
session_start();
include("includes/header.php");
include("configuracion.php"); //conexion a la BD MYSQL
if($accion == "borrar"){
include("configuracion.php");
$SQLborrar = "DELETE FROM mensajes WHERE msgid IN(".implode(',', $_POST['mens']).")";
mysql_query($SQLborrar);
echo "<font face=Tahoma size=2><b>Mensaje Borrado</b>";

} else {

$sql= mysql_query("SELECT * FROM mensajes WHERE para = '$usuario' ORDER by msgid DESC"); //aki esta la var del sistema de JLMM

while ($row = mysql_fetch_array($sql) ){

$asunte = $row[asunto];
$resto = substr("$asunte", 0, 40);
$aydi = $row[msgid];

echo
"<table border=\"0\" width=\"650\" align=\"center\" cellpadding=\"3\" cellspacing=\"0\">
<tr>
<td>
&nbsp;
</td>
</tr>
<tr>
<td bgcolor=#EAEAF4 width=10><input type=checkbox name=\"mens[]\" value=$aydi></td>
<td bgcolor=#EAEAF4 width=150<center><b>DE:</b> ".$row["de"]."</center></td>
<td bgcolor=#EAEAF4 width=240><FONT COLOR=\"#004080\"><b>ASUNTO:</b></FONT> <a href=leer_privados2.php?id=".$row[msgid]."><FONT COLOR=\"#004080\"><u>$resto..</u></a></FONT> </td>
<td bgcolor=#EAEAF4 width=150>".$row["fecha"]."</td></tr></TD></TR> ";
}
echo "</table><br><table width=340 align=center cellspacing=2 cellpadding=2>
<tr><td>
<form>
<input type=radio name=accion value=borrar>
<font face=Tahoma size=1>Borrar</font>
<input type=\"submit\" value=\"Enviar\">
</td>
<td><input type=radio name=accion value=responder>
<font face=Tahoma size=1> Responder</font>
</td>
<td><a href=enviar_privados.php>
<font face=Tahoma size=1 color=\"black\"> <u>Enviar Mensaje</u></font></td>
<td><input type=\"submit\" value=\"Enviar\"></td>
</table></form>";

}
include("includes/pie.php");
?>

Última edición por javifo; 12/10/2004 a las 12:40
  #7 (permalink)  
Antiguo 12/10/2004, 13:01
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Cita:
Warning: implode(): Bad arguments. in c:\archivos de programa\apache group\apache\htdocs\esla\mensajes\leer_privados.ph p on line 7
El error es que los parametros que le pasas son incorrectos. El primero esta bien, que es una cadena que hace de "cola" para unir los elementos. Pero el segundo debe ser un array. Y tu estas diciendo que
Cita:
He mirado el contenido de mens. Da null
Si es null, no es un array, y por eso te dice que le estas pasando un parametro erroneo a implode(). Si no has seleccionado ningun check no se crea el array, asi que antes de hacer la consulta de borrar, debes comprobar si $_POST['mens'] es un array con is_array() (www.php.net/is_array).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 12/10/2004, 14:09
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Gracias

Hola.

No es un array.

Ahora sí que no sé que hacer. Podría cambiar el sistema ( en realidad ayer ya trabajé en otros scripts para borrar), pero este me gustaba.

Crees que hay solución?

Gracias sinceramente
  #9 (permalink)  
Antiguo 12/10/2004, 14:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Parece que un checkbox .. si lleva sólo un valor marcado o ninguno no arroja un array .. En tal caso podrías ver con la función que propone josemi (is_array()) si estás en esa situación para hacer algo tipo:

Código PHP:
if (is_array($_POST['mens'])){
// el SQL con el IN(.. implode() ...) que usas
} elseif (!empty($_POST['mens'])){
   
// SQL para sólo ese caso:
   
$sql="DELETE FROM mensajes WHERE msgid = '".$_POST['mens']."'";   
} else {
    echo 
"error .. no se ha seleccionado nada ..";
}

mysql_query($sql); 
De todas formas . .comprueba estos casos . .cuando marcas una opción sólo, no seleccionas ninguna . o seleccionas +1.

Un saludo,
  #10 (permalink)  
Antiguo 13/10/2004, 01:20
 
Fecha de Ingreso: mayo-2004
Mensajes: 393
Antigüedad: 13 años, 7 meses
Puntos: 0
Hola:

Gracias por vuestra ayuda.

Ya he probado todo y no funciona.

El problema es que no selecciona nada y además no es un array o viceversa). Ni marcando una, dos, tres....o N casillas.

No sé, pero seguiré intentándolo. De hecho, la mensajería interna que he visto por ahí funciona de esta manera (se puede borrar marcando un checkbox). Además el script, que he sacado de estos foros, parece que a otros les funciona.

Así que el error sólo puede ser mío.

Quizá la BD o alguna sentencia mal escrita.

En fin, veré cómo lo arreglo. Y si no, haré un sistema más elemental.

Gracias a todos.
  #11 (permalink)  
Antiguo 13/10/2004, 02:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Bueno, acabo de ver esto:

<form>
<input type=radio name=accion value=borrar>
<font face=Tahoma size=1>Borrar</font>
<input type=\"submit\" value=\"Enviar\">

Si abres ahi el form, los checkbox no estan dentro del form y por eso no forman parte del formulario y no se envian. Los controles del formulario tienen que estar dentro de las etiquetas form.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:54.