Upload с описание към файла

Автор: Galli

В този урок ще ви предложа примерен код за 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. Забранявам копирането и публикуването му в друг сайт!

Вашият коментар