[ djen92 @ 28.10.2009. 09:09 ] @
Kako napraviti stranicu za upload slika.
Prvo sto je potrebno jeste da napravite bazu podataka (mysql),
sa nazivom koji cete primenjivati u konekciji sa njom.
Zatim u bazi napravite tabelu sa imenom galerija
(tako sam ja stavio, naravno vi mozete staviti naziv po izboru, ali morate menjati i u kodu :D)
U toj tabeli napravite polja 1) slike_id (int, not null, primary key);
2) filename (text, not null,).
Ili jednostavno ubacite u bazu preko sql sledeci kod:



Code:

CREATE TABLE `galerija` (
  `slike_id` int(11) NOT NULL auto_increment,
  `filename` text NOT NULL,
  PRIMARY KEY  (`slike_id`),
  FULLTEXT KEY `filename` (`filename`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=47 ;





Kad smo zavrsili sa ubacivanjem tabela u polja u bazu prelazimo na
fajl za konekciju stranice sa bazom.(U mom slucaju naziv fajla ce biti db.php)
Mislim da je sledeci kod svima jasan mada sam i u njemu ostavio komentar,
tako da prelazimo na sledeci korak.



db.php
Code:



<?php

$host = $_SERVER['SERVER_NAME'];

// gledam da li je localhost (moj komp) ili je na hostingu i u 
// zavisnosti od toga unosim ove dole podatke za povezivanje sa bazom podataka
// U ovom slucaju if je za unosenje podataka za localhost dok je else za bazu na serveru

if ($host == "localhost")
{
    $con = mysql_connect('localhost', 'username', 'password') or
    die("error, netacna mysql adresa");
    mysql_select_db("Naziv vase baze",$con) or 
    die ("error, nema baze podataka  ");
}
else
{
    $con = mysql_connect('localhost', 'username', 'password') or
    die("error, netacna mysql adresa");
    mysql_select_db("Naziv vase baze",$con) or 
    die ("error, nema baze podataka  ");
}

if(is_numeric($slike_id)) {
$slike_id = (Int)$_POST["slike_id"];
$query = "DELETE FROM `galerija` WHERE `slike_id` = '$slike_id'";
mysql_query($query, $con) or die(mysql_error());
}
else {
die("Hacking attempt");
}

?>




Sledeci korak je da napravite .html stranicu u kojoj cete birati sliku za ubacivanje na server.
Ta stranica se sastoji iz forme iz koje se dobijaju 2 dugmeta(1 za biranje slika iz vaseg kompjutera, 2 submit dugmeta)
i jednog polja gde ce se ocitati precica slike koju ubacujete iz racunara.
U mom slucaju se ova stranica naziva uploader.html.
A forma koja ide na tu stranicu je:

ps: Koristio sam metodu post za ubacivanje u bazu, (vi je mozete promeniti na get)

uploader.html
Code:


<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Izaberite sliku: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" />
</form>




Kao sto ste videli u formi action="uploader.php", samim tim znaci da moramo i napraviti uploader.php stranicu.
Ta php stranica sluzi za ubacivanje slika kao i obavestavanje da li je ubacena na server ili ne.
Kao sto cete videti u stranici sam koristio kod include("db.php"); koji sluzi kao precica do stranice db.php.
To sam uradio radi preglednosti, a ako ne zelite da stavite tako jednostavno sve iz db.php stavite u ovu stranicu umesto tog koda.
U ovoj stranici se nalazi kod $target_path = "uploads/"; koji predstavlja folder u koji ce stavljati slike,
sto znaci da vi morate napraviti pored ovih stranica i folder uploads.


uploader.php
Code:

<?php


         include("db.php");



$target_path = "uploads/";




$filename = $_FILES['uploadedfile']['name'];

$target_path = $target_path . basename( $filename);

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "Slika ".  basename( $filename).
    " je ubacena na server. ";


     $query = "INSERT INTO galerija (filename)
        VALUES ('$filename')";
         mysql_query($query, $con);
}
else{
    echo "nije ubacena na server, probajte ponovo! ";
}

?>                 <br />
<a href="uploader.html">Nazad</a>



To bi bilo sve sto se tice upload-a slika, ali da vas ne razocaram stavicu upustvo
za stranicu koja ce te slike ocitavati i brisati po vasoj zelji. :D
Tu stranicu sam nazvao izbrisi_slike.php.
Sada cu postaviti kod cele te stranice a nakon koda cu komentarisati ako bude trebalo.


izbrisi_slike.php
Code:

 <?php
include("db.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script language="jscript" type="text/javascript">
function confirmSubmit()
{
// ovo je javascript koji je jasan
var agree=confirm("Jesi li siguran da zelis da obrises?");
if (agree)
    return true ;
else
    return false ;
}

</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Brisanje slika</title>
</head>

<body>
<?php
$query = "SELECT * FROM galerija  ";
$result = mysql_query($query, $con);
while ($row = mysql_fetch_array($result))
{
    $slike_id = $row["slike_id"];
    $filename = $row["filename"];
       $slika_id = $_POST['slika_id'];

?>

<table>
<td>
<div id="vesti_cont">
<div id="vte-container"></div>
<a href="<?php echo "uploads/$filename"?>">
    <img id='thumb1' src="<?php echo "uploads/$filename"?>" alt="Slika"
 height="160" width="200" />
</a>   - <form action="obrisi.php" method="post">
    <input name="slike_id" type="hidden" id="slike_id" value="<?php echo $slike_id?>" />
    <input name="Submit" type="submit"  value="Delete" onclick="return confirmSubmit();"/>
</form><br />
</div>
</td><br />

</table>
<?php
}
?>
    <a href="uploader.html">Upload slika</a><br />
    
</body>
</html>


E sad komentari za stranu:
Na samom pocetku vam se isto nalazi include kod koji mozete zamenitim sa onim kodom iz db.php (to sam vam vec naglasio i u proslom koraku).
U kodu ove stranice se nalazi i javascript kod koji sluzi zapotvrdu brisanja slike.
Naravno u kod mozete po zelji dodati i kod za uvelicavanje slika tj javascript kod, ali to prepustam vama :D


[Ovu poruku je menjao djen92 dana 28.10.2009. u 10:30 GMT+1]

[Ovu poruku je menjao djen92 dana 28.10.2009. u 12:54 GMT+1]

[Ovu poruku je menjao djen92 dana 29.10.2009. u 11:28 GMT+1]
[ Man-Wolf @ 28.10.2009. 10:06 ] @
Nisam detaljno gledao kod, al imam par zamerki (onako - na brzinu :P):

1. Baza:

- Zasto koristis FULLTEXT tip podatka za cuvanje imena fajla ? Jednostavnije je staviti "varchar (100)" (realno je manje od 100, al aj, nek bude prostora za ime slike :-D)

- Koristi engleske nazive za ime baze i polja u bazi (pretpostavi da ce jos neko da gleda/koristi/menja tvoj kod :-))

2. Kod:

- Nigde ne proveravas da li je u pitanju zaista slika. Sta u ovom slucaju mene sprecava da uploadujem php skriptu (umesto slike) i da je pokrenem ? :-)) Napravio si ogromnu rupu, koja moze da se "exploatise" kako god hoces :-D

