Foros del Web » Programando para Internet » PHP »

borrado de registros con checkbox

Estas en el tema de borrado de registros con checkbox en el foro de PHP en Foros del Web. <? $link=mysql_connect("localhost","i","h") or die("Error de conexion DBMS"); mysql_select_db("i",$link) or die("Error de conexion a la BD"); $sql="select * from publicidad"; $result= mysql_query($sql); echo"<center>"; echo "<table border='0'>\n"; ...
  #1 (permalink)  
Antiguo 06/04/2005, 20:02
 
Fecha de Ingreso: abril-2005
Mensajes: 94
Antigüedad: 12 años, 8 meses
Puntos: 0
borrado de registros con checkbox

<?
$link=mysql_connect("localhost","i","h") or die("Error de conexion DBMS");
mysql_select_db("i",$link) or die("Error de conexion a la BD");

$sql="select * from publicidad";
$result= mysql_query($sql);
echo"<center>";
echo "<table border='0'>\n";
echo "<tr><td>Nombre</td><td>Empresa</td><td>correo</td><td>Correo Alternativo</td><td>Telefono</td><td>Pagina</td><td>Cliente</td></tr>\n";

echo "<form name=form1 method=post action=borra.php>";
while($contenido= mysql_fetch_array($result)){

$nombre2=$contenido[nombre];
$empresa2=$contenido[empresa];
$correo2=$contenido[correo];
$correoa2=$contenido[correoa];
$telefono2=$contenido[telefono];
$pagina2=$contenido[pagina];
$cliente2=$contenido[cliente];

echo"<tr></tr>";
echo"<td>$nombre2</td>";
echo"<td><b>$empresa2</b></td>";
echo"<td>$correo2</td>";
echo"<td><b>$correoa2</b></td>";
echo"<td>$telefono2</td>";
echo"<td><b>$pagina2</b></td>";
echo"<td>$cliente2</td>";
echo"<td><input type=\"checkbox\"name=\"seleccion[]\"value=\"$row[i]\"></td>\n";
echo"<tr></tr>";
}
echo"\n";
echo "</table>\n";
echo"<input type=submit name=borrar value=borrar>";
echo"</form>";
mysql_free_result($result);
mysql_close();


?>



lo que quiero es borrar lo que este seleccionado y mi problema es que no se como incrementar la variable i si la tengo que declarar como estatica y $i y le pongo un contador como $i=$i+1;
o solo lo hace porque haci no me imprime nada en pantalla


y en el php borra no me imprime nada y no me borra

de antemano gracias y lo puse como nuevo porque encontre uno parecido y no me dejo citarlo ahi, lo tuve que registrar como nuevo
  #2 (permalink)  
Antiguo 06/04/2005, 23:32
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
Sonrisa leves modificaciones

no es necesario el contador, simplemente tienes que identificar cada fila igual que en la base de datos de mysql, con el identificador del registro, unas pocas modificaciones a tu script resultaron en esto:

Código PHP:
$link   mysql_connect("localhost","i","h") or die("Error de conexion DBMS");
mysql_select_db("i",$link) or die("Error de conexion a la BD");
$sql    ="select * from publicidad";
$result mysql_query($sql);
$html  "";
$html .= '<div align="center">'."\n";
$html .= '<table border="0" colspan="8">'."\n";
$html .= '<tr><td>Nombre</td><td>Empresa</td><td>correo</td>'."\n";
$html .= '<td>Correo Alternativo</td><td>Telefono</td><td>Pagina</td><td>Cliente</td><td>&nbsp;</td></tr>\n'."\n";
$html .= '<form name=form1 method=post action=borra.php>'."\n";
while ( 
$contenido mysql_fetch_array($result) )
{
    
$html .= "<tr></tr>";
    
$html .= "<td>{$contenido['nombre']}</td>\n";
    
$html .= "<td><b>{$contenido['empresa']}</b></td>\n";
    
$html .= "<td>{$contenido['correo']}</td>\n";
    
$html .= "<td><b>{$contenido['correoa']}</b></td>\n";
    
$html .= "<td>{$contenido['telefono']}</td>\n";
    
$html .= "<td><b>{$contenido['pagina']}</b></td>\n";
    
$html .= "<td>{$contenido['cliente']}</td>\n";
    
    
/* esta fila es importante, debes poner el Id del usuario, es decir, el campo en tu tabla que identifica ese registro*/
    /* en este caso yo le puse lo que es mas comun: publicidad_id*/
    
$html .= "<td><input type=\"checkbox\" name=\"seleccion[]\" value=\"{$contenido['publicidad_id']}\" /></td>\n";
    
    
$html .= "<tr></tr>";
}
$html .=  "</table>\n";
$html .=  "<input type=submit name=borrar value=borrar>\n";
$html .=  "</form>\n";
mysql_free_result($result);
mysql_close(); 
luego en tu pagina de borrar.php haces algo como esto:

