PDA

Prikaži potpunu verziju : Problem sa navigacijom u galeriji


mrakodol
21.4.2009, 19:45
Najprije da vam pokazem izglede tabela u bazi:

galerija_kategorije

Cid--Title----Viewed--Published
3----kuki08--1241----Da
6----proba---0-------Da
1----proba2--22------Da
2----proba3--3-------Da

galerija_slike

ImageID--Cid--Title-----Image------------Viewed---Published
27--------3---et-------1235158350.jpg---41--------Da
28--------3---werwer--1235158361.jpg---32--------Da
29--------3---05-------1233178092.jpg--143--------Da
30--------3---02-------1235158375.jpg---49--------Da
31--------3---125------1235158106.jpg---57--------Da
32--------3---1255-----1235158114.jpg---35--------Da
33--------3---05-------1235158387.jpg---67--------Da
34--------4---tata------1237114596.jpg---31--------Da
35--------3---1540-----1237379815.jpg---18--------Da
36--------4---tata1-----1237114497.jpg---1---------Da
37--------4---tata2-----1237114891.jpg---3-------- Da
38--------3---tata------1237124596.jpg---5---------Da


Galerija je zamisljena ovako:kada posjetilac dodje on dobije listu svih kategorija, a ako ih nema onda ispise da ih nema.Ako ima slika u kategoriji i korisnik je otvori prosljedjuje se Cid(broj kategorije) i ispisuju se male slike(sve slike iz te kategorije) u odredjenom obliku(u matrici 3x2 i zadane velicine slika) i poredane prema ImageID-u(ID slike u bazi).
Kada korisnik klikne na neku od malih slika pojavi se velika slika (odredjene velicine, ali vece nego one male) i linkovi za sledecu i predhodnu sliku iz te kategorije slika, ispise postojece komentare za tu sliku i ako je logovan pojavi se dio za komentar na sliku, a ako nije nista.

E sada me zanima,posto nikako da podesim da mi radi da prelazim na sledecu i prethodnu sliku kada se nalzim na velikim slikama. Pa me zanima "code" kojeg da ubacim da prelazim na sledecu i prethodnu sliku iz iste kategorije, jer ja sam isao da uzmem ImageID(ID odabrane slike) i njega uvecam za 1 odnosno smanjim za 1 da dobijem prethodnu odnosno sledecu sliku. I takav nacin radi dok su slike postavljene redom po kategorijama, ali cim se nadje situacija kao ova iznad ovo ne radi, jer ne znam kako da odredim kada i koliko da preskoci pa da skoci na prethodnu ili da koliko se vrati da bi dosao na prethodnu sliku u istoj kategoriji. :n-cc2:
Ako mozete i zante pomozite mi.Hvala
P.S.Crtice sam koristio samo da bih izgled tabela sto vise licilo tabeli...

holodoc
21.4.2009, 19:59
Malo koda ne bi škodilo :) Šta si koristio? Neki gotov skript? Liči na Lightbox? Jel tebi ovako nešto treba? Lightbox 2 (http://www.lokeshdhakar.com/projects/lightbox2/)

Pitam za gotovo rešenje jer ne vidim ni jednu liniju gotovog koda pa da prodiskutujemo :)

mrakodol
21.4.2009, 20:27
Malo koda ne bi škodilo :) Šta si koristio? Neki gotov skript? Liči na Lightbox? Jel tebi ovako nešto treba? Lightbox 2 (http://www.lokeshdhakar.com/projects/lightbox2/)

Pitam za gotovo rešenje jer ne vidim ni jednu liniju gotovog koda pa da prodiskutujemo :)
Slobodno trazi koji dio koda te zanima...a on je i online na adresi:
www.mrakodol.info/coolweb/galerija2.php (http://www.sk.rs/forum/www.mrakodol.info/coolweb/galerija2.php)
pa mozda shvatis sta mi treba i kako to sve radi...ako ne pojasnicu ti...nisam koristio gotov skript vec se patim da napravim svoj...pa mi je jos to ostalo...e, da koristim PHP.

holodoc
21.4.2009, 21:20
Pogledao sam ovaj tvoj sajt i iskreno rečeno iznenadio sam se kada sam naišao na ručno sklepan sajt umesto nekog Džumla šita na koji obično nalećem :) Iskreno da ti kažem ne izgleda toliko loše ali moraš da poradiš na nekoliko jako bitnih stvari među kojima je sigurnost među prvima :)

