Foros del Web » Programando para Internet » PHP »

Funcion $lista=implode(',',$_POST['seleccion']);

Estas en el tema de Funcion $lista=implode(',',$_POST['seleccion']); en el foro de PHP en Foros del Web. Gente, Hace un tiempo me dieron la utilidad que más abajo detallo, que funciona para eliminar varios registros de una base de datos al mismo ...
  #1 (permalink)  
Antiguo 10/07/2004, 17:06
gcs
 
Fecha de Ingreso: enero-2004
Ubicación: Heredia, Costa Rica
Mensajes: 191
Antigüedad: 20 años, 3 meses
Puntos: 0
Funcion $lista=implode(',',$_POST['seleccion']);

Gente,

Hace un tiempo me dieron la utilidad que más abajo detallo, que funciona para eliminar varios registros de una base de datos al mismo tiempo mediante un checkbox de un form.

Código PHP:
<?php require_once('../Connections/Videos.php'); ?>
<?php
mysql_select_db
($database_Videos$Videos);
// Generamos una lista de los ID's (campo value= ..) que tenemos en nuestro array.
$lista=implode(',',$_POST['seleccion']);

// Y lo aplicamos al SQL correspondiente y ejecutamos la consulta.
mysql_query("DELETE FROM estrenos WHERE codigo IN(".$lista.")");
header ("Location: newfilms.php");
?>
Sin embargo, actualmente quiero aplicarlo a una base de datos de peliculas cuyo uso como identificador el código de las peliculas que son alfanuméricas y siendo así no me funciona la anterior funcion, es decir con el código V0001 el modulo no me borra de la base de datos dicha pelicula pero si le cambio el código a 1 si me lo borra....

Alguna IDEA ???
  #2 (permalink)  
Antiguo 10/07/2004, 17:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo lo solventaría simplemente usando un bucle ..

Código PHP:
foreach($_POST['seleccion'] as $codigo){
  
mysql_query("DELETE FROM estrenos WHERE codigo='".$codigo."'"); 

Es más optimo mandar por SQL una "lista" y aplicar un IN de Mysql .. Pero, el problema que tienes con "$lista" es que tus códigos son strings y requiere comillas para que quede algo tipo:

'V001','V003','X87asdf'

Y tu implode() a secas genera:

V001,V003,X87asdf

Probando .. probando (como dicen en un concierto de música xDD):

Código PHP:
$lista="'".implode("','",$_POST['seleccion'])."'"
hazle un echo a $lista y observa que genera .. si obtienes lo que necesitas (esos códigos entre comillas) .. podrías seguir aplicando tu "IN" como lo haces actualmente y sería más óptimo el código y su ejecución.

Un saludo,
  #3 (permalink)  
Antiguo 10/07/2004, 17:52
gcs
 
Fecha de Ingreso: enero-2004
Ubicación: Heredia, Costa Rica
Mensajes: 191
Antigüedad: 20 años, 3 meses
Puntos: 0
Cluster,

Muchas gracias, si acanbo de probar haciendole un hecho y tenes toda la razón me tira la cadena de codigos de pelicula pero sin las comillas, y te pregunto utilizando el IN hay forma con el codigo que postie arriba de utilizarlo, o por el contrario es mejor hacer lo que me diste ???


Saludos,


Gabriel Cambronero
  #4 (permalink)  
Antiguo 10/07/2004, 17:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te dejé dos alternativas ..

La primera usando el bucle foreach() sería una sólución .. y la última que añade las comillas que son necesarias usando el mismo implode() (pero fijate en el caracter usado como separador).

Pruebalas y nos comentas (sobre todo la segunda opción).

Un saludo,
  #5 (permalink)  
Antiguo 10/07/2004, 18:02
gcs
 
Fecha de Ingreso: enero-2004
Ubicación: Heredia, Costa Rica
Mensajes: 191
Antigüedad: 20 años, 3 meses
Puntos: 0
Cita:
Iniciado por Cluster
Te dejé dos alternativas ..

La primera usando el bucle foreach() sería una sólución .. y la última que añade las comillas que son necesarias usando el mismo implode() (pero fijate en el caracter usado como separador).

Pruebalas y nos comentas (sobre todo la segunda opción).

Un saludo,

ok, la primera que me diste me funciona a la perfección.... la segunda me trabajo PERFECTAMENTE tambien, pero a todo esto, segun entendí es mejor esta segunda opción para hacerlo cierto ????

Última edición por gcs; 10/07/2004 a las 18:05
  #6 (permalink)  
Antiguo 10/07/2004, 18:14
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 5 meses
Puntos: 1
desde mi punto de vista es mejor utilizar un foreach. imaginate si son 100 registros la consulta se vuelve mas grande con la segunda opción. sin embargo con el foreach haces 100 consultas pequeñas.

un saludo
  #7 (permalink)  
Antiguo 12/07/2004, 14:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
sism82 ..

Una ejecución de mysql_query() suele implicar várias cosas "de fondo" .. entre otras cosas verificar la conexión en curso (a la BD) y tener encuenta que ahí estás interactuando PHP+Mysql ...

Sin embargo .. todo lo que hagas desde SQL . .el trabajo es 100% del motor de BD que usas.

No me he puesto a realizar "test" de tiempos de ejecución .. pero en teoría debería ser algo menor (tal vez insignificante con pocos valores) la opción "SQL" que la del bucle PHP ...

Un saludo,
  #8 (permalink)  
Antiguo 12/07/2004, 15:02
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 5 meses
Puntos: 1
si, reconsiderandolo, tal vez tengas razon. Supong que cada consulta debe llevar algo asi como un "payload", y mientras mas consultas se hagan se incrementa, oa diferencia de hacer una sola de mayor extension.

saludos
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 10:27.