[ Boyka @ 14.09.2012. 13:05 ] @
Počeo sam da pravim neki web sajt za upload slika, i skoro da završavam samo imam mali problem...

Kada korisnik izabere sliku i pritisne upload ona treba da ode u bazu i očita se ponovo iz baze u browseru, e sada je problem taj što mi izabrana slika ne daje celu putanju, pa da bih mogao da je uzmem iz baze, nego daje samo ime slike, a meni treba cela putanja da bih je prikazao u "<img src=".putanja...

I treba mi savet:
Da li je bolje slati putanju slike u MEDIUMBLOB ili VARCHAR?
[ Predrag Supurovic @ 14.09.2012. 13:27 ] @
Ako sliku drzis u bazi, onda moras da je izvuces iz baze, snimis u neku privremenu datoteku i u HTML stavis link do te datoteke. Medjutim, to je vrlo losa praksa.

U bazi treba da drzis samo id slike (ime datoteke ili sta vec) ili eventualno i putanju zajedno sa imenom datoteke u koju si prethodno snimio sliku. VARCHAR je za to sasvim dobar.
[ plague @ 14.09.2012. 13:47 ] @
Pa ti dodaj rucno ostatak putanje ako je on konstantan.
Kada formiras <img> element napisi "<img src='./images/KojaGodPutanja/{$red_iz_baze['PictureName']}'/>";
[ Boyka @ 14.09.2012. 13:54 ] @
Citat:
Predrag Supurovic:
Ako sliku drzis u bazi, onda moras da je izvuces iz baze, snimis u neku privremenu datoteku i u HTML stavis link do te datoteke. Medjutim, to je vrlo losa praksa.

U bazi treba da drzis samo id slike (ime datoteke ili sta vec) ili eventualno i putanju zajedno sa imenom datoteke u koju si prethodno snimio sliku. VARCHAR je za to sasvim dobar.


Znači preko VARCHAR-a, ok...

Samo mi napiši ako nije problem kako da izvučem putanju selektovanog fajla koji neko selektuje?

Pokušao sam
Code (php):

$ime = $_FILES['file']['name'];
 

ali varijabla $ime logicno izbacuje samo naziv selektovanog fajla, a ne celu putanju jer je druga vrednost [name], je l' postoji nesto kao [path] ili slicno?
[ Boyka @ 14.09.2012. 14:01 ] @
Citat:
plague:
Pa ti dodaj rucno ostatak putanje ako je on konstantan.
Kada formiras <img> element napisi "<img src='./images/KojaGodPutanja/{$red_iz_baze['PictureName']}'/>";


Znam to nije problem, problem je kako naci korisnikovu putanju da bi je prosledio u bazu..

iz baze znam kako cu :)
[ plague @ 14.09.2012. 14:14 ] @
Nisam te razumeo. Kada korisnik uploaduje sliku, ona dobija privremeno ime kome pristupas sa: $_FILES["file"]["tmp_name"]
Koristi to ime da je fizicki snimis negde na serveru preko: move_uploaded_file($_FILES["file"]["tmp_name"], "./images/KojaGodPutanja/" . $_FILES["file"]["name"]);
[ Predrag Supurovic @ 14.09.2012. 14:20 ] @
Zvučiš kao da nisi pročitao ama baš ništa od gomile tutorijala na temu uploada datoteka.

Kada korsinik uploaduje datoteku ona postoji samo privremeno. Podaci u $_FILES ti daju osnovne inforamcije o toj datoteci ali da bi ona zaista bila sačuvana negde da je kasnije korsitiš moraš je ti sam premestitti funkcijom move_uploaded_file(). kada je premestiš tada ćeš i znati gde si je premestio to jest putanju do datoteke, pa to sačuvaj.



[ Boyka @ 14.09.2012. 14:34 ] @
Mislim da me ne razumete...

koristio sam move_uploaded_file();
i slika se sacuva na odredjenoj lokaciji, ali ja ne bih da mi korisnikova slika ide u neki moj folder, nego samo njena putanja koja ide u bazu, i kasnije izvlacim tu putanju u img src..

evo grubog koda, kojeg jos nisam ni debugovao..
Code (php):

