Foros del Web » Programando para Internet » PHP »

eliminar de dos tablas condicionada

Estas en el tema de eliminar de dos tablas condicionada en el foro de PHP en Foros del Web. muy buenas a todos. os explico cuál es mi duda: resulta que tengo dos tablas: tabla 1: secciones, con dos campos: idseccion (autonumérico) y seccion ...
  #1 (permalink)  
Antiguo 07/02/2007, 02:20
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
eliminar de dos tablas condicionada

muy buenas a todos. os explico cuál es mi duda:

resulta que tengo dos tablas:

tabla 1: secciones, con dos campos: idseccion (autonumérico) y seccion (varchar 255).
tabla 2: libros, con 4 campos: idlibro (autonumerico), titulo (varchar 255),
imagen (varchar 255) y seccion (varchar 255).

en el campo 'imagen' de la tabla libros se recoge la ruta de imágenes que previamente se han almacenado en un directorio en el servidor llamado 'imagenes'. en el campo sección de la tabla libros, se recoge el 'idseccion' de la tabla secciones.

bien. estas tablas se alimentan independientemente a través de formularios diferentes. la tabla 'secciones' tiene un formulario en el que se pide se introduzca el nombre de esa sección.

la tabla 'libros' tiene un formulario en el que uno de los datos que se pide es la sección a la que va a pertenecer ese libro, campo éste que guarda en la tabla 'libros' el idsección de la tabla 'secciones'.

el tema está en lo siguiente:
si yo quiero eliminar un determinado libro de la tabla 'libros' de forma individual, no hay problema, se elimina mediante un archivo de eliminar.

el problema es este: si el administrador selecciona 'eliminar sección', se eliminen tanto la sección como todos los libros asociados a ella. esto lo hago mediante este código:

código que selecciona la sección a eliminar:
Código PHP:
<a href="eliminarseccion1.php?id='.$row ['idseccion'].'">Eliminar</a></td></tr>); 
código que elimina tanto la sección como los libros asociados a ella (incluídas las imágenes de esos libros en el directorio 'imagenes'):
Código PHP:
//borra la sección seleccionada
$id=$_GET['id'];
$connect=mysql_connect("localhost","user","password")or die(mysql_error()); 
mysql_select_db("biblio",$connect)or die(mysql_error()); 
$sql="SELECT seccion FROM secciones WHERE idseccion='".$id."'"
$resultado=mysql_query($sql) or die (mysql_error());
mysql_query("DELETE from secciones where idseccion='$id'") or die(mysql_error());

//borra los libros asociados a esa sección, incluida las imagenes de los mismos
//en el directorio 'imagenes'

$sql="SELECT imagen FROM libros WHERE obra='".$id."'";
$resultado=mysql_query($sql) or die (mysql_error()); 
$row mysql_fetch_array($resultado); 
$imagen=mysql_result($resultado,0,"imagen");
mysql_query("DELETE from libros where obra='$id'") or die(mysql_error());  
unlink($imagen);

header("Location: exito.html"); 
bien. todo esto funciona correctamente. ese código está en un mismo archivo 'eliminarseccion1.php'. Cuál es el problema? el problema es que si trato de eliminar una sección que no tiene ningún libro asociado, me da un error, pues trata de buscar ese libro asociado y no lo encuentra. lo que yo quiero entonces es tratar de meter un condicional de tal modo que si existen libros asociados a esa sección seleccionada, ejecute ese código, pero si no existen libros, para tratar de evitar ese error, me redireccione directamente a la página exito.html y no ejecute el código tratando de buscar libros asociados, que es lo que me da el error.

me echáis un cable?
  #2 (permalink)  
Antiguo 07/02/2007, 03:04
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

sigo intentándolo pero nada... se os ocurre algo?
  #3 (permalink)  
Antiguo 07/02/2007, 05:05
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

alguna ayudita?
  #4 (permalink)  
Antiguo 07/02/2007, 07:09
 
Fecha de Ingreso: agosto-2006
Mensajes: 91
Antigüedad: 17 años, 8 meses
Puntos: 0
Re: eliminar de dos tablas condicionada

y si haces algo con empty:

if (!empty($imagen)){
mysql_query("DELETE from libros where obra='$id'") or die(mysql_error());
unlink($imagen);
}

no sé si voy bien...
  #5 (permalink)  
Antiguo 07/02/2007, 07:26
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Re: eliminar de dos tablas condicionada

