Многобройно качване на файлове

nom3r1

Registered
Искам да огранича качването на файловете. Да могат да бъдат качвани само:

.JPG, .PNG, .GIF и максималната големина на снимките да бъде 2 MB, няк'ва идея как ще стане?

PHP:
<?php
if(isset($_POST['submit'])) {
	if (isSet($_POST['pic'])) {
		$pic = chistene($_POST['pic']);
	} else {
		$pic = '';
	}
	$path1 = "up/".$_FILES['pic']['name'][0];
	$path2 = "up/".$_FILES['pic']['name'][1];
	$path3 = "up/".$_FILES['pic']['name'][2];
	$path4 = "up/".$_FILES['pic']['name'][3];
	copy($_FILES['pic']['tmp_name'][0], $path1);
	copy($_FILES['pic']['tmp_name'][1], $path2);
	copy($_FILES['pic']['tmp_name'][2], $path3);
	copy($_FILES['pic']['tmp_name'][3], $path4);
	$filesize1=$_FILES['pic']['size'][0];
	$filesize2=$_FILES['pic']['size'][1];
	$filesize3=$_FILES['pic']['size'][2];
	$filesize4=$_FILES['pic']['size'][3];

	if($filesize1 && $filesize2 && $filesize3 && $filesize4 != 0){
		echo "Файловете са качени";
	} else {
		echo "ГРЕШКА!"
	}
	if($filesize1==0) {
		echo "грешка1";
	}
	if($filesize2==0) {
		echo "грешка2";
	}
	if($filesize3==0) {
		echo "грешка3";
	}
	if($filesize4==0) {
		echo "грешка4";
	}
} else {
echo "<form method=\"post\" enctype=\"multipart/form-data\">
	<input name=\"pic[]\" type=\"file\">
	<br>
	<input name=\"pic[]\" type=\"file\">
	<br>
	<input name=\"pic[]\" type=\"file\">
	<br>
	<input name=\"pic[]\" type=\"file\">
	<input value=\"Качи\" name=\"submit\" type=\"submit\">
</form>";
}
?>
 
Заповядай! Провери го от близо за грешки, защото сега е 04:00ч., и не знам на кой свят съм, и може да съм объркал нещо! :)

PHP:
		<?php
		// Авторски код от nFarkt (Stowny)
$upload_dir = "snimki/";
$num_files = 10; // Макс. брой за качване
$size_bytes =10000000; // Размера в байтове
$limitedext = array(".gif",".jpg",".jpeg",".png",".bmp"); // разрешени формати

if (!is_dir("$upload_dir")) {
die ("Грешка: Папката <b>($upload_dir)</b> не съществува!");
}

if (!is_writeable("$upload_dir")){
die ("Грешка: Промени правомощията на папката.");
}


if (isset($_POST['upload_form'])){

echo "<h3>Резултати от качването:</h3>";


for ($i = 1; $i <= $num_files; $i++) {


$new_file = $_FILES['file'.$i];
$file_name = $new_file['name'];
$file_name = str_replace(' ', '_', $file_name);
$file_tmp = $new_file['tmp_name'];
$file_size = $new_file['size'];

if (!is_uploaded_file($file_tmp)) {
echo "<div class=\"err\">Файл $i: Не е избран.</div><br>";
}else{

$ext = strrchr($file_name,'.');
if (!in_array(strtolower($ext),$limitedext)) {
echo "<div class=\"err\">Файл $i: ($file_name) Грешно разширение на файла.</div> <br>";
}else{

if ($file_size > $size_bytes){
echo "<div class=\"err\">Файл $i: ($file_name) трябва да е до <b>". $size_bytes / 1024 ."</b> KB.</div> <br>";
}else{

if(file_exists($upload_dir.$file_name)){
echo "<div class=\"err\">Файл $i: ($file_name) вече съществува.</div><br>";
}else{

if (move_uploaded_file($file_tmp,$upload_dir.$file_name)) {
echo "<div class=\"usp\">Файл $i: ($file_name) е качен успешно.</div><br>";
}else{

echo "<div class=\"err\">Файл $i: Грешка в качването.</div><br>";
}
}
}
}
}
}
echo "»<a href=\"$_SERVER[PHP_SELF]\">back</a>";

}else{
echo " <h3>Избери кои изображения искаш да качиш</h3>
Максимален размер на файл = ". $size_bytes / 1024 ." KB";
echo " <form method=\"post\" action=\"$_SERVER[PHP_SELF]\" enctype=\"multipart/form-data\">";

for ($i = 1; $i <= $num_files; $i++) {
echo "Файл $i: <input type=\"file\" name=\"file". $i ."\"><br>";
}
echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$size_bytes\">
<input type=\"submit\" name=\"upload_form\" value=\"Качи сега!\">
</form>";
}

?>
 
Задай проверка още при натискането на бутона. С един if провери дали файловете завършват на jpg,jpeg,gif,png, с explode и end най-лесно става. След това провери пак с един if големината на файловете $_FILES['file']['size'] дали е 2MB. :?:
 
Мислех нещо от рода на :

PHP:
$filetype1 = $_FILES['pic']['type'][0];
$filetype2 = $_FILES['pic']['type'][1];
$filetype3 = $_FILES['pic']['type'][2];
$filetype4 = $_FILES['pic']['type'][3];
if($filetype1 && $filetype2 && $filetype3 && $filetype4 == 'image/jpeg'){
//up
} else {
//error
}

Обаче явно не се получава.

Сега ще видя к'во ще го измисля с explode. :?:
 
Да, и така може, но логиката ти е малко сгрешена.

Скролни надолу до "Restrictions on Upload" - http://www.w3schools.com/PHP/php_file_upload.asp

Там има примери и с size и с type, което мисля че ще ти помогне изцяло, но ако държиш да вземеш формата с explode -
PHP:
end(explode(".", $filename))

Taка взима последния елемент от масива върнат от explode.
 
Направих го по-следния начин:
PHP:
<?php
if(isSet($_POST['submit'])) {
	if (isSet($_POST['pic'])) {
		$pic = chistene($_POST['pic']);
	} else {
		$pic = '';
	}
	 for ($i = 0; $i <= 3; $i++){
		$name_pic = $_FILES['pic']['name'][''.$i.''];
		$explode = explode(".",$name_pic);
		$count = count($explode);
		$a = $explode[$count-1];
		$b = array("JPG","JPEG","jpg","jpg");
	if (in_array($a,$b)){
		$path = "up/";
		$datename = date("YmdHis");
		$rand = rand(0,1000);
		$namemd5 = md5("$i$datename$rand");
		$name = $i."_pic_$namemd5.$a";
		move_uploaded_file($_FILES['pic']['tmp_name'][''.$i.''], $path.$name);
		echo "Снимка $i е качена.<br>";
		@${prebroi.$i} = $name;
	} else {
		echo "Снимка $i използва неразрешен формат!<br />";
	}
	}
	$db->query("INSERT INTO `picture` (picture1,picture2,picture3,picture4) VALUES ('$prebroi0','$prebroi1','$prebroi2','$prebroi3')");
} else {
echo "<form method=\"post\" enctype=\"multipart/form-data\">
<input name=\"pic[]\" type=\"file\">
<br>
<input name=\"pic[]\" type=\"file\">
<br>
<input name=\"pic[]\" type=\"file\">
<br>
<input name=\"pic[]\" type=\"file\">
<input value=\"Качи\" name=\"submit\" type=\"submit\">
</form>";
}
?>

Само се чудя , дали ще може да бъде манипулиран по няк'в начин тоя код?

Кода за сега работи както искам, НО има едно нещо , което не ми изнася. Когато някое от полетата е празно и не е въведена снимка/файл тя пак се опитва да бъде качена и ми вади грешка в заявката:

например:
Notice: Undefined variable: prebroi2 in /home/nom3r1/public_html/up.php on line 103

Също така и: Снимка 2 използва неразрешен формат!

Мога да направя лесно полетата да бъдат задължителни , но мен т'ва не ме устройва или по-точно самата идея е да не са задължителни.
 
Пич, дал съм ти моят код, чудя се защо поне не го тестваш? Ако някое от полетата е празно, после при резултата си излиза "Файл 5: Оставен празен.", и не ти прави проблеми.
 
@nom3r1

PHP:
$filetype1 = $_FILES['pic']['type'][0];
$filetype2 = $_FILES['pic']['type'][1];
$filetype3 = $_FILES['pic']['type'][2];
$filetype4 = $_FILES['pic']['type'][3];
if(($filetype1 && $filetype2 && $filetype3 && $filetype4) == 'image/jpeg'){
//up
} else {
//error
}


пробвай така ;)
 
Пич, защото съм леко твърдоглав и мъча да направя от нищо - нещо. :shock:

Сега след преглед на твоя код, осъзнах къде греша, за сега кода е така:

PHP:
<?php
if(isSet($_POST['submit'])) {
	if (isSet($_POST['pic'])) {
		$pic = chistene($_POST['pic']);
	} else {
		$pic = '';
	}
		for ($i = 0; $i <= 3; $i++){
			$name_pic = $_FILES['pic']['name'][''.$i.''];
			$explode = explode(".",$name_pic);
			$count = count($explode);
			$a = $explode[$count-1];
			$b = array("JPG","JPEG","jpg","jpg");
				if (!$name_pic) {
					echo "Файл $i: Не е избран.<br />";
				} else {
					if (in_array($a,$b)){
							$path = "up/";
							$datename = date("YmdHis");
							$rand = rand(0,1000);
							$namemd5 = md5("$i$datename$rand");
							$name = $i."_pic_$namemd5.$a";
							move_uploaded_file($_FILES['pic']['tmp_name'][''.$i.''], $path.$name);
							echo "Снимка $i е качена.<br>";
							@${prebroi.$i} = $name;
					} else {
						echo "Снимка $i използва неразрешен формат!<br />";
					}
				}
		}
		$db->query("INSERT INTO `picture` (picture1,picture2,picture3,picture4) VALUES ('$prebroi0','$prebroi1','$prebroi2','$prebroi3')");
} else {
echo "<form method=\"post\" enctype=\"multipart/form-data\">
<input name=\"pic[]\" type=\"file\">
<br>
<input name=\"pic[]\" type=\"file\">
<br>
<input name=\"pic[]\" type=\"file\">
<br>
<input name=\"pic[]\" type=\"file\">
<input value=\"Качи\" name=\"submit\" type=\"submit\">
</form>";
}
?>

Остана ми единствено тоя проблем:

Notice: Undefined variable: prebroi2 in /home/nom3r1/public_html/up.php on line 31

@IzKuFeLiQqQqQ, по-напред съм от кода, който си ми дал... :)
 
Не съм чел цялата тема. Кога ти излиза тази грешка, и как?
 

Back
Горе