Código PHP:
$victimas = isset($_POST['seleccion']) ? $_POST['seleccion'] : array();
foreach ( 
$victimas as $id_victima )
{
    
$sql "DELETE * FROM publicidad WHERE publicidad_id = '{$id_victima}'";
    
mysql_query($sql);

Mucha suerte!
  #3 (permalink)  
Antiguo 07/04/2005, 12:38
 
Fecha de Ingreso: abril-2005
Mensajes: 94
Antigüedad: 12 años, 8 meses
Puntos: 0
Que crees?? me gusto mucho la manera en que me planteaste la solucion pero no imprime nada en pantalla el primer codigo, osea nisiquiera me da la opcion de checkbox ni los nombres de mis clientes

Si regreso al modo que yo lo tenia, ¿como traduzco la instruccion

$html .= "<td><input type=\"checkbox\" name=\"seleccion[]\" value=\"{$contenido['publicidad_id']}\" /></td>\n";

a mi codigo?

me mencionaste que era importate el id que tu le habias puesto publicidad_id

mira en mi tabla yo ingrese un campo llamado "cliente " es el id y esta asignado auto_increment


/// esto ya lo puse despues de haberte escrito, pero como se puede editar el mensaje y no me habias respondido//////////////
mira puse algo asi

echo"<td><input type=\"checkbox\" name=\"seleccion[]\" value=\"$contenido['cliente']\"></td>\n";

porque como te habia dicho cliente es mi identificador pero de todas formas me marca error




Por adelantado te doy las gracias ehhh!!! ;)
cuando sea grande quiero ser como tu!! jijiji

Última edición por sophia2323; 07/04/2005 a las 12:49
  #4 (permalink)  
Antiguo 07/04/2005, 12:54
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 12 años, 9 meses
Puntos: 0
Mira si no entendi mal el id que dice sism82 es el que tenes en $cliente2, por otro lado tenias un pequeño error html que tal ves podria ser la causa de que no lo muestre. Prueba con esto:

Código PHP:

<?
$link
=mysql_connect("localhost","i","h") or die("Error de conexion DBMS");
mysql_select_db("i",$link) or die("Error de conexion a la BD");

$sql="select * from publicidad";
$resultmysql_query($sql); 
echo
"<center>"
echo 
"<table border='0'>\n";
echo 
"<tr><td>Nombre</td><td>Empresa</td><td>correo</td><td>Correo Alternativo</td><td>Telefono</td><td>Pagina</td><td>Cliente</td></tr>\n";

echo 
"<form name=form1 method=post action=borra.php>";
while(
$contenidomysql_fetch_array($result)){

    
$nombre2=$contenido[nombre];
    
$empresa2=$contenido[empresa];
    
$correo2=$contenido[correo];
    
$correoa2=$contenido[correoa];
    
$telefono2=$contenido[telefono];
    
$pagina2=$contenido[pagina];
    
$cliente2=$contenido[cliente];

    echo
"<tr>";//Aca deberias de abrir un tr solamente y no cerrarlo
    
echo"<td>$nombre2</td>";
    echo
"<td><b>$empresa2</b></td>";
    echo
"<td>$correo2</td>";
    echo
"<td><b>$correoa2</b></td>";
    echo
"<td>$telefono2</td>";
    echo
"<td><b>$pagina2</b></td>";
    echo
"<td>$cliente2</td>";
    echo
"<td><input type=\"checkbox\"name=\"seleccion[]\"value=\"$cliente2\"></td>\n"
    echo
"</tr>";//aca lo cerras
}
echo
"\n";
echo 
"</table>\n";
echo
"<input type=submit name=borrar value=borrar>";
echo
"</form>";
mysql_free_result($result);
mysql_close();

?>
Cualquier cosa avisa.
Saludos
  #5 (permalink)  
Antiguo 07/04/2005, 13:28
 
Fecha de Ingreso: abril-2005
Mensajes: 94
Antigüedad: 12 años, 8 meses
Puntos: 0
problemas con borra.php

Primeramente muchas gracias por atenderme y la rapidez oye mira no tengo ya problema con lo que es la consulta y la verdad nunca he tenido problema el problema lo tengo con el borrado
borra.php