<form action="upload.php" method="POST" enctype="multipart/form-data">
Naziv sajta:<input type="text" name="ime_sajta">
<p></p>
URL:<input type="text" name="url">
<p></p>
Kategorija:<select name="kategorija">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
</select>
<p></p>
<input type="file" name="file"><br><br>
<input type="submit" name="btn" value="Upload">
</form>

<?php
$host_name = "localhost:****";
$db_username = "*****";
$password = "******";
$db_name = "*****";

$ime_sajta = htmlentities($_POST['ime_sajta'], ENT_QUOTES, "UTF-8");
$url = htmlentities($_POST['url'], ENT_QUOTES, "UTF-8");
$kategorija = htmlentities($_POST['kategorija'], ENT_QUOTES, "UTF-8");
$logo_sajta = htmlentities($_POST['file'], ENT_QUOTES, "UTF-8");

$ime = $_FILES['file']['name'];
//$velicina = $_FILES['file']['size'];
$tmp_name = $_FILES['file']['tmp_name'];

if(isset($_POST['btn'])){
$extension = strtolower(substr($ime, strpos($ime, '.') + 1));
$kon = mysql_connect($host_name,$db_username,$password) or die(mysql_error);
mysql_select_db($db_name) or die(mysql_error);
     if(!empty($ime_sajta) || !empty($url) || !empty($kategorija) || !empty($logo_sajta) && $extension == 'png' || $extension == 'gif')
     {
          if(move_uploaded_file($tmp_name, $ime))
          {
               mysql_query("insert into sajtovi(ime_sajta, url_sajta, logo_sajta) values('" . $ime_sajta . "','" . $url_sajta . "','" . $kategorija . "','" . $logo_sajta . "')") or die('podaci nisu uneseni u bazu!');
               $result = mysql_query("select logo_sajta from sajtovi where ime_sajta=".$ime_sajta.'')
               while($rows = mysql_fetch_array($result)
               {
               echo 'Podaci su uspesno uneseni u bazu.';
               echo '<img src='.$rows['logo_sajta'].'/>';
               echo '<p>'.$rows['ime_sajta'].'</p>';
               }
          }
          else
          {
               echo 'there is some error';
          }
     }
     else if($extension!='png' || $extension!='gif')
     {
          echo 'Logo moze biti samo u PNG ili GIF formatu';
     }
     else
     {
          echo 'Izaberite logo...';
     }
}
?>
 
[ plague @ 14.09.2012. 14:47 ] @
Tek sada te nista ne razumem. Da li ti hoces da korisnik sacuva sliku (kao npr na forum sto uploadujes avatar) ili hoces da korisnik ima sliku koja je negde na drugom serveru(da cuvas URL do slike)?

Ako hoces da korisnik napise URL, ne znam zasto si onda uopste dovlacio sam file(sliku) ako vec neces da je sacuvas kod sebe, nego preuzimas sa drugog mesta?
[ plus_minus @ 14.09.2012. 14:57 ] @
Čuvaš slike u posebnom direktorijumu koji može da bude na dohvat ruke bilo kome. Dakle, neki front-end direktorijum koji je vidljiv iz -view html source-. Slike koje su vezane za bilo šta iz baze, čuvaš u pod direktorijumu, ili drugoj lokaciji, front-end. Za ime slike daš lepo naziv $timestamp.'-'.$db['imgID'].'.jpg'; a $timestamp i $db['imgID'] - to čuvaš u bazi. I posle kroz petlju ili kako god.. praviš 'match' za name i ispisuješ.. Ne moraš timestamp, već bilo šta što će načiniti sliku unikatnom, možda je samo imgID dovoljan? Tvoja stvar da odlučiš. Za sve hotlinkere, kasnije, ukoliko bude problema, imaš lagana rešenja pomoću .htaccess-a.

Da bi dobio direktorijum za front-end tako da polazna tačka uvek bude kroz server path, a da to bude funkcionalno i logično, da se ne vidi u pretraživaču, možda ti ovo može pomoći? http://www.elitesecurity.org/p3143642

I zašto koristiš while petlje.. ? While i do/while .. sporo.

[Ovu poruku je menjao plus_minus dana 14.09.2012. u 16:15 GMT+1]
[ Boyka @ 14.09.2012. 15:31 ] @
Citat:
plague:
Tek sada te nista ne razumem. Da li ti hoces da korisnik sacuva sliku (kao npr na forum sto uploadujes avatar) ili hoces da korisnik ima sliku koja je negde na drugom serveru(da cuvas URL do slike)?

Ako hoces da korisnik napise URL, ne znam zasto si onda uopste dovlacio sam file(sliku) ako vec neces da je sacuvas kod sebe, nego preuzimas sa drugog mesta?


Pazi radi se o sajtu koji promovise druge sajtove, dakle stavlja njihov logo i promoviše ih...

Korisnik mora da se registruje i uloguje da bi pristupao upload delu, u upload delu korisnik stavlja ime sajta, url sajta, SLIKU sajta i kategoriju sajta...

E sada kada se potvrdi submit svi podaci, zajedno sa korisnikovom putanjom idu u bazu

kada sam ovo napisao shvatio sam grešku :S ja sam server ne moguće je da mi nečija putanja stigne a da se posle prikaže :O

znači moralo bi da se svaka slika čuva u jednom direktorijumu, a ne bazi? :O
sad sam zbunjen..
[ plus_minus @ 14.09.2012. 15:35 ] @
Ne sekiraj se..
I mi smo.

Citat:
kada sam ovo napisao shvatio sam grešku :S ja sam server ne moguće je da mi nečija putanja stigne a da se posle prikaže :O


Moraš da budeš razgovetan ukoliko hoćeš da ti neko pomogne. Shvati.
[ Boyka @ 14.09.2012. 15:47 ] @
Citat:
plague:
Pa ti dodaj rucno ostatak putanje ako je on konstantan.
Kada formiras <img> element napisi "<img src='./images/KojaGodPutanja/{$red_iz_baze['PictureName']}'/>";


Pročitao opet ovo i skontao...

dakle da sumiramo, vi me ispravite ako grešim

u bazu šaljem samo ime slike....
sliku šaljem recimo u wamp/www/sajt/slike

posle pokazujem tu sliku ovako:

echo "<img src=/sajt/slike/ . '" red_iz_baze['kolona_iz_baze'] . '"/>";

?
[ plus_minus @ 14.09.2012. 15:48 ] @
Tako je. Tako nekako. :)
[ Boyka @ 14.09.2012. 15:52 ] @
Citat:
plus_minus:

I zašto koristiš while petlje.. ? While i do/while .. sporo.

[Ovu poruku je menjao plus_minus dana 14.09.2012. u 16:15 GMT+1]


Da stavim for?

[ plague @ 14.09.2012. 15:57 ] @
Ovako, <img> preko src atributa pristupa lokaciji sa koje uzima sliku. Ta lokacija moze biti udaljena i u tom slucaju koristis URL da bi prikazao sliku. Ako nije udaljena najcesce se koristi relativna putanja. Relativna putanja je putanja u odnosu na stranicu na kojoj slika treba da se prikaze.

Sliku mozes cuvati na vise nacina:
- U nekom folderu na serveru
- Direktno u bazi
- URL do udaljene slike

Prvi slucaj je najcesci. U tom slucaju u bazu cuvas lokaciju do slike. Mozes samo ime, pa posle da ti sam dodas ostatak putanje koji je fiksan, a mozes i veci deo relativne putanje. Kako god, tebi je bolje.

Drugi slucaj jeste moguc ali se redje koristi. Tada se slika bukvalno upise u polje tabele. Po meni je to bespotrebno komplikovanje i opterecivanje baze.

Treci, nema sta da se filozofira, samo ubacis URL u src. Neki serveri zabranjuju ovakav prikaz.

Edit zbog postova u medjuvremenu:

Ako se tebi stranica na kojoj prikazujes sliku nalazi u folderu "sajt", a slika nalazi u folderu "slike" koristi neku od sledecih putanja:
- src="slike/[ImeSlikeUzetoIzBaze]"
- src="./slike/[ImeSlikeUzetoIzBaze]"
[ plus_minus @ 14.09.2012. 15:57 ] @
@Boyka

Ako ti taj deo koda ne pravi greške i radi kako očekuješ i sa while do/while, ne moraš.
Dakle, putanje za uploadovane slike, isto kao i za sve relativne putanje u okviru html source koda. Kako linkuješ css, js, tako i slike. Uvek ili front-end/relative ili URL.