| Autor | Zpráva | ||
|---|---|---|---|
| el_bunda Profil |
#1 · Zasláno: 3. 3. 2011, 13:32:15
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 |
#2 · Zasláno: 3. 3. 2011, 14:02:36 · Upravil/a: Marek88
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 |
#3 · Zasláno: 3. 3. 2011, 14:28:55
Podařilo se mi to skrýt pomocí error_reporting(0);.
Díky moc za odpověď. |
||
| Meris Profil * |
#4 · Zasláno: 3. 3. 2011, 15:20:27
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 |
#5 · Zasláno: 3. 3. 2011, 16:55:57
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 |
||
|
Časová prodleva: 15 let
|
|||
0