<?php

$link=mysql_connect("localhost","i","dy") or die("Error de conexion DBMS");

mysql_select_db("i",$link) or die("Error de conexion a la BD");

$sql="select * from publicidad";
$result= mysql_query($sql);
$victimas = isset($_POST[seleccion]) ?
$_POST[seleccion] : array();

foreach ( $victimas as $id_victima ) {
$sql2 = "DELETE * FROM publicidad WHERE
cliente = $id_victima";
$result2=mysql_query($sql2);
}


?>

Última edición por sophia2323; 07/04/2005 a las 13:30
  #6 (permalink)  
Antiguo 07/04/2005, 13:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 12 años, 9 meses
Puntos: 0
$sql2 = "DELETE * FROM publicidad WHERE
cliente = $id_victima"; //El delete no lleva *
Esto deberia de tirarte error por otro lado no veo ningun error que impida el borrado.
Fijate que no sea solo el *.
Saludos
  #7 (permalink)  
Antiguo 07/04/2005, 13:38
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Borrar los campos

Mira, un par de puntos nada mas, primero, debes identificar que campo en tu tabla es unico y sera en el que te bases para borrar, dices que es cliente, pues esta bien, que sea cliente, entonces ese debes usar

echo "<td><input type=\"checkbox\"name=\"seleccion[]\"value=\"$cliente2\"></td>\n";

Para borrarlos:

$victimas = isset($_POST['seleccion']) ? $_POST['seleccion'] : array();
foreach ( $victimas as $id_victima )
{
$sql = "DELETE FROM publicidad WHERE publicidad_id = '{$id_victima}'";
mysql_query($sql);
}

Esto es muy poco eficiente, estas realizando X consultas y eso esta mal, debes hacer algo como:

$victimas = isset($_POST['seleccion']) ? $_POST['seleccion'] : array();
foreach ( $victimas as $id_victima )
{
$sqlDelete = $sqlDelete & "cliente = '{$id_victima}' or";
}

//Un error, se creara un or al final, para eliminar ese detalle solamente agrega
//a la consulta un cliente iniexistente como se hace a continuacion.

$sql = "DELETE FROM publicidad WHERE {$sqlDelete} cliente = -1";
mysql_query($sql);

END

Nueno, la parde de como eliminar el error del ultimo OR seria mejor si a la cadena le borrar los ultimos 2 caracteres, es mas eficiente, pero bien, esta forma de borrar en N veces mas eficiente, rapida y con menos posibilidad de errores que la anterior.

Bay.

Última edición por Neuron_376; 07/04/2005 a las 13:39
  #8 (permalink)  
Antiguo 07/04/2005, 13:38
 