- Iako se slika ne uploaduje uspesno, ti i dalje stavljas ime slike u bazu ... :-)

Code:

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "Slika ".  basename( $filename).
    " je ubacena na server. ";

}
else{
    echo "nije ubacena na server, probajte ponovo! ";
}
     $query = "INSERT INTO galerija (filename)
        VALUES ('$filename')";
         mysql_query($query, $con);
?>


Kao sto rekoh, nisam detaljno gledao kod, ovo je samo ono sto sam "ovlas" zapazio ...


P.S. U svakom slucaju - sve pohvale za trud :-)
[ djen92 @ 28.10.2009. 10:16 ] @
Hvala na komentaru. Potrudicu se da ispravim sve to sto si naveo.
[ Milos911 @ 28.10.2009. 12:18 ] @
Code:
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />

Ovo ti nije dovoljno da ogranicis velicinu uploadovanog fajla...
Ona konekcija na bazu ti je nepotrebna.
I jedno cepidlacenje ali moram da kazem :) . Ili pisi srpski ili engleski(bolje engleski). Nemoj pola-pola. I malo vise razmisljaj o imenima kolona u bazi :) Napr kad si vec stavio "slike_id" bolje da si napisao id_slike(a jos bolje nesto krace, napr sid ili pid(a od ova dva je bolje pid jer mi sid vise lici na session id :D)). slike_id moze samo da te zbunjuje u daljem radu...
[ djen92 @ 29.10.2009. 18:28 ] @
Moze li neko da doda kod koji cu dodati mom za extenziju fajla kao i velicinu??? bo bih vam zahvalan.
[ vatri @ 30.10.2009. 08:26 ] @
pa zar nije bolje da sam naucis nego da ti neko pise. Nije to nista komplikovano.

za velicinu: imas u $_FILES nizu velicinu uploadovanog fajla i samo ispitas ako je veci od neke vrijednosti - greska....
za extenziju: ispitas sta se nalazi iza zadnje tacke u imenu fajla (ime fajla se takodje nalazi u $_FILES array-u), a zatim vidis jel prava extenzija. Mozes u array stavit dozvoljene extenzije:

$allowed_ext = array("jpg", "gif" ,"png");

i onda prodjes sa "foreach" kroz taj array i ako se poklapa na primjer napravis variablu $ext_ok = 'ok'; ili tako nesto...