Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-12-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Procesar un delete marcando con check cada columna

Holas:

Tengo una tabla Html con ciertos campos, mi idea es que al momento de checkear cada columna pueda eliminar todos los registros seleccionados y no tengo la menor idea de como hacerlo.

Adjunto una imagen para que tengan una idea.....desde ya muchas gracias..

Hasta Luego -
Archivos Adjuntos
Tipo de Archivo: zip Mant.zip (9,1 KB, 30 visitas)
__________________
No todo es como parece ser...
Responder Con Cita
  #2  
Antiguo 19-12-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
pues no queda de otra mas que revisar cual esta "checkado" y le vas agregando a la instruccion sql un "or" y el elemento, algo asi como:

Código SQL [-]
Delete from tabla
Where (tabla.codigo = 3) or (tabla.codigo=15) or (tabla.codigo=396)
Responder Con Cita
  #3  
Antiguo 19-12-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Gracias por responder, lo veo complicado ya que Html y Php no van conmigo, pero ahí estoy intentandolo, existirá alguna página con código similares para poder llevar a la práctica, porque así como lo veo, no se me cruje

Nos vemos
__________________
No todo es como parece ser...
Responder Con Cita
  #4  
Antiguo 19-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo primero es saber cómo hacer el formulario html. La columna en cuestión estará formada por campos de tipo checkbox, a los cuales conviene darles nombres de tipo arreglo:

Código:
<tr>
  <td><input type='checkbox' name='borrar[163]'></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[164]'></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[1]'></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[2]'></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[3]'></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[4]'></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[26]'></td> ...
</tr>
El 'índice' del arreglo correspondería al código que, supongo, identifica de manera única a la fila (me imagino que es la llave primaria de una tabla).

En HTML, un checkbox sólo se manda si está marcado. Es decir, no es que se mande true o false dependiendo de si está marcado o no, se manda (por defecto) 'on' en caso de que esté marcado y no se manda nada en caso de que no esté marcado.

Cuando nombras los checkbox como te indico, PHP los recibe también en un arreglo, pero, por lo dicho antes, sólo recibirá aquellos elementos que estén marcados. Así, suponiendo que el usuario marca el 164, el 2 y el 3, PHP recibirá

Código:
$borrar[163] = 'on'
$borrar[1] = 'on'
$borrar[2] = 'on'
y nada más.

Bueno, miento un poco. El arreglo $borrar no lo recibe drectamente sino que debes recuperarlo de la variable $_POST:

Código PHP:
$borrar $_POST['borrar']; 
Entonces, para saber cuáles elementos se marcaron para borrar, basta saber cuales índices vienen en el arreglo. Lo más sencillo será procesarlos con algo como:

