PHP - galerie obrazku ... uz nevim jak dal, poradi mi nekdo?

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod malysvelkym 26. 10. 2016 08:21

Dobry den, snazim se vytvorit guildovni stranky pro nasi guildu ve hre World of warcraft. Jsem absolutni amater takze vzdy hledam nejake reseni na internetu a to pak zkopiruju, upravim a pouziju. Zde na foru jsem nasel uzasny php kod pro galerii( zde : viewtopic.php?mode=like&f=922&p=4141512#p4141512 ). Vse funguje presne podle mojich predstav az na jeden zasadni problem. PHP mi nacte obrazky v adresari ktere rozdeli do tabulek na jednotlive stranky ovsem ukaze se jen prvni stranka a na dalsi stranky nejde navigovat. Pokud by zde byl nekdo ochotny podivat se na to a poradit mi co s tim, tak bych byl moc rad. A kdyby jste se obcas nudili, prijdte si s nama zabojovat :-). Takze kod ktery zpracuje obrazky:

Kód: Vybrat vše
<?
Function ZobrazGalerii($cesta, $nahled, $strana = 1, $sirka_tabulky = "100%", $pocetH = 3, $pocetV = 4)
{
$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=\"$sirka_tabulky\" border=0 >\n<tr>\n";
$sloupec = 0;$radka = 1;
$sirka = Floor(100 / $pocetH); // procentualni sirka jednoho sloupce
$obrazek_cislo = ($strana - 1) * $pocetH * $pocetV; // ktery obrazek bude prvni
while ($obrazek = $soubor[$obrazek_cislo]) { // opakuj dokud nevycerpame vsechny obrazky
$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%\" align=center valign=top>";
echo "<a href=\"$cesta/$obrazek\">";
echo "<img  src=\"$cesta/$obrazek\" width=70%></a><br>";
echo "Jméno:$obrazek";
echo "</td>\n";
$obrazek_cislo++;
}
echo "</tr><tr><td colspan=$pocetH align=center>\n";
$pocet_stran = Ceil( Count($soubor) / ($pocetH * $pocetV) ); // spocitame pocet stran galerie
for ($i=1; $i<=$pocet_stran; $i++) { // cyklus pro zobrazeni navigacni listy
if ($i!=$strana) {
echo "<a href=?strana=$i>$i</a> | ";
} else {
echo "$i | ";
}
}
echo "</td></tr></table>\n";
}
?>


tento kod volam metodou:
Kód: Vybrat vše
<?
include "funkce.php"; // nacteme knihovnu s funkci
if (!isset($strana)) $strana = 1;
ZobrazGalerii("obrazky","nahledy",$strana); // zobrazi galerii
?>



bohuzel nevim jak udelat aby navigace na na dalsi vygenerovane stranky byla funkcni ...nase stranky jsou na adrese : http://czskcompany.clanweb.eu ... tak se podivejte a pokud budete mit nejake rady budu jen rad.

pokud jste dosli az sem tak Vam dekuji za trpelivost a vazim si Vasi snahy pomoct .. Mejte se skvele ...
malysvelkym
Kolemjdoucí

Odeslat příspěvekod karlos00x 26. 10. 2016 08:49

vybodni se na tohle patlani. nema to cenu. nahod si tam nejaky CMSko. ten kod je bullshit kterej normalni phpkar tezko precte.
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Odeslat příspěvekod Pavel Černík 26. 10. 2016 09:11

Predpokladam ze ten kdo tenhle hnus spatlal mel zapnute "register_globals", coz je bezpecnostni dira jak vrata.
Staci zmenit
Kód: Vybrat vše
if (!isset($strana)) $strana = 1;

napriklad na
Kód: Vybrat vše
$strana = (int) $_GET['strana'] > 0 ? (int) $_GET['strana'] : 1;

Nicmene pokud jsi na tohle sam neprisel (i kdybych o PHP nic nevedel tak to vygooglim za par minut), durazne doporucuju se temto experimentum vyhnout. Kdyz takhle na webu vytvoris bezpecnostni diru, tak vam kdokoliv muze web hacknout a teoreticky pres ten web ohrozit i pocitace tvych kamaradu, kteri webu duveruji.
Druha vec je, nepouzivat kod, kteremu clovek nerozumi. Ale to se vetsinou lidi nauci az pote co na linuxovem serveru napisou "rm -rf"
Pavel Černík
Junior

Odeslat příspěvekod remet 26. 10. 2016 09:56

Hnus. Chapu, ze nejsi programator, ale takhle to nema vypadat a to ti rozhodne nenutim OOP (prakticky cokoli lze kupodivu udelat i bez objektu) ani CMS (WP i Joomla jsou mozna jeste deraversi nez tenhle tvuj pokus).
Vykasli se na to driv, nez napachas nejake skody. Jestli na to mas, tak delej staticke stranky a na programovani si nekoho sezen (slib mu penize nebo neco jineho).
Linux? Nein, danke.
remet
Junior

Odeslat příspěvekod malysvelkym 26. 10. 2016 10:24

To: PAVEL CERNIK:
Pavle tve reseni funguje ... dekuji moc, nicmene jsi mne vystrasil tim ze bych mohl nejakym zpusobem ohrozit bezpecnost mojich kolegu z guildy, kteri strance duveruji. Zadne citlive data na strankach neukladam. Myslet si ze nase stranky jsou pro hackery nezajimave je ale hloupost .... tak ted nevim ... chci vyrobit stranky pro guildu .... coz znamena nechci do stranky investovat penize a platit programatory kteri to za mne udelaji, a protoze se diky tomuto projektu i ucim ( o kazde radce kodu premyslim a hledam informace, a neco si i zapamatuju :-) ) je to pro mne cenna prilezitost ... Staticke stranky jsou fain ale nejsou vhodne pro guildovni stranky. Tak ted jsem trochu rozhozenej ... zatim to tak necham a prectu si vice obezpecnosti PHP ...

jinak opravdu dekuji za reseni :tleskani ... mejte krasny den!
malysvelkym
Kolemjdoucí

Odeslat příspěvekod karlos00x 26. 10. 2016 10:36

Nejde jen o osobni data. Jde primarne o to, ze kdyz tam das nejakou bezpecnostni diru tak
1) utocnik to pouzije k rozesilani spamu. to nemaji hostingy vubec rady...
2) da tam treba nejakou breberku v podobe JS/iframe a to zase nemaji radi tvy kamaradi - a tady uz muze dojit treba i k ohrozeni jejich osobnich dat(treba kdyz tam budou mit stejny login/pass jako jinam a utocnik si bude posilat sobe vsechny odeslane formulare prihlaseni) nebo dokonce i penez.

Tohle co patlas si na Drupalu postavis za vikend kdyz se budes snazit - a pokud tam nebudes patlat vlastni PHP tak to bude i bezpecne. Souhlas s kolegou ohledne deravosti Joomla a WP (jadro maji celkem ok, ale jejich moduly to je na pos.ani)
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Odeslat příspěvekod malysvelkym 28. 10. 2016 08:05

Dekuji vsem za vysvetleni bezpecnostnich rizik, urcite to nebudu podcennovat a slibuji ze se tim budu nyni zabyvat. Nicmene bych se rad vratil k tomu prikladu ktery je uveden nahore a rad bych ho pochopil, protoze jak jsem Vam naznacil, snazim se PHP i naucit. ( Doufam ze jednou budu tak dobrej jak vy :-);). Script mi rozdeli obsah adresare na vic stranek, na ktere mam i scriptem vytvoreny odkaz ... cemu nerozumim je to kde ty stranky vlastne jsou, na serveru mi nevzniknou zadne soubory strana2, strana3 ... atd. Znamena to ze ty stranky ma server nekde ulozeny v pameti ?? A server je pak dokaze dynamicky vlozit do stranky?? neco jako window.document.GetElementById[].innerHTML ????
malysvelkym
Kolemjdoucí

Odeslat příspěvekod karlos00x 28. 10. 2016 08:19

Zakladem je, ze tam michas php a html takze se ten kod neda precist. Pouzivas tam spatne nazvy funkci jako Ceil (spravne ma byt ceil), pouzivas tam \n (imho je lepsi PHP_EOL) atd.