Hoću reći da mi je trebalo dve sekunde da provalim kako sa ti oborim sajt zbog određenih stvai koje nisi uzeo u obzir kada si pisao kod. Prva najbitnija stvar je da si podložan SQL injekciji jer ti se podaci iz forme ne escape-uju. Potraži u svom PHP kodu deo u kome proveravaš korisnike iz baze.
Smem da se kladim da imaš deo koji liči na ovo:
mysql_query("SELECT * FROM users WHERE username={$_POST['uname']} AND password={$_POST['passwd']}");
Stvarni nazivi polja i tabela u bazi se verovatno razlikuju ali taj oblik garantovano koristiš i on je loš jer ne čistiš unose od potencijalno štetnih unosa kroz polja za korisničko i lozinku.
Zapamti jedno bitno pravilo...Nijedan podatak iz forme ne smeš direktno da uključiš u upit pre nego što ga proveriš na ispravnost. Postoji jedna dobra fora za prvu proveru ispravnosti. Kucaš korisničko hi' (apostrof na kraju) i there za lozinku. Ako dobiješ odgovor kako se MySQL buni pečen si :D Iskusnom hakeru je potrebno ravno 2 sekunde da te ubogalji :)

Elem... Pre nego što proslediš kod u bazu potrebno je da kod malo središ. Recimo kao u kodu dole.
<?php
function cleanPOST() {
global $conn;

if(get_magic_quotes_gpc){
$_POST = array_map('stripslashes', $_POST);
}
$sql = "SELECT * FROM users WHERE username='".mysql_real_escape_string($_POST['uname'])."' AND password='".mysql_real_escape_string($_POST['passwd'])."' LIMIT 1";
}

$conn = @mysql_connect("localhost", "username", "password") or die('Konekcija sa bazom neuspesna');
@mysql_selectdb('users', $conn) or die('Zahtevana baza za selekciju ne postoji');
cleanPOST();
$result = @mysql_query($sql) or die('Upit neuspesan');
if(mysql_num_rows($result)){
/*
* ovde ide mehanizam za skladistenje podataka o logovanom korisniku
*/
} else {
/*
* ovde ide mehanizam kada korisnik nije logovan ili su podaci netacni
*/
}
?>
Kod je relativno sigurniji od tvog i obezbediće da te ne hakuju tako lako.
Što se tiče galerije moj predlog ti je zaista da ako nemaš nameru da implementiraš neku pretragu ili slično da iskoristiš običnu client-side galeriju kakava je recimo Lightbox gore. To je bar svuda običaj gde ne postoje zahtevi za pretragom i sl. Dobra strana Lightboxa je ta da kdo njega možeš da kreiraš gruep fotografija tako što na linkove dodaš rel atribut. Recimo ako hoćeš da grupišeš slike u kategoriji tata onda na sve slike na jednoj stranici lepo dodaš rel=lightbox[tata] i kod će posmatrati slike kao povezane.

mrakodol
22.4.2009, 9:25
Hvala ti "holodoc":tapsh: na savjetima ako uocis jos ponesto slobodno mi javi kao i koji kod i gdje mogu da primjenim da ga ne moze bas svaki "levat" srusiti...
Drago mi je da ti se svidja moj kodic mada znam da ima rupa u sigurnosti mnogo i da nisam mnogo vodio racuna o tome ali obratiti paznju na to.
Samo mi nije jasno kako moze da ga napadne i ubogalji ako mu baza kaze da nije nadjeno ime ili neodgovarajuca sifra?Molim te da mi to pojasnis,ako je tajna moze i mailom ili PP-om(mislim ako ne smije da se pise tako nesto na forumu).

A sto se tice galerije...
Znas, volio bih da kad sam sve ostalo naklepao da i ovo zavrsim...naravno ako je moguce...jer mi se ne svidja bas da moram svaku sliku posebno linkovati a i omogucio bih da logovani korisnici mogu da komentarisu slike iz galerije...naravnmo ako je moguce ovo sta trazim.
Evo ovako,kod mene sada prelazak na sledecu i prethodnu sliku ide se tako da se uzme ImageID(ID odabrane slike) i njoj se doda jedan za sledecu i oduzme 1 za prethodnu:

$imag=$_GET['imgid'];
$pred=$imag-1;
$sled=$imag+1;
nakon cega linkuje prethodnu i sledecu ako postoje ako ne nista:

$upit = "SELECT * FROM galerija_slike WHERE ImageID = '$pred' and Cid = '$_GET[id]' order by Cid asc ";
$upit2 = mysql_query($upit);
$min = mysql_fetch_array($upit2);

if($min!=0){
echo"<td width=\"20%\"><a href=".$_SERVER['PHP_SELF']."?mjesto=velike&id=".$_GET[id]."&imgid=".$pred."> <<- Prethodna</a></td>"; }
else{
echo"<td width=\"20%\"><a href=\"#\"> <<- Prethodna</a></td>"; }
echo"<td width=\"52%\"></td>";
if($sled<=$broj_slike){
echo"<td width=\"18%\"><a href=".$_SERVER['PHP_SELF']."?mjesto=velike&id=".$_GET[id]."&imgid=".$sled."> Sljedeca ->></a></td>";}
else{
echo"<td width=\"18%\"><a href=\"#\"> Sljedeca ->></a></td>";}
E sada mene zanima kako da ga ispravim i sta da uradim pa da linkovanje prethodne i sledece radi OK i kada se salju slike iz jedne kategorije pa iz druge, trece pa se ponovno vrati u prvu kategoriju...
A od pocetka to izgleda ovako:
Kada korisnik dodje na na galeriju,izlistaju mu se kategorije sortirane po Cid(kategorija ID).Kada odabere kategoriju prosledjuje se preko GET funkcije Cid i izlistaju se sve slike iz te kategorije.Nakon cega korisnik ako klikne na neku od slika ona se uveca, prosledjujuci Cid i ImageID(ID slike) i sada samo treba da mi se odradi kako da se korisnik moze da krece kroz slike pod uslovom da su slike poslane po razlicitim kategorijama...jer to mi ne radi, a ako su slike poslane redom od kategorije do kategorije(ne vraca se na kategoriju u koju su vec slane slike) tada radi OK navigacija.