Código PHP:
foreach (array_keys($_POST['borrar']) as $codigo)
{
  ...

array_keys toma nada más los índices, y el foreach .. as hace un ciclo que te da, en cada vuelta, el índice en turno en la variable $codigo. Con ello puedes aprovechar para construir la consulta DELETE tal como te han indicado antes.

Ahora, en este caso, y aprovechando las magníficas funciones con que cuenta PHP para el manejo de arreglos, podemos incluso ahorrarnos el ciclo.

La función implode, convierte un arreglo en una cadena de caracteres formada por todos sus elementos separados por el "pegamento" que indiquemos. Así,

Código PHP:
implode(','array_keys($_POST)) 
devolverá una lista separada por comas de los códigos de las filas que se marcaron para borrar. Pero eso es justo lo que necesitas para el DELETE:

Código PHP:
$codigos implode(','array_keys($_POST));
$sql "DELETE FROM tabla where codigo in ($codigos)"
Lo que faltaría aquí es la construcción del formulario, porque es de suponerse que justamente lo obtienes de una consulta y debes escribirlo por código php dinámicamente, pero eso ya te queda de tarea

//Saludos

Última edición por roman fecha: 19-12-2006 a las 07:01:00.
Responder Con Cita
  #5  
Antiguo 19-12-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola roman:

Justo lo que necesitaba, saber capturar todos esos valores, ni la menor idea que el formulario enviaba los elementos checkeados en un arreglo para luego capturarlos en un arreglo tipo $_POST, con lo que ya me entregaste tengo pega hoy, después comento como me fué....

Gracias....
__________________
No todo es como parece ser...
Responder Con Cita
  #6  
Antiguo 19-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A ver, el $_POST no es exclusivo de los arreglos. Hay, básicamente, dos formas de enviar un formulario: por método POST o por método GET, lo cual se especifica en:

Código:
<form method='POST' action='...'>
o

Código:
<form method='GET' action='...'>
En el primer caso, todos los valores que mandes con el formulario llegarán a PHP en el arreglo global $_POST. Así, si tienes, por ejemplo, el formulario:

Código:
<form method='POST' action='...'>
Nombre <input type='text' name='nombre'>
EMail<input type='text' name='email'>
<textarea name='comentario'></textarea>
<input type='submit'>
</form>
El script PHP recibirá las variables en $_POST['nombre'], $_POST['email'], $_POST['comentario'], es decir, un elemento del arreglo por cada variable. En particular, si el nombre de una variable incluye corchetes, PHP interpretará que es parte de un arreglo, como en el caso de los checkbox ejemplificados antes. Igualmente puedes tener arreglos de otros tipos de campos.

Te recomiendo que antes que nada, experimentes con los distintos tipos de campo para que veas como llegan a PHP. Por ejemplo, procesa el formulario con un script:

Código PHP:
<pre>
<?
print_r
($_POST);
?>
</pre>
que te imprimirá todos los valores del arreglo $_POST.

// Saludos
Responder Con Cita
  #7  
Antiguo 19-12-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Gracias por la aclaración, tengo un solo problema con el código en html,

así lo tengo yo..

Código:
<input name="borrar[{$fila.COD_PERFIL}]" type="checkbox" id="check" value="">
Estoy usando plantillas smarty por eso que llevan {}, sin embargo el arreglo me está llegando vacio al script php, sin embargo si lo escribo de esta manera

Código:
<input name="borrar" type="checkbox" id="check" value="borrar[{$fila.COD_PERFIL}]">
Es decir si cambio la asignación a la etiqueta value me resulta, pero no como arreglo sino como dato independiente....¿en qué estaré fallando?

Gracias.....
__________________
No todo es como parece ser...
Responder Con Cita
  #8  
Antiguo 19-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo que pasa es que en el primer caso, estás explícitamente diciendo que el valor sea una cadena vacía:

Código:
<input name="borrar[{$fila.COD_PERFIL}]" type="checkbox" id="check" value="">
De manera que sí llega el campo pero vacío. Simplemente omite el atributo value:

Código:
<input name="borrar[{$fila.COD_PERFIL}]" type="checkbox" id="check">
o ponle un valor cualquiera pero que no sea vacío.

// Saludos
Responder Con Cita
  #9  
Antiguo 19-12-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Muchisimas gracias roman, resulta de maravilla...

a modo de aprendizaje no entiendo el porque de la etiqueta value, debería ser esta la que lleva los valores, ¿o me equivoco ?

Gracias.......
__________________
No todo es como parece ser...
Responder Con Cita
  #10  
Antiguo 19-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es que sí lleva un valor: on. Es el valor por defecto en caso de no especificar ninguno. Pero bien puedes poner:

Código:
<input type='checkbox' name='aprobado' value='si'>
y el valor será si. Lo que sucede es que a fin de cuentas, es indistinto, porque un checkbox sólo tiene dos posibles valores: marcado o no marcado, más allá de la semántica de un problema en particular. En el caso de HTML, supongo que por ahorro al momento de enviar los datos, las casillas marcadas, simplemente no se mandan, de manera que todo se reduce a si el valor está presente (casilla marcada) o no (casilla desmarcada), siendo indiferente el valor real que tome.

// Saludos
Responder Con Cita
  #11  
Antiguo 20-12-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Gracias roman, ahora empiezo a entender mejor este cuento...

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #12  
Antiguo 20-12-2006
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 21
kayetano Va por buen camino
Hola

Una variante a la que comenta roman es la siguiente:
Código:
<tr>
  <td><input type='checkbox' name='borrar[]' value='163'></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[]' value=164></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[]' value=1></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[]' value=2></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[]' value=3></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[]' value=4></td> ...
</tr>
<tr>
  <td><input type='checkbox' name='borrar[]' value=26></td> ...
</tr>
y con el codigo php:
Código PHP:
<?
...
$sql "DELETE FROM tabla where codigo in (".join(','_POST['borrar']).")";  
...
?>
La única diferencia es que trabajamos con los valores del array y no con los indices, a mi me gusta más hacerlo asin.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente

Última edición por kayetano fecha: 20-12-2006 a las 17:51:23.
Responder Con Cita
  #13  
Antiguo 20-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Creo que no soy yo sino Román el que comenta esta vez Kayetano, pero, que sepas que esta forma de hacerlo tuya me la voy a apuntar.

Así que gracias, digo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #14  
Antiguo 20-12-2006
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 21
kayetano Va por buen camino
Hola

ups!! que lapsus, ya lo he cambiado.

Cita:
Empezado por dec
pero, que sepas que esta forma de hacerlo tuya me la voy a apuntar.
Yo personalmente la veo mas clara, pero el resultado final es el mismo.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #15  
Antiguo 20-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Bueno. Acaso no terminé de explicarme. En lo que me he fijado particularmente ha sido en la consulta SQL. Es decir, en lo poco práctico que resulta borrar registros "uno a uno" pudiendo hacerse como acabas tú de mostrar. Es a esto a lo que me quería yo referir principalmente. Gracias otra vez Kayetano.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #16  
Antiguo 20-12-2006
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 21
kayetano Va por buen camino
Hola

Ok, pues entonces tengo que aclararte que roman propone esta misma forma en su primer post, no lo hace exactamente igual pero la idea es la misma.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #17  
Antiguo 20-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Je, je, je... pues qué puedo decir, que llevas razón, solo que no me había fijado hasta que interviniste tú...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SMDBGRID y la columna check ingel Varios 2 11-07-2006 14:28:56
Como procesar la excepción de violación de clave? ReyQ MS SQL Server 3 16-09-2005 10:15:55
como hacer que una columna del dbgrid contenga un valor de un TEdit en cada celda Shidalis OOP 2 02-08-2005 12:05:35
Procesar un Txt delimitado con TAB antes de Importar a un Database dago_Ariza Conexión con bases de datos 3 13-05-2004 09:36:30
Procesar Archivos de Texto delimitados por TAB para luego import en Access dago_Ariza Conexión con bases de datos 1 13-05-2004 09:24:39


La franja horaria es GMT +2. Ahora son las 08:33:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi