Помогни ни да направим Uroci.net по - богат! Добави урок

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

PHP » PHP
BuLLDoZeR   трудност:    видян: 7370

В този урок ще ви предложа примерен код за 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 (без нея) като той трябва да завършва с /
Сега ще ви предложа примерен код за извеждане на файловете с информацията за тях.

 


<!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, но това може да не работи на даден хостинг.



Коментари (8)

m92wicked на 31.01 2010 в 02:01ч.
Урокът е добре направен. Може на места още да се опрости, но имам само една забележка, която възникна при мен като проблем.
Конструкцията:
if(){
echo'.....';
exit;
}
ако сайтът е направен по схемата :хедър, иф-ове, фоотер, то фоотера при изпълнение на даден ИФ няма да се покаже...
един вариянт за разрешаване на проблема е всичко да се направи с вложени ИФ-ове ама ще стане една манджа....
за друг вариянт ще наблюдавам за нови коментари, ЛС, на е-мейла ми (martineca@abv.bg) или на скайп(wicked_92)
m92wicked на 29.04 2010 в 14:52ч.
Решение може да бъде следната конструкция, но не я препоръчвам за масова употреба :
if(){
echo '......';
footer();
exit;
}
По този начин преди да прекъснем изпълнението на кода по-надолу, ще сме сигурни, че страницата ни ще си е цяла :)
nepoznatia на 13.08 2010 в 15:59ч.
Мхм дава ми грешка :-( само на opisanie.php. Ето точно какво ми изписва : Parse error: parse error, expecting `','' or `';'' in C:\xampp\htdocs\papka\opisanie.php on line 24
nepoznatia на 18.08 2010 в 11:51ч.
Мерси много за този урок. Аз от 2 дена вече практикувам php махнах всички грешки и работи от скрипта и го превърнах в Register скрипт.
acoustic85 на 30.08 2010 в 16:29ч.
Здравеи!Значи хареса ми скрипта но имам един проблем с тази част от кода:
$site_url = "http:/xampp/htdocs/paedagogus/";
$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"Грешка";
exit;
}
}
}else{
?>


Значи качва ми го фајла в папката но ми се пуска запитването и базата е празна и следователно исписва ми се думата Грешка :)....Please help!
acoustic85 на 31.08 2010 в 11:16ч.
Опраих се !!! направо го копирате и след това си декорираш по желание :).... Мерси!
Viwancho на 25.05 2011 в 13:53ч.
моля ви някой да ми помогне като сложа кода и се опитам да кача нещо и после не ми се показва нищо пишете ми на е-майла ми (ivan_andreew@abv.bg) или на скайп (ivan4o359)
eduard19916766 на 27.03 2020 в 07:45ч.
За описание има и малко по-лесен код.

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: IT Новини