Hvala jos jednom "holodoc" na truu i na kodu!I svima ostalim koji mi zele pomoci...:tapsh::alealeee:

EclipsE
22.4.2009, 14:37
pa po meni bolje je koristiti onaj lightbox ali ako hocesh na ovaj nachin bash, jedina ideja koja meni pada na pamet je sa 2 upita npr.

$imag = (int)$_GET['imgid'];
$cid = (int)$_GET['id'];
$prevq = mysql_query("SELECT * FROM galerija_slike WHERE ImageID < $imag AND Cid = $cid ORDER BY ImageID DESC LIMIT 1");
$nextq = mysql_query("SELECT * FROM galerija_slike WHERE ImageID > $imag AND Cid = $cid ORDER BY ImageID ASC LIMIT 1");

if (mysql_num_rows($prevq))
$preda = mysql_fetch_assoc($prevq);

if (mysql_num_rows($nextq))
$sleda = mysql_fetch_assoc($nextq);

$pred = $preda['ImageID'];
$sled = $sleda['ImageID'];

nadam se da nisam propustio neshto :D
u principu, za prethodnu trazish sliku koja ima manji ID od trenutne slike, redjash ih po ImageID da opadaju i ogranichish (LIMIT) samo 1 red, shto bi ti dakle vratilo 1 id pre trenutnog id-a
a za sledecu radish isto to samo shto trazish veci ID od trenutne slike, redjash ih da rastu i ogranichish samo 1 red
:ciao:

holodoc
22.4.2009, 14:40
Trenutno sam u gužvi ali čim nađem vremena pozabavićemo se ovom tematikom na malo efikasniji način :D Usput mrakodol razmisli jel ti hoćeš da ti se odmah prikaže recimo jedno desetak slika pa kad klikneš na njih da imaš prelaz sa slike na sliku ili hoćeš da se učitava jedna slika po stranici pa da imaš linkove "Prethodna" i "Sledeća" slika?

mrakodol
23.4.2009, 8:10
pa po meni bolje je koristiti onaj lightbox ali ako hocesh na ovaj nachin bash, jedina ideja koja meni pada na pamet je sa 2 upita npr.

$imag = (int)$_GET['imgid'];
$cid = (int)$_GET['id'];
$prevq = mysql_query("SELECT * FROM galerija_slike WHERE ImageID < $imag AND Cid = $cid ORDER BY ImageID DESC LIMIT 1");
$nextq = mysql_query("SELECT * FROM galerija_slike WHERE ImageID > $imag AND Cid = $cid ORDER BY ImageID ASC LIMIT 1");

if (mysql_num_rows($prevq))
$preda = mysql_fetch_assoc($prevq);

if (mysql_num_rows($nextq))
$sleda = mysql_fetch_assoc($nextq);

$pred = $preda['ImageID'];
$sled = $sleda['ImageID'];nadam se da nisam propustio neshto :D
u principu, za prethodnu trazish sliku koja ima manji ID od trenutne slike, redjash ih po ImageID da opadaju i ogranichish (LIMIT) samo 1 red, shto bi ti dakle vratilo 1 id pre trenutnog id-a
a za sledecu radish isto to samo shto trazish veci ID od trenutne slike, redjash ih da rastu i ogranichish samo 1 red
:ciao:
E bas to sam trazio i savrseno dobro radi!Hvala ti! :tapsh::tapsh::tapsh:

Trenutno sam u gužvi ali čim nađem vremena pozabavićemo se ovom tematikom na malo efikasniji način :D Usput mrakodol razmisli jel ti hoćeš da ti se odmah prikaže recimo jedno desetak slika pa kad klikneš na njih da imaš prelaz sa slike na sliku ili hoćeš da se učitava jedna slika po stranici pa da imaš linkove "Prethodna" i "Sledeća" slika?
Nema problema,opusteno!Ovaj problem je rijesen ali uvjek su dobro dosle nove ideje kao i pomoc oko sigurnosti...zato mi se slobodno javite sa prijedlozima ili eventualnim greskama...A ti holodoc slobodno se javi kada budes mogao, jer me bas zanima signost sajta kojeg pravim.

Hvala vam svima!:tapsh::tapsh::tapsh: