Prvi ste put ovdje? Pročitajte faq i registrirajte se.
x
  • Registracija
Dobrodošli, ovdje možete postavljati pitanja vezana za problematiku programiranja. Da bi postavili pitanje nije potrebna registracija :)

149 pitanja

181 odgovora

158 komentara

1,755 korisnika

Zadnje značke

Potvrđeni korisnik
TwilaBunning...
Potvrđeni korisnik
ElmoHodson3...
Potvrđeni korisnik
VanitaWoodd5...
Potvrđeni korisnik
RafaelaDurgi...
Potvrđeni korisnik
LenoreFelix4...

Unos datoteke u MySQL bazu podataka

+3 glasova

Pozdav!

Ovako, želim u bazu podataka dodati datoteku, nije bitno kojeg formata samo da je umetnem u već kreirani redak tablice. (znači trebam koristiti UPDATE)

Imam kreiranu tablicu koja se sastoji od 6 stupaca i zadnji stupac bi trebala biti xls datoteka.

Mene zanima kako to mogu napraviti? Gledam po netu i radim točno kak oni pišu, ali nikako da proradi.

Molim pomoć! Nekakav primjer koji sigurno radi i malo da se objasni...

Upit Stu 5, 2013 Luzer20 (38)  
ponovo označeno Stu 12, 2013 primjeri
   

Odgovor 1

+4 glasova

Obično spremiš samo naziv datoteke na serveru u bazu a kasnije izgeneriraš putanju/link.

Primjer:

  1. Korisnik upload-a xls datoteku.
  2. Pokupiš naziv datoteke, pretvoriš je u neko unikatno ime sa recimo md5() funkcijom.
  3. Ako je bitno da korisnik dobije i orginalni naziv datoteke spremiš i njega u bazu tako da imaš barem 2 kolone (jednu sa unikatnim imenom i jednu sa orginalnim imenom.
  4. Kasnije kod prikaza podataka prikažeš orginalno ime a link izgeneriraš koristeći unikatno ime.

PHP bi izgledao otprilike ovako:

Pod pretpostavkom da znaš kako napraviti upload datoteke ovom funkcijom ju preseliš u neki svoj direktorij:

$datoteka = $_FILES["file"]["name"];
$datoteka_za_spremit = md5($datoteka.date('Y-m-d H:i:s'));
move_uploaded_file($_FILES["file"]["tmp_name"],"spremljene_datoteke/" . $datoteka_za_spremit);

md5() funkcija je samo jednostavni (ali i učinkoviti :D ) primjer može poslužiti i bilo koja druga funkcija poput sha1(). Poanta je da dobiješ jedinstveni naziv datoteke koji se sigurno neće ponoviti, osim toga rješio si problem sa razmacima, čudnim (hr) znakovima i svim ostalim kako korisnici mogu nazivati datoteke.

U bazu spremiš u jednu kolonu orginalni naziv datoteke ($datoteka) a u drugu kolonu spremiš naziv na disku ($datotekazaspremit).

Kasnije kod dohvata podataka iz baze dohvatiš redove i izgeneriraš link:

<a href="spremljene_datoteke/<?php echo $datoteka_za_spremit;?>"><?php echo $datoteka;?></a>

MALA NAPOMENA:
Ako očekuješ puno datoteka možda bi bilo dobro da ih spremaš u podmape.

Na primjer ako je datoteka "naka tablica čćžšđ.xls" "provučeš" ju kroz md5() ovako:

$datoteka = "neka tablica čćžšđ.xls";
$datoteka_za_spremit = md5($datoteka.date("Y-m-d H:i:s"));

Kao rezultat u varijabli $datotekazaspremit ćeš imati 32 znaka dugačak string poput ovoga:

$datoteka_za_spremit = "1d04b60191ca24df25c6987fd1020999";

Nakon toga spremaš datoteke u podmape tipa "spremljene_datoteke/1/d/0/1d04b60191ca24df25c6987fd1020999". U bazi i dalje spremaš samo orginalni naziv datoteke i naziv na disku ("1d04b60191ca24df25c6987fd1020999") a poddirektorij "1/d/0" "iščupaš" iz prva tri znaka naziva. Prva 3 znaka nisu pravilo može biti manje i više ovisno o tome koliko daoteka očekuješ. Više datoteka više podmapa. Primjeti da neki hosteri imaju limit na max broj datoteka u mapi pa je ovo način da to malo zaobiđeš a i brže se čita direktorij sa malo datoteka nego direktorij sa tisuće datoteka :D

Odgovoreno Stu 5, 2013 yosip (508)  

Hvala yosipe, bio si od velike pomoći...

Uskoro se nadaj još nekim pitanjima :D

Ako ti je odgovor od pomoći  možeš ga označiti :D