Pongo el código entero. He probado vuestras propuestas y no funcionan, el error debe estar en otro lado. He añadido algunos echo. Muestro el resultado:
Código:
<?php
function suprimehijos($tipo,$opcion){
if ($opcion<>'opcion3'){
$result=mysql_query("select tipo from jerarquia where padre = $tipo ");
$filas=mysql_num_rows($result);
echo"filas=$filas<br>";
echo "tipo=$tipo, opcion=$opcion<br>";
if($filas>0){
while ($fila=mysql_fetch_row($result)){
$categoría=$fila[0];
if($opcion=='opcion1'){
mysql_query("delete from tipos where IDtipo=$categoria");
suprimehijos($categoría,'opcion1');
mysql_query("delete from jerarquia where tipo=$categoria");
mysql_query("delete from tipos where IDtipo=$tipo");
}
if($opcion=='opcion2'){
mysql_query("delete from tipos where IDtipo=$tipo");
$opcion="opcion4";
echo"voy a llamar a suprimehijos:$categoría,$opcion<br>";
suprimehijos($categoría,$opcion);
}
if($opcion=='opcion4'){
mysql_query("delete from jerarquia where tipo=$categoria AND padre=$tipo");
$result=mysql_query("select count (*)from jerarquia where tipo =$categoria");
if(!$result){
mysql_query("delete from tipos where IDtipo=$categoria");
}
}
echo "suprimehijos $categoría,$opcion";
suprimehijos($categoría,$opcion);
}
mysql_query("delete from jerarquia where padre=$tipo");
mysql_query("delete from tipos where IDtipo=$tipo");
}
}
if($opcion=='opcion3'){
$result=mysql_query("select padre from jerarquia where tipo = $tipo ");
while ($fila=mysql_fetch_row($result)){
$abuelo=$fila[0];
echo"el abuelo es $abuelo";
$resultado=mysql_query("select tipo from jerarquia where padre = $tipo ");
while ($linea=mysql_fetch_row($resultado)){
$categoria=$linea[0];
echo"el nieto es $categoria";
mysql_query("delete from jerarquia where tipo=$categoria");
mysql_query("Insert jerarquia (tipo,padre) values ('$categoria','$abuelo')");
}
}
mysql_query("delete from jerarquia where tipo=$tipo");
mysql_query("delete from jerarquia where padre=$tipo");
mysql_query("delete from tipos where IDtipo=$tipo");
}
}
$link=mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
$tipo=$_POST['tipo'];
$opcion=$_POST['opcion'];
$opcioncat=$_POST['opcioncat'];
suprimehijos($tipo,$opcion);
/*alert
echo "
<script language='JavaScript'>
var prueba = 'La categoría ha sido suprimida corréctamente. Compruebe la nueva clasificación';
alert(prueba);
location.href = \"http://localhost/imagenes/formsuprimetipo.php\";
</script>";
*/
?>
Y lo que muestra es:
Cita: filas=1
tipo=16, opcion=opcion2
voy a llamar a suprimehijos:18,opcion4
filas=0
tipo=18, opcion=opcion4
suprimehijos 18,opcion4
filas=0
tipo=18, opcion=opcion4
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\imagenes\prueba.php on line 9
Estoy harto de mirarlo, pero según yo lo veo desde la primera vez que dice filas=0, no debería entrar en el if, y no debería llamar otra vez a suprimehijos, pero lo hace, y luego no lo vuelve a hacer. No entiendo nada.
El caso es que este código de prueba sí funciona:
Código:
<?php
$link=mysql_connect("localhost","root","");
mysql_select_db(dbimagenes,$link);
function suprimehijos($tipo,$opcion){
if ($opcion<>'opcion3'){
$result=mysql_query("select tipo from jerarquia where padre = $tipo ");
$filas=mysql_num_rows($result);
echo"filas=$filas";
if(mysql_num_rows($result)<>0){
while ($fila=mysql_fetch_row($result)){
echo"hola";
}
}
}
}
$tipo=8;
$opcion='opcion4';
suprimehijos($tipo,$opcion);
?>