Hola, creo que lo que puedes hacer es lo siguiente:
1. Verificar que exista la seccion
2. con el ide obtenido en paso 1, verificar que existan libros asociados
3. si paso 2 se cumple entonces borrar los libros asociados

algo asi:
Código PHP:
  if (nro_de_seccion>0){ // 
     
if (nro_de_libros_de_esta_seccion>0){
        
/* borrar campos de tabla libros */
     
}
  } 
ojo que previamente tu has debido de hacer la consulta de verificacion
  #6 (permalink)  
Antiguo 08/02/2007, 03:03
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

nada, no soy capaz... además, con el código inicial que puse, resulta que de la base de datos me borra todos los registros asociados a esa sección, pero del servidor, las imágenes sólo me borra la última. es decir, si una sección tiene 3 libros asociados con sus tres imágenes correspondientes, los borra de la base de datos, pero del servidor sólo borra la última imagen.

me podéis ayudar con estos dos temas....
  #7 (permalink)  
Antiguo 08/02/2007, 04:59
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

alguna ayuda, por favor?
  #8 (permalink)  
Antiguo 08/02/2007, 06:19
 
Fecha de Ingreso: abril-2004
Mensajes: 49
Antigüedad: 20 años
Puntos: 1
Re: eliminar de dos tablas condicionada

Hola estibaliz2006,
tu script no borra todas las imágenes porque la variable $imagen que tienes ahi se trata justamente de la correspondiente a la primer fila de tu select.
es que has olvidado hacer un ciclo con ese select, asi
Código:
$sql="SELECT imagen FROM libros WHERE obra='".$id."'";
$resultado=mysql_query($sql) or die (mysql_error()); 
while ($row = mysql_fetch_array($resultado)) { 
 unlink($row['imagen']);
} 
mysql_query("DELETE from libros where obra='$id'") or die(mysql_error());
De esta manera se repite el borrado del archivo por cada fila que te da el resultado. (los corchetes en realidad son innecesarios, pero son para ilustrar mejor el while, en este caso)
Nota que he puesto el query que borra todas las filas afuera del while. No querrás borrar las filas mientras las estás leyendo sería catastrófico
  #9 (permalink)  
Antiguo 08/02/2007, 06:32
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

gracias OutofOrder. creo que por fin funciona. lo único que me queda es lo que ponía al principio, es decir, la condición. es decir, si esa sección no tiene libros asociados, que se vaya directamente a exito.html y no ejecute la opción de eliminar esos libros pues sino me da error ya que no encuentra ninguno que eliminar. como se haría esto?
  #10 (permalink)  
Antiguo 08/02/2007, 14:03
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

por favor, hay alguien que sepa como hacer la condición que necesito?
  #11 (permalink)  
Antiguo 09/02/2007, 01:13
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

por favor, alguna idea?
  #12 (permalink)  
Antiguo 09/02/2007, 05:42
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: eliminar de dos tablas condicionada

por favor....
  #13 (permalink)  
Antiguo 09/02/2007, 07:09
 
Fecha de Ingreso: abril-2004
Mensajes: 49
Antigüedad: 20 años
Puntos: 1
Re: eliminar de dos tablas condicionada

Bueno en realidad es bastante simple,
Tenés que hacer una consulta para verificar si quedan libros de la sección que eliminas. Si la consulta tiene aunque sea una fila, significa que hay cosas por borrar. si no, vas a la página de exito.
Para eso primero obtienes primero el nombre literal de la sección. (y dejame decirte que no tiene mucho sentido tener dos tablas relacionadas si en la tabla de libros en vez de poner el ID de la seccion, pones el campo varchar llamado seccion". No es eficiente, tenlo en cuenta )
Código PHP:
//buscas el nombre de la seccion y lo almacenas en $fila['seccion']
$resultado mysql_query("SELECT seccion FROM secciones WHERE idseccion = "$id);
$fila mysql_fetch_assoc($resultado);
//luego usas ese nombre para ver si hay libros en esa sección 
$resultado mysql_query("SELECT idlibro FROM libros WHERE seccion = '".$fila['seccion']."' LIMIT 1");
//conque encuentre algo basta, 
if (mysql_num_rows($resultado)) {
  
//acá va el codigo de borrar filas
}
else {
  
//aca va el codigo de redirección, porque no encontró nada

Espero que te sirva. Te recomiendo que veas algunos tutoriales para entender como relacionar tablas usando joins (y usando "ids" en vez de campos con valores como varchars).
Un saludo.
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 14:14.