Ver Mensaje Individual
  #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
Reputación: 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