Evidentne nechapes vubec princip fungovani PHP jako skriptovaciho jazyka. On zadne stranky na serveru nevytvari, on ten vystup posle klientovi a tim to konci. podivej treba sem: http://www.linuxsoft.cz/article.php?id_article=172

Dneska ty mlady jsou strasne pohodlny a liny neco se naucit aspon trochu teoreticky nez jdou do boje a pak to hned vzdavaji a chodi pro rady.
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Odeslat příspěvekod malysvelkym 28. 10. 2016 09:11

To Karlos00x : Dekuji za rychlou a vycerpavajici odpoved. Troufnu si trochu nesouhlasit s vyrokem:
Dneska ty mlady jsou strasne pohodlny a liny neco se naucit aspon trochu teoreticky nez jdou do boje a pak to hned vzdavaji a chodi pro rady.
Nejsem liny a nic NEVZDAVAM. Jsem jen samouk, HTML jsem se uz naucil (take jako samouk) a ted jsem se rozhodl postoupit dal. HTML jsem se take ucil za behu a sel jsem do boje bez zakladu. Je to asi pro mne samotneho nejlepsi zpusob jek se ucit. Az v boji ... A ze tam budu mit spoustu chyb je jasne, tema chybama se ucim. Na PHP_EOL se urcite podivam. Hlavne ti chci podekovat za ten odkaz ... Uz mam stahnuty cely serial a asi se tu uz nebudu na nic ptat dokud si to neprojedu. Velky dik ;-] . BTW uz vubec si o sobe nemyslim ze jsem mlady ... uz 44x jsem slysel zpivat kosa na jare ... Tak damy a panove preji krasny den ...

Karlos vim ze urcite mas svojich starosti dost a nechces se zabyvat hloupostma ... presto za zkousku nic nedam, pokud by jsi mi ten kod prepsal do tvaru jak by to melo byt byl bych ti zavazany .. a pro mne jako studenta by to bylo velmi poucne ... chci se ucit
malysvelkym
Kolemjdoucí

Odeslat příspěvekod karlos00x 28. 10. 2016 12:12

Ono to neni tak jednoduche... Zaprve bys mel oddelit obsah(PHP) a formu(HTML). tzn v idealnim pripade pouzit nejaky sablonovaci system. V jedne funkci ci metode tridy natahnout vsechny obrazky ktere chces pouzit (na to, ale zase pouzijes nejakou jinou tridu ktera se ti stara o pager) a to pak jen prozenes nejakym template systemem (treba twig).

A mozna to beru moc zvostra, ale ja vubec nevim takhle z hlavy jak bych to napsal ciste v php. Taky vim, ze bych fotogalerii nestavel nad filesystem, ale mel to v DB. Urcite nepotrebujes resit pocet sloupcu - davat to do tabulky je tak na odstrel - tabulky jsou urcene na tabulkove data. Tady je to o layoutu - co fotka tak <div>. No a v mem pripade bych tomu pro udelani sloupcu bouchnul tridy "col-lg-3 col-md-4 col-sm-6 col-xs-12" - za domaci ukol si zjisti odkud ty tridy pochazi.

Pises, ze jsi nasel uzasny kod tady na foru, ale ten kod nebyl uzasny ani v dobe sveho vzniku pred 11 lety. In fact uz v te dobe byl naprosto hrozny.

Cisty PHP, stejne jako kazdy jiny "cisty" jazyk nema (dle meho nazoru) smysl. Nema smysl dokola porad objevovat kolo. Mrkni na Drupal, pro zacatek si tam vsechno naklikas, do budoucna budes moct pachat i PHP. Vyhnes se tim hlavne bezpecnostnim problemum. Poznas Composer, poznas casem treba Symfony, Twig apod. Na youtubu je asi bambiliarda navodu pro zacatecniky.

Bejt samouk je hezky, ale taky je potreba to delat rozumne - existuje bambiliarda rozumnych (video)tutorialu z nich je cast i zadarmo, spousta za par kacek. Je dobry byt samouk, ale je vyhodny mit u toho vedeni spravny smerem.
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Odeslat příspěvekod suk 31. 10. 2016 13:41

karlos00x: trosku bych nesouhlasil s tim, ze "Cisty PHP ... nema ... smysl .... mrkni na frameworky.... naklikas...".

