Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem PHP, obrazky ze slozky

Ahoj, přítel mi nedávno napsal kód na galerii.

<?php
$slozka=opendir('.');
while($objekt=readdir($slozka))
{
 if($objekt=="."||$objekt==".."||$objekt=="index.php")continue;
 $soubor[]=$objekt;
}
if(!isset($_GET["strana"]))
 {$_GET["strana"]=0;} 
echo "<img src=\"".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";
if(($_GET["strana"])!=0)
 {echo "<a href=\"index.php?strana=".($_GET["strana"]-1)."\">zpet</a><br>";}
if(count($soubor)>($_GET["strana"]+1)) 
 {echo "<a href=\"index.php?strana=".($_GET["strana"]+1)."\">dalsi</a><br>";}
?>

Je z něj vidět, že soubory se načítají z adresáře jako je php soubor.

Avšak, jak se snažím, nemůžu příjít na to, jak to udělat, aby se načítaly ze složky SOUBORY...

Jsem asi blbej

(začínám s php.)

Předmět Autor Datum
$slozka=opendir('./soubory/'); ?
Eessencia 29.07.2012 18:59
Eessencia
Ahoj, to jsem samozřejmě zkoušel, zas takový začátečník v tomto oboru nejsem. Nicméně, soubory, to…
PHpař 29.07.2012 19:05
PHpař
Tak máš nesprávne nastavený atribút src elementu img. Doplň pred názov súboru to meno složky a pôjde…
los 29.07.2012 23:02
los
podívej se sem http://pc.poradna.net/q/view/848615-php-galerka?pa ge=r849181#r849181 Tuším že se je…
tomas.kulhanek 29.07.2012 19:13
tomas.kulhanek
Koukám, koukám, ale stále nechápu, co je tam špatně... ?
PHpař 29.07.2012 19:19
PHpař
achjo :) <?php $jmeno_zobr_obrazku = $_REQUEST['obr']; // toto si ošetři (může nastat že není nasta…
tomas.kulhanek 29.07.2012 19:46
tomas.kulhanek
Děkuji, ale v čem je problém v kódu v otázce? Chci to pochopit :D :)
Phpař 29.07.2012 19:50
Phpař
abych pravdu řekl, moc jsem ho neštudoval, stačilo mi vidět $slozka=opendir('.'); while($objekt=rea…
tomas.kulhanek 29.07.2012 19:52
tomas.kulhanek
No, děkuji za radu a informaci, ale já bych raději proštudoval ,,můj,, kód
Phpař 29.07.2012 19:56
Phpař
dej sem přímej odkaz na tento skript
tomas.kulhanek 29.07.2012 20:09
tomas.kulhanek
Myslíš to takhle :-D : http://pc.poradna.net/q/view/850794-php-promenna-z -html-kodu?page=r850985#r8…
ERASER 30.07.2012 00:00
ERASER
aha :) .. já myslel že má alespoň nějakej link, kde můžeme vidět výsledek :)
tomas.kulhanek 30.07.2012 08:04
tomas.kulhanek
Adresu kde to tvoří, nalezneš zde: http://pc.poradna.net/q/view/850441-php-rada-jedno ducha?page=r85…
ERASER 30.07.2012 11:13
ERASER
Jak zde už napsal los: Tak máš nesprávne nastavený atribút src elementu img. Doplň pred názov súbor…
ERASER 30.07.2012 00:40
ERASER
A zde mi už musí být jasné, kde je chyba => Cesta uvedená v src neobsahuje danou složku. podívej se…
tomas.kulhanek 30.07.2012 08:02
tomas.kulhanek
Podíval jsem se na tu tvoji modifikaci a bohužel mi to nějak nefungovalo. Tak jsem to ještě jednou z…
ERASER 30.07.2012 11:08
ERASER
$soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE); tu mou verzi jsem neměl…
tomas.kulhanek 30.07.2012 13:27
tomas.kulhanek
Ovšem toto mi příjde lepší než opendir a readdir. (glob toto řeší za tebe a ještě filtruje) Asi máš…
ERASER 30.07.2012 15:33
ERASER
když by teď měl být kód vyladěn, tvojí zásluhou, tak praxi zase nebude (teoreticky) fungovat, když…
tomas.kulhanek 30.07.2012 16:09
tomas.kulhanek
Již to není sice aktuální a už to mám celkem upravené, ale např. v9pumnHS Přesně víš o čem mluvím.…
ERASER 30.07.2012 16:29
ERASER
Škoda, že tak to nedělá i zákazník. proto jim nedávám přístup na FTP a dám jim jen odkaz na formulá…
tomas.kulhanek 30.07.2012 16:33
tomas.kulhanek
Dělal jsem takový malý jednoduchý webík (nějaký obrázky texty, nic spešl) pro zákazníka, který už mě…
ERASER 30.07.2012 16:51
ERASER
na to není co říct
tomas.kulhanek 30.07.2012 16:55
tomas.kulhanek
Hoši, děkuji, ještě bych měl prosbu, při zkoumání kódu <?php $slozka="SOUBOR"; $adresar=opendir($sl…
PHPpař 30.07.2012 17:03
PHPpař
využij toto <?php $soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE); if(!i…
tomas.kulhanek 30.07.2012 17:06
tomas.kulhanek
Mrkám na to, když ,,vyechuji,, $soubor píše to chybu Array to string conversion Znamená to že mám…
PHPpař 30.07.2012 17:14
PHPpař
co máš v $_GET["strana"]
tomas.kulhanek 30.07.2012 17:15
tomas.kulhanek
V tom je číslo stránky (pořadí)
PHPpař 30.07.2012 17:18
PHPpař
$soubor[$_GET["strana"]] - je adresa s názvem obrázku, takže když použiju explode funkci (a jakoby…
PHPpař 30.07.2012 17:19
PHPpař
namísto <?php $soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE); if(!isset…
tomas.kulhanek 30.07.2012 17:21
tomas.kulhanek
Děkuji Vám oboum za rady, už to jakš, takš, chápu :)
PHPpaŘ 30.07.2012 15:46
PHPpaŘ
Notice: Undefined variable: soubor in C:\Program Files (x86)\EasyPHP-12.0\www\index.php on line 126…
PHPpař 30.07.2012 17:22
PHPpař
ok, chyba je v $soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE); Je to t…
tomas.kulhanek 30.07.2012 17:27
tomas.kulhanek
Aha, děkuji, každopádně jsem pochopil vše co jsem chtěl. Děkuji moc, :))) poslední
PHPpař 30.07.2012 17:29
PHPpař
Ahoj, děkuji za radu, samozřejmě jsem zkoumal HTML kód který přehraje a viděl jsem <img src="family0…
PHPpaŘ 30.07.2012 15:44
PHPpaŘ

achjo :)

<?php $jmeno_zobr_obrazku = $_REQUEST['obr']; // toto si ošetři (může nastat že není nastavený tento request)
$pole_obrazku = glob('./*.jpg');
$pozice = array_keys($pole_obrazku,$jmeno_zobr_obrazku);
var_dump($pole_obrazku);
var_dump($jmeno_zobr_obrazku); // - stačí když ho dáš do <img src=""/>
$predchozi = $pole_obrazku[($pozice -1)]; // obsahuje celou adresu na obrazek!!!
$nasledujici= $pole_obrazku[($pozice +1)];// obsahuje celou adresu na obrazek!!! ?>

<a href="<?php echo $nasledujici;?>">Nasledujici</a><br>
<a href="<?php echo $predchozi;?>">predchozi</a>

Jak zde už napsal los:

Tak máš nesprávne nastavený atribút src elementu img. Doplň pred názov súboru to meno složky a pôjde to.

Takže to napíšu znova pro lepší pochopení s analýzou jak dané chybě dospět, i když je vidět na první pohled.
Když ten kód trochu ořežu, aby po (prvním) načtení stránky fungoval, tak z něj zbude (plus doplním komentáře):

<?php
$adresar=opendir('.');  //nacitam adresar
while($objekt=readdir($adresar)) // ctu polozky v adresari v cyklu
{
 if($objekt=="."||$objekt==".."||$objekt=="index.php")continue;//preskakuji objekty "index.php", "adresar vyse" a "tento adresar" 
 $soubor[]=$objekt; //nacitam soubor do pole
}
if(!isset($_GET["strana"]))//zjistuji jestli je vytvoena promena "strana"
 {$_GET["strana"]=0;}//pokud neni vytvorim promenou s hodnotou nula
echo "<img src=\"".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";//vypise pouze HTML kod
//zbytek odmazan
?>

Po vygenerovaní stránky se koukni na zdrojový HTML kód, co to vygenerovalo a zkontroluj ho, kde jsou chyby.
(Pro ulehčení práce přiložím vygenerovaný zdrojový kód stránky:)

<img src="family019.jpg" border="0"><br>

Opět si ho oříznu na to nejpodstatnější:

<img src="family019.jpg">

A zde mi už musí být jasné, kde je chyba => Cesta uvedená v src neobsahuje danou složku.
Takže pouze jenom do cesty doplním danou složku, změny ve zdrojovém kódu jsou tučně:

<?php
$slozka="SOUBORY";
$adresar=opendir($slozka);
while($objekt=readdir($adresar))
{
if($objekt=="."||$objekt==".."||$objekt=="index.ph p")continue;
$soubor[]=$objekt;
}
if(!isset($_GET["strana"]))
{$_GET["strana"]=0;}
echo "<img src=\"".$slozka."/".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";
if(($_GET["strana"])!=0)
{echo "<a href=\"index.php?strana=".($_GET["strana"]-1)."\"> zpet</a><br>";}
if(count($soubor)>($_GET["strana"]+1))
{echo "<a href=\"index.php?strana=".($_GET["strana"]+1)."\"> dalsi</a><br>";}
?>

(Bohužel mě to nešlo vypsat jako php syntaxi se ztučněnými výrazy.)
Doufám, že jsi pochopil, kde je problém v kódu.

A zde mi už musí být jasné, kde je chyba => Cesta uvedená v src neobsahuje danou složku.

podívej se na glob() - navrací pole s adresami na soubory, které splňují kritérium v parametru. V tomto případě by to vypadalo takto

více info
stackoverflow
cowburn.info

<?php 
$soubor = glob('soubory/*.{[jJ][pP][gG],[pP][nN][gG],[gG][iI][fF],[jJ][pP][eE][gG]}',GLOB_BRACE); // nyní to vybere jen soubory s extenzí jpg,png,gif,jpeg (je to tak blbě rozepsané, protože takto to není case sensitive)

if(!isset($_GET["strana"]))
 {$_GET["strana"]=0;} 
echo "<img src=\"".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";
if(($_GET["strana"])!=0)
 {echo "<a href=\"index.php?strana=".($_GET["strana"]-1)."\"> zpet</a><br>";}
if(count($soubor)>($_GET["strana"]+1)) 
 {echo "<a href=\"index.php?strana=".($_GET["strana"]+1)."\"> dalsi</a><br>";}
?>

Podíval jsem se na tu tvoji modifikaci a bohužel mi to nějak nefungovalo. Tak jsem to ještě jednou zmodifikoval:

<?php 
$soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE);

if(!isset($_GET["strana"]))
 {$_GET["strana"]=0;} 
echo "<img src=\"".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";
if(($_GET["strana"])!=0)
 {echo "<a href=\"index.php?strana=".($_GET["strana"]-1)."\"> zpet</a><br>";}
if(count($soubor)>($_GET["strana"]+1)) 
 {echo "<a href=\"index.php?strana=".($_GET["strana"]+1)."\"> dalsi</a><br>";}
?>

Ovšem toto mi příjde lepší než opendir a readdir. (glob toto řeší za tebe a ještě filtruje)

Asi máš pravdu, ale tazatel:

ale já bych raději proštudoval ,,můj,, kód

Tak jsem rozepisoval ten starý kód, abych ho nepletl zase něčím jiným, a aby pochopil jak číst (jakékoliv) chybové hlášení a věděl, kde tam byla chyba.
(

ERROR

)

tu mou verzi jsem neměl odzkoušenou na 100%...

Mimochodem jsem tam zapomněl v tom svém (tazatele) kódu nakonec napsat ještě příkaz closedir :-[.

I když by teď měl být kód vyladěn, tvojí zásluhou, tak praxi zase nebude (teoreticky) fungovat, když uživatel použije třeba v názvu obrázku diakritiku, mezery, malá a velká písmena, a kdo ví co ještě. A zase je třeba to modifikovat (nebo zbuzerovat uživatele :-D).

když by teď měl být kód vyladěn, tvojí zásluhou, tak praxi zase nebude (teoreticky) fungovat, když uživatel použije třeba v názvu obrázku diakritiku, mezery, malá a velká písmena, a kdo ví co ještě. A zase je třeba to modifikovat (nebo zbuzerovat uživatele ).

Aby se toto ošetřilo (neberu jen diakritiku), tak je to otázka na mnohem více času a řádků než tu je ;). Osobně diakritiku a všechny znaky odstraňuju při nahrávání na web, takže při výpisu nemusím nic kontrolovat ani nic řešit. Prostě jen vypíšu