Fecha de Ingreso: abril-2005
Mensajes: 94
Antigüedad: 12 años, 8 meses
Puntos: 0
no ya se lo quite y no me borra nada :(
no puede ser algo mas?


oye pero muchas gracias!!! ehh
un besito y
  #9 (permalink)  
Antiguo 07/04/2005, 13:39
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
sorry...... cierto, se me paso el * en el DELETE por las prisas...... la consulta es:

Código PHP:
$sql "DELETE FROM publicidad WHERE publicity_id = '{$id_victima}'";
mysql_query($sql) or die(mysql_error()); 
asi te aseguras de ver el error en caso de haberlo en la consulta
  #10 (permalink)  
Antiguo 07/04/2005, 13:43
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Revisa el arreglo

Trata de mirar los valores que pasaste en el arreglo:

1. En la pagina donde miras "Selecciona los que deseas borrar", mira el codigo y revisa que este correcto el campo de "selecciones[]", es decir, que tiene los valores correctos.

2. En la pagina donde borrar, imprime en pantalla los valores y revisa que se hayan pasado correctamento los que elegiste.
  #11 (permalink)  
Antiguo 07/04/2005, 13:50
 
Fecha de Ingreso: abril-2005
Mensajes: 94
Antigüedad: 12 años, 8 meses
Puntos: 0
Muchachos muchisisisisiisimas gracias, creo que esto ya esta resuelto
pero que creen jjijijiiji

todo esto lo hice porque ocupo otra cosa, lo que pasa es que al igual que funciona para borrar lo que pretendo hacer es utilizar el checkbox para enviar mails

pero ahi les va mi idea lo que pasa es que quiero enviar una imagen a todos los correos de mis clientes entonces con el checkbox selecciono y envio pero a lo que voy es que quiero que la imagen la jale del servidor osea no quiero que la imagen vaya adjunta para que no les pese sino que solo la jale, para que su correo este liviano

que me dicen abro otro tema???
  #12 (permalink)  
Antiguo 07/04/2005, 13:54
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 14 años, 1 mes
Puntos: 1
definitivamente abre otro tema....
  #13 (permalink)  
Antiguo 07/04/2005, 14:00
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Ok, ok

jajajaja, dont worry.

Mira, eso que quieres es lo mas facil del mundo, tu quieres lograr que el e-mail sea liviano, la unica forma de hacerlo es asi:

Pones una liga en tu e-mial hacia la imagen, la URL de la imagen sera directo a tu servidor.

Ventajas:

- El correo de tu cliente se abre rapido, porque solo se carga el texto que quieras y no la imagen.

Desventajas:

- El cliente tiene que hacer click en la liga para ver tu imagen.
- El cliente no mirara la imagen si no esta conectado a Internet.

Tal vez estabas pensando en agregar la imagen en el e-mail desde el principio, pero con el URL hacia tu servidor, eso esta mal y resulta mas pesado, ejemplo:

Envias una iamgen insertada o adjunta a tu e-mail, la imagen ya esta en el servidor de correo entonces rapidamente se carga cuando se hace click, en cambio si la imagen esta en otro server, entonces tienes que hacer clicik y llamar un archivo que se encuentra en una nueva pagina.

Bueno, espero que esto te ayude a lo que quieres hacer.
  #14 (permalink)  
Antiguo 07/04/2005, 14:31
 
Fecha de Ingreso: abril-2005
Mensajes: 94
Antigüedad: 12 años, 8 meses
Puntos: 0
a eso me refiero, lo que no quiero es que hagan una liga a la imagen sino que la imagen aparezca

ejemplo cuando te hacen la invitacion los de hi5 te viene la imagen y no esta como liga verdad??

quiero que habran el correo y aparezca la imagen cargada del servidor

lo que se es que lo tengo que enviar con mail to pero no se como se mandaria

Última edición por sophia2323; 07/04/2005 a las 14:46
  #15 (permalink)  
Antiguo 07/04/2005, 14:48
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Ok.

Bueno, esto es facil, pero no hara que el e-mail sea mas liviano, para nada, al contrario, porque la imagen se carga interna cuando abren el e-mial.

1. En la funcion de mail, en la parte de encabeezado, ahi especificas que tu e-mial es tipo HTML.

2. Tu e-mial debe ser tipo html, y entonces ahi insertas la imagen con la direccion directa a tu servidor, ago como:

<html>
Mira mi imagen aqui:<br><br>
<img src="http://tuservidor/tuimagen.gif" width="NN" height="NN">
</html>

Y listo, tu e-mial tendra la imagen dentro del e-mail

Sin embargo las desventajas siguen siendo las mismas:

- El correo es tan pesado como la imagen sea.
- El cliente no puede ver la imagen si no esta conectado a Internet.

Última edición por Neuron_376; 07/04/2005 a las 14:49
  #16 (permalink)  
Antiguo 07/04/2005, 14:56
 
Fecha de Ingreso: abril-2005
Mensajes: 94
Antigüedad: 12 años, 8 meses
Puntos: 0
:( creo que no me entendiste, porque ya lo han hecho personas y a mi solo me carga 1kb, siendo que la imagen esta mas pesada,

una compa~era lo hizo con asp, pero yo lo quiero hacer con php, con lo mismo al momento de hacer click al cliente que envie la imagen a su correo
  #17 (permalink)  
Antiguo 07/04/2005, 15:04
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Paso a Paso

El e-mial estara muy ligero, eso es cierto, porque no tienes una imagen realmente completa cargada en tu e-mail, pero cuando haces click, bien, lo que pasa es esto:

1. El e-mil aparece muy pequeño, porque no es mas que texto (codigo html)

2. Cuando se esta leyendo el e-mail, encuentra que debe mostrar una imagen, entonces la va a ir a buscar a tu servidor y la va a mostrar en el e-mial, entonces, lo que se tarda en cargar la imagen y mostrarla, es lo que hace pesado el e-mail, aunque el e-mail pese realmente 1 k

Espero haberme explicado, ademas, si tu amiga ya lo hizo en ASP, es lo mismo, solo traduce el codigo y miraras que todo sale igual, por cierto, es ASP es el mismo metodo:

1. Le dices a la funcion (objeto) que el e-mail es tipo HTML
2. Insertas un TAG tipo imagen en el e-mail con el URL hacia tu servidor y listo.

Las mismas ventajas y las mismas desventajas

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:14.