Autor Zpráva
mrbaen
Profil *
zdravím pokoším se vytvořit jednoduchý skript na načítání složek z podsložek podsložek..... myslím že se tomu říká stromová struktura a narazil jsem na problém.
Když mám načíst první podsložky nějaké složky pomocí skriptu tak mi je to najde všechny ale když už chci jít hlouběji nastane chyba a načte mi to tťreba misto dvou podsložek podsložky jen jednu.

skript:

$slozka=$_GET['slozka'];
$sidn='-1';
$qqq = mysql_query("SELECT * FROM $DB2.slozky WHERE `under`='$slozka'");
if(mysql_num_rows($qqq)>0){
$qqq = mysql_query("SELECT * FROM $DB2.slozky WHERE `under`='$slozka'");
while ($row = mysql_fetch_object($qqq)) { 
$sid[]="$row->id"; $sidn= $sidn+1;}

include'/chc.php';
}

$sidn1='-1';
 include'/chi.php'; 

chi.php:

<?php
$tidn1=$tidn1+1;
if(isset($tid[$tidn1])){
 echo"".$tid[$tidn1]."";
include'/chi.php';
}
?>

chc.php:

$qqq = mysql_query("SELECT * FROM $DB2.slozky WHERE `under`='".$sid[$sidn]."'");
if(mysql_num_rows($qqq)>0){
$qqq = mysql_query("SELECT * FROM $DB2.slozky WHERE `under`='".$sid[$sidn]."'");
while ($row2 = mysql_fetch_object($qqq)) { 
$sid[]="$row2->id"; $sidn= $sidn+1;
}
include'/chc.php';
}

nevíte jak by se to dalo opravit?


omluvam se za chybu v chi.php ma tam byt sind1 a sind
lionel messi
Profil
mrbaen:

Vkladať do dotazu neošetrený užívateľský vstup predstavuje veľké bezpečnostné riziko, vyhľadaj si na webe pojem SQL Injection a pozri na Definitivní příručka escapování.
juriad
Profil
Podle mě je problém v tom, že 9. řádek je mimo cyklus while a tedy se chc.php bude includovat jen jednou.

Není dobrý nápad používat includování tímto způsobem, předělej to na volání funkcí (které budu mít rozumná jmena a ne chc a chi). Rekurzivní includy jsou opravdu prasárna největšího kalibru.

Také nemusíš provádět dotaz dvakrát, stačí jednou. Počítat řádky funkcí mysql_num_rows je v tvém případě úplně zbytečné. Stačí si v tom while nastavit nějakou proměnnou na true a mimo while později otestovat, že jejI hodnota je true (tedy, že while proběhl alespoň jednou).
mrbaen
Profil *
juriad:
když to dám do "whilu" tak se mi vypíše jen jedna a to ta nejnevejsi podslozka
tiso
Profil
Existuje niekoľko rôznych spôsobov uloženia stromovej štruktúry v databáze, každá je vhodná na niečo iné.
Tvoj spôsob práve nie je vhodný na výpis podstromu. Riešením je zmeniť štruktúru.
juriad
Profil
tiso:
To bych zatím neřešil, on má vůbec problém s jakýmkoli rozumným výpisem. Nejprve musí zapomenout na includy a nahradit je funkcemi, dodržovat nějaký coding style a trochu přemýšlet.

Zrovna nested sets bych pro uložení adresářové struktury začátečníkovi nedoporučoval, absolutně se v tom ztratí jakmile bude potřebovat sebemenší úpravu. Lepší je v toto případu asi kořenová cesta (jako VARCHAR) spolu s informací o hloubce a použitím prefixového operátoru LIKE. To je mnohem jednodušší na použítí a rozumně rychlé.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: