Autor Zpráva
el_bunda
Profil
Zdravím,

vygooglil jsem si php script na fotogalerii. Všechno funguje jak má, ale před fotky mi to hodí hlášku: Notice: Undefined offset: 77 in c:\...\funkce.php on line 19.

<?
Function ZobrazGalerii($cesta, $cesta_male, $strana = 1, $pocetH = 4, $pocetV = 50)
{
$adresar = OpenDir($cesta); // otevre adresar
$soubor = Array(); // zinicializuje pole
while ($zaznam = ReadDir($adresar)) { // nacte nazev souboru
if (!Is_Dir("$cesta/$zaznam")) { // zkontroluje zda neni nazev adresar
$soubor[] = $zaznam; // ulozi do pole soubor
}
}
CloseDir($adresar); // uzavre adresar
Sort($soubor); // srovna nazvy souboru 


echo "<table width=\"100%\" cellpadding=\"12\">\n<tr>\n";
$sloupec = 0;$radka = 1;
$sirka = Floor(25); // procentualni sirka jednoho sloupce
$obrazek_cislo = 0; // ktery obrazek bude prvni 
while ($obrazek = $soubor[$obrazek_cislo]) { // opakuj dokud nevycerpame vsechny obrazky - TADY JE NĚKDE CHYBA
$sloupec++;
if ($sloupec > $pocetH) { // pokud sloupec prekroci pocet cloupcu,
$sloupec = 1; $radka++; echo "</tr><tr>\n"; // .., tak se vytvori nova radka
}
if ($radka > $pocetV) break; // pokud prekrocime pocet radku, skoncime cyklus
echo "<td width=\"$sirka%\">";
echo "<a href=\"$cesta/$obrazek\" class=\"highslide\" onclick=\"return hs.expand(this)\">";
echo "<img src=\"$cesta_male/$obrazek\"></a>";
echo "</td>\n";
$obrazek_cislo++;
}
echo "</td></tr></table>\n";
}
?>


Fotky (jak malé tak velké) mají název 001.jpg, 002.jpg, ...

V krajním případě by se do dalo použít, ale uznejte, že to moc profesionálně nevypadá.

Předem díky za odpovědi.
Marek88
Profil
Je to jen notice - to v podstatě nevadí. Nejsem si na 100% jistý, ale řekl bych, že to znamená, že chceš porovnávat prvek pole, který neexistuje (konkrétně ten 77.). Na funkci skriptu to ale nemá vliv a ta podmínka se vyhodnotí tak, jak chceš.

Pro ostrý provoz je pak potřeba chybové hlášky schovávat.

EDIT: Pokud bys chtěl notice odstarnit a ne jen skrýt, tak bys musel testovat, jestli se daný prvek v poli rovná NULL nebo použít funkci isset().
el_bunda
Profil
Podařilo se mi to skrýt pomocí error_reporting(0);.

Díky moc za odpověď.
Meris
Profil *
Podle mě skrývat notice a ostatní chyby má smysl jen v případě ostrého serveru, kde se chyby logují. Pro vývoj je dobré tyto chyby odstranit.
Chyba undefinned offset znamená že se ptáš na položku pole, která neexistuje.

U tebe je chyba v definici cyklu while
 while ($obrazek = $soubor[$obrazek_cislo])
 

tento řádek znamená, že do proměnné $obrazek uložíš položku pole. Což funguje tak dlouho dokud máš v poli nějakou hodnotu. Ale v okamžiku kdy se dostaneš na index, který již v poli není, tak to vypíše ono hlášení.

Řešení je několik, např
 while ($obrazek_cislo < count($soubor) ) { // jsem na indexu který je menší než počet řádků v tabulce
 $obrazek  = $soubor[$obrazek_cislo]


A v případě, že nevíš zda budou číselne indexy pole, můžeš použít foreach
 foreach ($soubor as $obrazek ) { // jsem na indexu který je menší než počet řádků v tabulce
el_bunda
Profil
Meris:
Zkusil jsem ten první způsob, akorát jsem tam musel přidal jeden středník. Teďka už frčí parádně a bez chyby. Dík

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:

0