Stránka 1 z 1

PHP : nefunguje rekurzivni fce... - Vyřešeno

Napsal: stř 5. dub 2006, 20:11
od PachezZ
mam tu mensi problem mam dve rekurzivni fce , jedna funguje a druha i kdyz je v podstate jen upravena prvni nefunguje... potřebuju radu

Kód: Vybrat vše

function smazsubpolozky($nadrazena) {
$query = "SELECT id FROM auta WHERE nadrazena='$nadrazena' ORDER BY nazev";
$result = mysql_query($query)
    or die("Dotaz nelze provést");
while ($zaznam =  mysql_fetch_array($result)):
     	
	  $id = $zaznam["id"];
	  $query2 = "DELETE FROM auta WHERE id='$id'";
	  $result2 = mysql_query($query2)
		or die("Dotaz nelze provést");
	
	  smazsubpolozky($id);

endwhile;
return 0;
}
a tahle fce prostě nefunguje... jo struktura tabulky auta je:
id : integer
nazev : tinytext
nadrazena : integer (tady je ulozeno id polozky ktera je ve stromu rodicem polozky - 0 pokud jde o polozku nejvyssi urovne)

Jestli mi nekdo muzete poradit, pripadne tu fci vyzkoušet u sebe...

Napsal: ned 9. dub 2006, 18:20
od Chap
co takhle tam dat WHERE nadrazena=$nadrzena.
pokud je nadrazena typu integer tak proc tam davas ty apostrofy.

Napsal: ned 9. dub 2006, 18:21
od Chap
teda este lip:
SELECT id,nazev FROM auta WHERE nadrazena=$nadrazena ORDER BY nazev";
myslim ze by ti to podle nayvu neradilo, pokud das select jen na id.

Napsal: pon 10. dub 2006, 04:41
od Lamicz
Chap píše:teda este lip:
SELECT id,nazev FROM auta WHERE nadrazena=$nadrazena ORDER BY nazev";
myslim ze by ti to podle nayvu neradilo, pokud das select jen na id.
Ale to vis, ze se mu to seradi, i kdyz to neni v SELECTu. Jinak IMHO je to tim, ze prachsproste se ten $query2 neprovede, protoze nikde nevolas tu promennou $result2, tzn -

Kód: Vybrat vše

mysql_query( "DELETE FROM `auta` WHERE `id`='$id'" ) or die (mysql_error()); 
Jinak doporucuju pouzivat fci mysql_error() protoze tak vidis kde je chyba,ne jenom "Dotaz se neprovedl" ;)

Napsal: pon 10. dub 2006, 08:42
od Chap
no nevim, ja teda delam spis v postgreSQL a tam to proste nejde.
A s tim result 2, tak te se provede, jen je zbytecny davat
$result2 = mysql_query($query2) ;
kdyz staci dat je mysql_query($query2) ;, protoze u DELETE neocekavame vraceni nejakeho vsledku

Napsal: pon 10. dub 2006, 10:05
od PachezZ
Lamicz píše: Jinak IMHO je to tim, ze prachsproste se ten $query2 neprovede, protoze nikde nevolas tu promennou $result2, tzn -

Kód: Vybrat vše

mysql_query( "DELETE FROM `auta` WHERE `id`='$id'" ) or die (mysql_error()); 
Jinak doporucuju pouzivat fci mysql_error() protoze tak vidis kde je chyba,ne jenom "Dotaz se neprovedl" ;)
Vyzkoušim , fce mysql_error je mi tu naprd protože on se dotaz provede ale nefunguje rekurze , no zkusim a dám vědět

edit// tak se nakonec podařilo... díky všem co se snažili poradit

Kód: Vybrat vše

function smazsubpolozky($nadrazena,$uroven) {
$query = "SELECT id FROM auta WHERE nadrazena='$nadrazena' ORDER BY nazev";
$result = mysql_query($query)
    or die("Dotaz nelze provést");
while ($zaznam =  mysql_fetch_array($result)){
     	
	  $zid = $zaznam["id"];
	  smazsubpolozky($zid,$uroven+1);

}
$query2 = "DELETE FROM auta WHERE nadrazena='$nadrazena'";
 mysql_query($query2) or die (mysql_error()); 

return 0;
}