Upload с описание към файла
В този урок ще ви предложа примерен код за upload на файлове с възможност за описание към файловете.
Ще използвам за съхраняване на информацията MySQL база данни. Ето структората на базата данни - за име на базата данни съм използвал files, а за име на таблицата също files.

CREATE TABLE `files` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(255) NOT NULL,
`opisanie` varchar(255) NOT NULL,
`ime` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;

ВНИМАНИЕ! За да може да се пише описанието на файла на български направете колацията на базата данни на cp1251_general_ci. Също така файловете, в които е кодът трябва да са с кодировка ANSI.
ВНИМАНИЕ! Трябва да си направите папка files.
Сега ви предлагам кода, чрез който се upload-ват файловете. Може да го запишете във файл upload.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Upload на файлове</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<center>
<?php
if(isset($_POST['submit'])){
///////////////////Връзка с база данни////////////////////
mysql_connect("localhost","root","****");
mysql_select_db("files");
mysql_query("SET CHARACTER SET cp1251");
///////////////////Край на връзка с база данни////////////////////
///////////////////Променливи от формата//////////////////////
$ime=htmlspecialchars($_POST['ime']);
$opisanie=htmlspecialchars($_POST['opisanie']);
$file=$_FILES['file']['name'];//име на файла
$tmp_file=$_FILES['file']['tmp_name'];//пътя до временното място на файла
$size=$_FILES['file']['size'];//големина на файла
//Тук може да се добавят още
///////////////////Край на променливи от формата//////////////////////
$upload_path="files/".basename($file);//Път до качения файл
if(file_exists($upload_path)){//Проверка дали файлът вече съществува
echo "Файлът вече съществува";
exit;
}
if(empty($ime) or empty($opisanie)){//Проверка за празни полета
echo "Празни полета";
exit;
}
if($size==0){//Ако файлът е с размер 0 няма смисъл да го качваме
echo "Файлът е повреден";
exit;
}
if($size>9999999999){//Проверка за размер на файла
echo "Файлът е твърде голям";
exit;
}
////////////////////////Проверка за разширение на файла/////////////////////////////
$extensions = array("jpg","mp3","txt","zip");//позволени типове
$extension_file = end(explode(".",$file));
$extension_file = strtolower($extension_file);
if(!in_array($extension_file,$extensions)){
echo "Непозволен тип файл";
exit;
}
///////////////////////Край на проверка за разширение на файла/////////////////////////////
$site_url="http://www.demo.md-place.info/";
$upload=move_uploaded_file($tmp_file,$upload_path);
if($upload){
$q=mysql_query("INSERT INTO `files` (`ime`,`opisanie`,`url`) VALUES ('$ime','$opisanie','$site_url$upload_path')");
if($q){
echo "Файлът беше успешно качен";
}else{
echo "Грешка</center>";
exit;
}
}
}else{
?>
<!--форма за upload-->
<form action="" method="post" enctype = "multipart/form-data">
Име
<br>
<input name="ime" type="text">
<br>
Описание
<br>
<textarea name="opisanie" cols="50" rows="20"></textarea>
<br>
<!--Тук може да се добавят още полета input или textarea-->
Файл
<br>
<input name="file" type="file">
<br>
<input name="submit" type="submit">
</form>
<?php
}
?>
</center>
</body>
</html>

Този код ще upload-ва файла в папка files. В този код трябва да промените стойността на тази променлива $site_url. На мястото на http://www.demo.md-place.info/ трябва да напишете URL-a на вашия сайт до папката files (без нея) като той трябва да завършва с /
Сега ще ви предложа примерен код за извеждане на файловете с информацията за тях. За този код съм използвал страницирането на admin от тук.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Upload на файлове</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<center>
<?php
///////////////////Връзка с база данни////////////////////
mysql_connect("localhost","root","****");
mysql_select_db("files");
mysql_query("SET CHARACTER SET cp1251");
///////////////////Край на връзка с база данни////////////////////
$broinastranica = 10;//колко броя да изкарва на страница
$pageNum = 1;
if(isset($_GET['page']))
{
$pageNum = $_GET['page'];
}
$redove = ($pageNum - 1) * $broinastranica;
$query = " SELECT id,ime,url FROM files LIMIT $redove, $broinastranica";
$result = mysql_query($query);
while($row = mysql_fetch_array($result))
{
echo "Име: <a href=\"opisanie.php?id=".$row['id']."\">".$row['ime']."</a><br>Линк: <a href=\"".$row['url']."\">".$row['url']."</a><br><br>";
}
$query = "SELECT COUNT(id) AS broi FROM files";
$result = mysql_query($query);
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['broi'];
$maxPage = ceil($numrows/$broinastranica);
$self = $_SERVER['PHP_SELF'];
$nomeranastranici = '';
for($page = 1; $page <= $maxPage; $page++)
{
if ($page == $pageNum)
{
$nomeranastranici .= " $page ";
}
else
{
$nomeranastranici .= " <a href=\"$self?page=$page\">$page</a> ";
}
}
if ($pageNum > 1)
{
$page = $pageNum - 1;
$predishna = " <a href=\"$self?page=$page\"> [<<<<<] </a> ";
$parva = " <a href=\"$self?page=1\">[първа]</a> ";
}
else
{
$predishna = ' ';
$parva = ' ';
}
if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$sledvashta = " <a href=\"$self?page=$page\"> [>>>>>] </a> ";
$posledna = " <a href=\"$self?page=$maxPage\">[последна]</a> ";
}
else
{
$sledvashta = ' ';
$posledna = ' ';
}
echo "<br><br>".$parva . $predishna . $nomeranastranici . $sledvashta . $posledna;
?>
</center>
</body>
</html>

Този код извежда всички записи от базата данни като показва по 10 на страница с линк към страница opisanie.php, където се показва описанието към файла.
Сега и кодът на opisanie.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Upload на файлове</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<center>
<?php
if(isset($_GET['id'])){//Кодът надолу ще се изпълнява само ако е посочено id
if(preg_match("/^[0-9]+$/", $_GET['id'])){//Кодът надолу ще се изпълнява ако id е цяло число
///////////////////Връзка с база данни////////////////////
mysql_connect("localhost","root","****");
mysql_select_db("files");
mysql_query("SET CHARACTER SET cp1251");
///////////////////Край на връзка с база данни////////////////////
$q=mysql_query("SELECT ime,opisanie,url FROM files WHERE id='".$_GET['id']."'");
$r=mysql_fetch_array($q);
echo $r['ime'];
echo "<br><br>";
echo $r['opisanie'];
echo "<br><br>";
echo "<a href=\"".$r['url']."\">".$r['url']."</a>";
}else{
echo "Грешка!";
}
}else{
echo "Грешка, изберете файл!";
}
?>
</center>
</body>
</html>

Този код ще ви покаже името, описанието на файла и линк към него.
ВНИМАНИЕ! От настройката на PHP зависи какъв ще е максималният размер на файла за upload. Може да пробвате да настроите тази стойност с .htaccess файл като напишете в него следните редове:
php_value post_max_size 50M
php_value upload_max_filesize 50M

като 50M означава 50MB, но това може да не работи на даден хостинг.


Този урок е написан специално за web-tourist.net. Забранявам копирането и публикуването му в друг сайт!





/ Трябва да сте регистриран за да напишете коментар /
От: sekul79
23:45 23-10-2009
Браво много ми хареса
От: SeCuRiTy
1:58 10-01-2010
Идеално супер е!!! Работи демо : http://test2.gamerbg.eu ще го ползвам за новия ми сайт :):):)
От: Lambenstein
16:06 17-05-2010
показва ми някакъв проблем и не може да качи файла
От: Pupe64etoo_92
14:59 26-05-2010
Трябва да зададеш на папката files csmod 777 тоес това са права за публи4но ка4ване и ще се оправи проблема ти.
От: Pupe64etoo_92
15:55 26-05-2010
Аз имам хотлинк защита и не ми се ще да я изклю4вам
Нестава ли да задам само линк към папката за ъплоад и да взима от там информацията. Ако изклю4а хотлинка е много лошо ще могат да ми крадът от трафика а не искам това.
От: Lambenstein
13:47 05-08-2010
само да питам как да направя при ъплоада да избераш категории, смисал да го разделя в различни страници - примерно: коли, мотори, яхи и т.н.
От: Lambenstein
14:45 05-08-2010
само да питам как да направя при ъплоада да избераш категории, смисал да го разделя в различни страници - примерно: коли, мотори, яхи и т.н.
От: rivo
13:56 20-03-2011
Много полезен и качествен урок браво :)
От: winar
1:00 07-06-2011
как да промена показването на файловете да започва отзад напред, а не отпред назад?
От: Galli
19:30 07-06-2011
$query = " SELECT id,ime,url FROM files ORDER BY id DESC LIMIT $redove, $broinastranica";
1