Již to není sice aktuální a už to mám celkem upravené, ale např.
v9pumnHS

Již to není sice aktuální a už to mám celkem upravené, ale např.
v9pumnHS

Přesně víš o čem mluvím. Tenkrát, když jsem zplodil ten kód, tak jsem chtěl, aby to bylo co nejjednodušší na pochopení (a plně funkční po všech stránkách, což je celkem velký protiklad).

Osobně diakritiku a všechny znaky odstraňuju při nahrávání na web

Škoda, že tak to nedělá i zákazník.

Dělal jsem takový malý jednoduchý webík (nějaký obrázky texty, nic spešl) pro zákazníka, který už měl doménu a všechny náležitosti (kromě zdrojového kódu). Zákazník mi poskytl potřebné přistupovací údaje a já to vytvořil k jeho obrazu. Po pár měsících mi píše, že jsem mu to udělal špatně, a že mu to nefunguje. Neměl jsem páru o tom, že zákazník bude zkoumat můj jednoduchý zdrojový kód a pochopí ho natolik, aby dokázal tam změnit nějaké ty cesty. Cesty napsal správně, to mu nemohu křivdit, ale ta diakritika v nich můj systém zhroutila. Přitom tam stačilo jenom zakomponovat kódovaní řetězců do URL adres. Říkal mi, že dělal aktualizaci webu a třeba soubor "logo.jpg" přejmenoval (přes FTP) z důvodu, aby jeho nové jméno vystihovalo více jeho smysl na "Logo stránky.JPG".

To jen na vysvětlení na co jsem narazil.

Hoši, děkuji, ještě bych měl prosbu, při zkoumání kódu

<?php
$slozka="SOUBOR";
$adresar=opendir($slozka);
while($objekt=readdir($adresar))
{
if($objekt=="."||$objekt==".."||$objekt=="index.php")continue;
$soubor[]=$objekt;
}
if(!isset($_GET["strana"]))
{$_GET["strana"]=0;} 
echo "<img src=\"".$slozka."/".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";
if(($_GET["strana"])!=0)
{echo "<a href=\"index.php?strana=".($_GET["strana"]-1)."\"> zpet</a><br>";}
if(count($soubor)>($_GET["strana"]+1)) 
{echo "<a href=\"index.php?strana=".($_GET["strana"]+1)."\"> dalsi</a><br>";}
?>

která z prom. je název aktuálního obrázku??

využij toto

<?php 
$soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE);

if(!isset($_GET["strana"]))
 {$_GET["strana"]=0;} 
echo "<img src=\"".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";
if(($_GET["strana"])!=0)
 {echo "<a href=\"index.php?strana=".($_GET["strana"]-1)."\"> zpet</a><br>";}
if(count($soubor)>($_GET["strana"]+1)) 
 {echo "<a href=\"index.php?strana=".($_GET["strana"]+1)."\"> dalsi</a><br>";}
?>

namísto

<?php 
$soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE);

if(!isset($_GET["strana"]))
 {$_GET["strana"]=0;} 
echo "<img src=\"".$soubor[$_GET["strana"]]."\" border=\"0\"><br>";
if(($_GET["strana"])!=0)
 {echo "<a href=\"index.php?strana=".($_GET["strana"]-1)."\"> zpet</a><br>";}
if(count($soubor)>($_GET["strana"]+1)) 
 {echo "<a href=\"index.php?strana=".($_GET["strana"]+1)."\"> dalsi</a><br>";}
?>

dej jen

<?php 
$soubor = glob('soubory/*.{jpg,jpeg,png,gif,JPG,JPEG,PNG,GIF}',GLOB_BRACE);
echo "<pre>";
var_dump($soubor);
echo "</pre>";
?>

a pošli sem výsledek

Zpět do poradny Odpovědět na původní otázku Nahoru