Pokud clovek ma zajem se danou veci zabyvat, je dobry poznat nejdriv to, co je "vespod" a "objevit kolo". Osobne si myslim, ze vlastnorucni implementace knihovnich funkci mi dala lecos do zivota :)

Prasarny tohoto stylu jsme tu psali vsichni ve vsech jazycich a ti co meli dostatek sebereflexe dnes uz pisou lepsi kod a nadavaji ostatnim, ze pisou prasarny :D

Na druhou stranu, pokud malysvelkym chce napsat jeden web pro partu pratel a dal se tim nezabyvat, nema vyznam resit, co je PHP na vyssi urovni, nez je konfigurace cms a webserveru.
Pokud nesouhlasíte s mým názorem, popřemýšlejte sami nad sebou. Opravdu si myslíte, že já bych se mohl mýlit?
----
You are an inspiration for a birth control...
suk
Mírně pokročilý
Uživatelský avatar

Odeslat příspěvekod malysvelkym 1. 11. 2016 08:07

Suk ... ty mi mluvis ze srdce ... chci se nadale venovat tvorbe webu ... a chci se ucit z chyb a potrebuju objevovat znova kolo abych pochopil podstatu, abych si to osahal ...
malysvelkym
Kolemjdoucí

Odeslat příspěvekod karlos00x 1. 11. 2016 09:44

Jenze na to jdes ze spatne strany. Chces resit php a pritom neumis napsat ani pitomy html a css? Tabulkovy layout byl moderna, ale v minulym tisicileti.

Ucit se z chyb je debilita ktera se traduje v tyhle zemi a pritom jenom tahne cloveka ke dnu. Radsi se uc od tech dobrych prikladu - idealne od mistru sveho remesla.
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Odeslat příspěvekod gandor 1. 11. 2016 14:09

Nesuhlasim s Karlos00x.
Poznat principi veci = spodok je potrebne. Je to jeden z dovodov, preco sa na skolach uci assembler. Jeden velmi ilustraticny priklad (aj ked konkretne toto je uz znacne prekonane, lebo compilery to optimalizuju, resp. sa pouzivaju foreach/map/reduce funkcie):
Kód: Vybrat vše
for($i=0;$i<count($dlhyArray);$i++){}

Kód: Vybrat vše
for($i=0,$length=count($dlhyArray);$i<$length;$i++){}

Preco by ktokolvek pisal ten druhy sposob? No lebo videl assembler a chape zlozitost O(n) oproti O(n^2) (z hladiska pristupu ku kazdemu prvku pola)...

Frameworky vs "ciste PHP" je na tom obdobne.

A este jedna vec - frameworky sa menia omnoho rychlejsie ako jazyk - to znamena vedomost PHP ako jazyka je omnoho dlhsie uzitocna informacia ako vedomost frameworku.

Co je ale pravda, ze ak mam byt realne uzitocny a musim si tvrdo vybrat len medzi znalost FW oproti znalosti cisteho PHP, tak beriem znalost FW. Lebo s nim som produktivnejsi, robim menej chyb a menej nebezpecny kod...
gandor
Mírně pokročilý

Odeslat příspěvekod karlos00x 1. 11. 2016 14:41

Kdyz vubec cichne k jakemukoliv FW tak tam samozrejme pozna i obecne vlastnosti jazyka. Jako bonus si usetri treba takove sql injection ktere je u novacku velmi oblibene, zjisti treba jak se dnes zpravidla pracuje s ukladanim hesel, pozna zaklady navrhovych vzoru (k tomu idealne knihu), pozna existenci neceho jako je oddeleni obsahu od formy...

Podivej se nahoru na ten kod - tam je spatne uplne vsechno. Mota to algoritmus s html, neni to schopne ani produkovat validni html, neni to schopne produkovat spravne url adresy do odkazu, jsou tam nazvy funkci s prvnim pismenem velkym atd. Nez tohle tak radsi nic! Tohle neni ukazka kodu ze ktereho by si nekdo mohl vzit neco dobreho.
Upgrade který má smysl: SSD. Zažijete svižný počítač.
karlos00x
Pokročilý

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků