Проблем с проверка ако добавена снимка

Lenor

Registered
Здравейте. Използвам този код за качване на снимки, но дори и да не добавя снимка не ми изписва съобщение за грешка

else if ( !empty($_POST) ) {
// Нямаме субмитнати картинки, но формата е субмитната
echo "Не сте избрали изображение. Задължително е да изберете поне едно";
exit;


В край на кода се намира реда.

Код:
	// Дефиниране на константи с пътища до картинките
	define("IMAGES_BIG_DIR", 	"../images/Big_images/");
	define("IMAGES_SMALL_DIR", 	"../images/Small_images/");
	
	// Дефиниране на константи с размер за малките картинки
	define("IMAGE_HEIGHT", 	100);
	define("IMAGE_WIDTH", 	170);	
	
	// Позволени типове файлове
	$allowed_type 	= array(
		'image/jpeg',
		'image/jpg',
		'image/JPG',
		'image/JPEG',
		'image/pjpeg',
		'image/x-png',
		'image/png',
	);	
	
	$allowed_ext 	= array('jpg', 'png', 'JPG', 'jpeg', 'JPEG');
	
	// Начало на обработката
	if ( !empty($_FILES) ) {
		// Имаме субмитнати файлове
		//echo "<pre>";
		//print_r($_POST);
		//print_r($_FILES);
		
		// Брой на субмитнатите картинки
		$number_of_images = isset($_FILES['images']['name']) ? count($_FILES['images']['name']) : 0;
		
		if ( $number_of_images > 0 ) {
			// Извъртаме всички картинки
			foreach ( $_FILES['images']['name'] as $nImagekey => $sImagaName ) {
				// Файла е качен успешно, провеверки, местени и манипулации
				if ( isset($_FILES['images']['error'][$nImagekey]) && $_FILES['images']['error'][$nImagekey] == UPLOAD_ERR_OK ) {
					// Проверка за тип на файла
					$extension = pathinfo($sImagaName, PATHINFO_EXTENSION);

					if ( !in_array($_FILES['images']['type'][$nImagekey], $allowed_type) ) {
						echo "Невалиден файлов формат!";
						echo '</div>';
						echo '<div class="down-body"></div>';
						exit; 
					} else if ( !in_array($extension, $allowed_ext) ) {
						echo "Невалиден файлов формат!";
						exit;
					}

					// Закачаме уникално име на файла, базирано на неговата хеш сума. 
					// Ако бъдат качени два или повече еднкави файла, без значение от 
					// техните имена, накрая ще има само едно налично копие от тях.
					$fn 			= sprintf(sha1_file($_FILES['images']['tmp_name'][$nImagekey]).'.%s', $extension);
					$file_name 		= sprintf(IMAGES_BIG_DIR.'%s', $fn);
					$file_name_sm 	= sprintf(IMAGES_SMALL_DIR.'%s', $fn);
					
					// <changes>
					$original_images_array[] 	= $file_name;
					$small_images_array[] 		= $file_name_sm;
					// </changes>

					// Местим качения файл от временната директория в указаната
					// Ако има роблеми с функцията move_uploaded_file(), може вместо нея да се използва функцията copy()
					if ( !copy($_FILES['images']['tmp_name'][$nImagekey], $file_name) ) {
						echo "Файла не може да бъде обработен.";
						exit;
					}

					// Малки картинки
					// Неизвестна реализация на функцията resize_image; Неизвестна променлива $latin_name;
					//resize_image("../".$file_name,'210','180',IMAGES_SMALL_DIR.$latin_name."_pic_".$nImagekey.$extension);
					
					// Бърза реализация - ако не ти хареса, изтрий я.
					if ( strtolower($extension) == "jpg" ) {
						$raw_img = imagecreatefromjpeg($file_name);
					} else if ( strtolower($extension) == "png" ){
						$raw_img = imagecreatefrompng($file_name);
					}
					
					if ( $raw_img ) {
						$raw_x = imageSX($raw_img);
						$raw_y = imageSY($raw_img);
						
						
						
							$thumb_w = IMAGE_WIDTH;
							$thumb_h = IMAGE_HEIGHT;
						

						$thumb = ImageCreateTrueColor($thumb_w, $thumb_h);
						imagecopyresampled($thumb, $raw_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $raw_x, $raw_y);		

						if ( strtolower($extension) == "jpg" ) {
							imagejpeg($thumb, $file_name_sm);
						} else if ( strtolower($extension) == "png" ){
							imagepng($thumb, $file_name_sm);
						}

						imagedestroy($thumb); 
						imagedestroy($raw_img); 						
					}
				}
			}
		}
		
	} else if ( !empty($_POST) ) {
		// Нямаме субмитнати картинки, но формата е субмитната
		echo "Не сте избрали изображение. Задължително е да изберете поне едно";
		exit; 		
	}
 
Пробвай така. Там където е // Начало на обработката
if ( !empty($_FILES) ) {

го направи if ( empty($_FILES) ) {
echo 'грешката';
}

else{
тука останалия код
}

Така проверява в началото дали файлът е празен и ако не е качва картинката. Последният ред с пост-а може да се премахне.
 
Fakeheal каза:
Събмитни празна форма и дай var_dump($_FILES) и var_dump($_POST) и виж какво има там. :)

array(1) { ["images"]=> array(5) { ["name"]=> array(1) { [0]=> string(0) "" } ["type"]=> array(1) { [0]=> string(0) "" } ["tmp_name"]=> array(1) { [0]=> string(0) "" } ["error"]=> array(1) { [0]=> int(4) } ["size"]=> array(1) { [0]=> int(0) } } } array(3) { ["kategorii"]=> string(14) "dada" ["marka"]=> string(0) "" ["submitche"]=> string(20) "Публикувай" }
 
teroristd каза:
Пробвай така. Там където е // Начало на обработката
if ( !empty($_FILES) ) {

го направи if ( empty($_FILES) ) {
echo 'грешката';
}

else{
тука останалия код
}

Така проверява в началото дали файлът е празен и ако не е качва картинката. Последният ред с пост-а може да се премахне.

Отново не спира до грешката и ми изписва, че обявата е качена успешно

Код:
<?php
	// Дефиниране на константи с пътища до картинките
	define("IMAGES_BIG_DIR", 	"../images/Big_images/");
	define("IMAGES_SMALL_DIR", 	"../images/Small_images/");
	
	// Дефиниране на константи с размер за малките картинки
	define("IMAGE_HEIGHT", 	230);
	define("IMAGE_WIDTH", 	230);	
	
	// Позволени типове файлове
	$allowed_type 	= array(
		'image/jpeg',
		'image/jpg',
		'image/JPG',
		'image/JPEG',
		'image/pjpeg',
		'image/x-png',
		'image/png',
	);	
	
	$allowed_ext 	= array('jpg', 'png', 'JPG', 'jpeg', 'JPEG');
	
	// Начало на обработката
	if ( empty($_POST) ) {
		echo "Не сте избрали изображение. Задължително е да изберете поне едно";	
	}
	else {
		// Имаме субмитнати файлове
		//echo "<pre>";
		//print_r($_POST);
		//print_r($_FILES);
	
		// Брой на субмитнатите картинки
		
		$number_of_images = isset($_FILES['images']['name']) ? count($_FILES['images']['name']) : 0;
		
		if ( $number_of_images > 0 ) {
			// Извъртаме всички картинки
			foreach ( $_FILES['images']['name'] as $nImagekey => $sImagaName ) {
				// Файла е качен успешно, провеверки, местени и манипулации
				if ( isset($_FILES['images']['error'][$nImagekey]) && $_FILES['images']['error'][$nImagekey] == UPLOAD_ERR_OK ) {
					// Проверка за тип на файла
					$extension = pathinfo($sImagaName, PATHINFO_EXTENSION);

					if ( !in_array($_FILES['images']['type'][$nImagekey], $allowed_type) ) {
						echo "Невалиден файлов формат!";
						echo '</div>';
						echo '<div class="down-body"></div>';
						exit; 
					} else if ( !in_array($extension, $allowed_ext) ) {
						echo "Невалиден файлов формат!";
						exit;
					}

					// Закачаме уникално име на файла, базирано на неговата хеш сума. 
					// Ако бъдат качени два или повече еднкави файла, без значение от 
					// техните имена, накрая ще има само едно налично копие от тях.
					$fn 			= sprintf(sha1_file($_FILES['images']['tmp_name'][$nImagekey]).'.%s', $extension);
					$file_name 		= sprintf(IMAGES_BIG_DIR.'%s', $fn);
					$file_name_sm 	= sprintf(IMAGES_SMALL_DIR.'%s', $fn);
					
					// <changes>
					$original_images_array[] 	= $file_name;
					$small_images_array[] 		= $file_name_sm;
					// </changes>

					// Местим качения файл от временната директория в указаната
					// Ако има роблеми с функцията move_uploaded_file(), може вместо нея да се използва функцията copy()
					if ( !copy($_FILES['images']['tmp_name'][$nImagekey], $file_name) ) {
						echo "Файла не може да бъде обработен.";
						exit;
					}
					
					// Бърза реализация - ако не ти хареса, изтрий я.
					if ( strtolower($extension) == "jpg" ) {
						$raw_img = imagecreatefromjpeg($file_name);
					} else if ( strtolower($extension) == "png" ){
						$raw_img = imagecreatefrompng($file_name);
					}
					
					if ( $raw_img ) {
						$raw_x = imageSX($raw_img);
						$raw_y = imageSY($raw_img);
						
						
						
							$thumb_w = IMAGE_WIDTH;
							$thumb_h = IMAGE_HEIGHT;
						

						$thumb = ImageCreateTrueColor($thumb_w, $thumb_h);
						imagecopyresampled($thumb, $raw_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $raw_x, $raw_y);		

						if ( strtolower($extension) == "jpg" ) {
							imagejpeg($thumb, $file_name_sm);
						} else if ( strtolower($extension) == "png" ){
							imagepng($thumb, $file_name_sm);
						}

						imagedestroy($thumb); 
						imagedestroy($raw_img); 						
					}
				}
			}
		}	
	} 
?>
 
Я дай и html кода да не ми се налага да пиша полетата и да тествам. При мен на първо четене без html директно ми вади че е празно полето и вади грешката.
 
teroristd каза:
Я дай и html кода да не ми се налага да пиша полетата и да тествам. При мен на първо четене без html директно ми вади че е празно полето и вади грешката.

Код:
		 <div id="rightcolumn">

		<div class="up-body"></div>
		<div class="center-body">

		<form  action="#" method="post" enctype="multipart/form-data"> 
		<div id="specifikacii">

		<div class="add-info-l">
    	<div class="add-left" align="right">Категория</div>
        <div class="add-right select">
        <select name="kategorii">
        <option value="Пендели" <?php if($cat=="Пендели"){echo 'selected="selected"';} ?>>Пендели</option>
        <option value="Полилеи" <?php if($cat=="Полилеи"){echo 'selected="selected"';} ?>>Полилеи</option>
        <option value="Абажури от канап" <?php if($cat=="Абажури от канап"){echo 'selected="selected"';} ?>>Абажури от канап</option>
        <option value="Стъкла" <?php if($cat=="Стъкла"){echo 'selected="selected"';} ?>>Стъкла</option>
        <option value="Детайли" <?php if($cat=="Детайли"){echo 'selected="selected"';} ?>>Детайли</option>
        <option value="Уникати" <?php if($cat=="Уникати"){echo 'selected="selected"';} ?>>Уникати</option>
        </select>
        </div>
	
		<?php
		echo'			
			<div class="clear"></div>

		<div class="add-left" align="right">Модел</div>
        <div class="add-right"><input type="text" name="marka" id="marka_id" onkeyup="markata()" /></div>
		';
?>				


		</div>
		<div class="clear"></div>

</div>

<br />

<div class="publukyvai-promeni" align="center"><input type="submit" value="Публикувай"  name="submitche"  id="dobavi_zapis"></div>

</form>


<?php
if(isset($_POST["submitche"]))
{	

	// <changes>
	$original_images_array 	= array();
	$small_images_array 	= array();
	// </changes>	
	
	// vzimane na stoinostite ot tekstovite poleta
	$kategoriq = isset($_POST["kategorii"]) ? $_POST['kategorii'] : '';	
	$model = isset($_POST["model"]) ? $_POST['model'] : '';
	$marka = isset($_POST["marka"]) ? $_POST['marka'] : '';
		

 	// Дефиниране на константи с пътища до картинките
	define("IMAGES_BIG_DIR", 	"../images/Big_images/");
	define("IMAGES_SMALL_DIR", 	"../images/Small_images/");
	
	// Дефиниране на константи с размер за малките картинки
	define("IMAGE_HEIGHT", 	230);
	define("IMAGE_WIDTH", 	230);	
	
	// Позволени типове файлове
	$allowed_type 	= array(
		'image/jpeg',
		'image/jpg',
		'image/JPG',
		'image/JPEG',
		'image/pjpeg',
		'image/x-png',
		'image/png',
	);	
	
	$allowed_ext 	= array('jpg', 'png', 'JPG', 'jpeg', 'JPEG');
	
	// Начало на обработката
	if ( empty($_POST) ) {
		echo "Не сте избрали изображение. Задължително е да изберете поне едно";	
	}
	else {
		// Имаме субмитнати файлове
		//echo "<pre>";
		//print_r($_POST);
		//print_r($_FILES);
	
		// Брой на субмитнатите картинки
		
		$number_of_images = isset($_FILES['images']['name']) ? count($_FILES['images']['name']) : 0;
		
		if ( $number_of_images > 0 ) {
			// Извъртаме всички картинки
			foreach ( $_FILES['images']['name'] as $nImagekey => $sImagaName ) {
				// Файла е качен успешно, провеверки, местени и манипулации
				if ( isset($_FILES['images']['error'][$nImagekey]) && $_FILES['images']['error'][$nImagekey] == UPLOAD_ERR_OK ) {
					// Проверка за тип на файла
					$extension = pathinfo($sImagaName, PATHINFO_EXTENSION);

					if ( !in_array($_FILES['images']['type'][$nImagekey], $allowed_type) ) {
						echo "Невалиден файлов формат!";
						echo '</div>';
						echo '<div class="down-body"></div>';
						exit; 
					} else if ( !in_array($extension, $allowed_ext) ) {
						echo "Невалиден файлов формат!";
						exit;
					}

					// Закачаме уникално име на файла, базирано на неговата хеш сума. 
					// Ако бъдат качени два или повече еднкави файла, без значение от 
					// техните имена, накрая ще има само едно налично копие от тях.
					$fn 			= sprintf(sha1_file($_FILES['images']['tmp_name'][$nImagekey]).'.%s', $extension);
					$file_name 		= sprintf(IMAGES_BIG_DIR.'%s', $fn);
					$file_name_sm 	= sprintf(IMAGES_SMALL_DIR.'%s', $fn);
					
					// <changes>
					$original_images_array[] 	= $file_name;
					$small_images_array[] 		= $file_name_sm;
					// </changes>

					// Местим качения файл от временната директория в указаната
					// Ако има роблеми с функцията move_uploaded_file(), може вместо нея да се използва функцията copy()
					if ( !copy($_FILES['images']['tmp_name'][$nImagekey], $file_name) ) {
						echo "Файла не може да бъде обработен.";
						exit;
					}
					
					// Бърза реализация - ако не ти хареса, изтрий я.
					if ( strtolower($extension) == "jpg" ) {
						$raw_img = imagecreatefromjpeg($file_name);
					} else if ( strtolower($extension) == "png" ){
						$raw_img = imagecreatefrompng($file_name);
					}
					
					if ( $raw_img ) {
						$raw_x = imageSX($raw_img);
						$raw_y = imageSY($raw_img);
						
						
						
							$thumb_w = IMAGE_WIDTH;
							$thumb_h = IMAGE_HEIGHT;
						

						$thumb = ImageCreateTrueColor($thumb_w, $thumb_h);
						imagecopyresampled($thumb, $raw_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $raw_x, $raw_y);		

						if ( strtolower($extension) == "jpg" ) {
							imagejpeg($thumb, $file_name_sm);
						} else if ( strtolower($extension) == "png" ){
							imagepng($thumb, $file_name_sm);
						}

						imagedestroy($thumb); 
						imagedestroy($raw_img); 						
					}
				}
			}
		}	
	} 
 
	// <changes>
	$original_images_string = implode("|", $original_images_array);
	$small_images_string 	= implode("|", $small_images_array);
	// </changes>
 
Еми ти във хтмл формата нямаш поле за картинка, затова не ти вади грешката. Ето твоя пхп код, който беше пуснал по горе с примерна форма с едно поле за картинка. Така работи, но забележи че в проверката трябва да спазиш името на полето. Разгледай внимателно преди да правиш промени.

Код:
<form method="post" enctype="multipart/form-data" >

                <input type="file" name="images" />

                <input type="submit" name="submit" />

            </form>


            <?php

            // Дефиниране на константи с пътища до картинките
            define("IMAGES_BIG_DIR", "../images");
            define("IMAGES_SMALL_DIR", "../images");

            // Дефиниране на константи с размер за малките картинки
            define("IMAGE_HEIGHT", 230);
            define("IMAGE_WIDTH", 230);

            // Позволени типове файлове
            $allowed_type = array(
                    'image/jpeg',
                    'image/jpg',
                    'image/JPG',
                    'image/JPEG',
                    'image/pjpeg',
                    'image/x-png',
                    'image/png',
            );

            $allowed_ext = array('jpg', 'png', 'JPG', 'jpeg', 'JPEG');

            // Начало на обработката
            if (isset($_POST['submit'])) {
                if (empty($_FILES['images']['tmp_name'])) {
                    echo "Не сте избрали изображение. Задължително е да изберете поне едно!";
exit;
                }
                else {
                    // Имаме субмитнати файлове
                    //echo "<pre>";
                    //print_r($_POST);
                    //print_r($_FILES);
                    // Брой на субмитнатите картинки

                    $number_of_images = isset($_FILES['images']['name']) ? count($_FILES['images']['name']) : 0;

                    if ($number_of_images > 0) {
                        // Извъртаме всички картинки
                        foreach ($_FILES['images']['name'] as $nImagekey => $sImagaName) {
                            // Файла е качен успешно, провеверки, местени и манипулации
                            if (isset($_FILES['images']['error'][$nImagekey]) && $_FILES['images']['error'][$nImagekey] == UPLOAD_ERR_OK) {
                                // Проверка за тип на файла
                                $extension = pathinfo($sImagaName, PATHINFO_EXTENSION);

                                if (!in_array($_FILES['images']['type'][$nImagekey], $allowed_type)) {
                                    echo "Невалиден файлов формат!";
                                    echo '</div>';
                                    echo '<div class="down-body"></div>';
                                    exit;
                                }
                                else if (!in_array($extension, $allowed_ext)) {
                                    echo "Невалиден файлов формат!";
                                    exit;
                                }

                                // Закачаме уникално име на файла, базирано на неговата хеш сума. 
                                // Ако бъдат качени два или повече еднкави файла, без значение от 
                                // техните имена, накрая ще има само едно налично копие от тях.
                                $fn = sprintf(sha1_file($_FILES['images']['tmp_name'][$nImagekey]) . '.%s', $extension);
                                $file_name = sprintf(IMAGES_BIG_DIR . '%s', $fn);
                                $file_name_sm = sprintf(IMAGES_SMALL_DIR . '%s', $fn);

                                // <changes>
                                $original_images_array[] = $file_name;
                                $small_images_array[] = $file_name_sm;
                                // </changes>
                                // Местим качения файл от временната директория в указаната
                                // Ако има роблеми с функцията move_uploaded_file(), може вместо нея да се използва функцията copy()
                                if (!copy($_FILES['images']['tmp_name'][$nImagekey], $file_name)) {
                                    echo "Файла не може да бъде обработен.";
                                    exit;
                                }

                                // Бърза реализация - ако не ти хареса, изтрий я.
                                if (strtolower($extension) == "jpg") {
                                    $raw_img = imagecreatefromjpeg($file_name);
                                }
                                else if (strtolower($extension) == "png") {
                                    $raw_img = imagecreatefrompng($file_name);
                                }

                                if ($raw_img) {
                                    $raw_x = imageSX($raw_img);
                                    $raw_y = imageSY($raw_img);



                                    $thumb_w = IMAGE_WIDTH;
                                    $thumb_h = IMAGE_HEIGHT;


                                    $thumb = ImageCreateTrueColor($thumb_w, $thumb_h);
                                    imagecopyresampled($thumb, $raw_img, 0, 0, 0, 0, $thumb_w, $thumb_h, $raw_x, $raw_y);

                                    if (strtolower($extension) == "jpg") {
                                        imagejpeg($thumb, $file_name_sm);
                                    }
                                    else if (strtolower($extension) == "png") {
                                        imagepng($thumb, $file_name_sm);
                                    }

                                    imagedestroy($thumb);
                                    imagedestroy($raw_img);
                                }
                            }
                        }
                    }
                }
            }

            ?>
 
Наистина като няма снимка ми изкарва: Не сте избрали изображение. Задължително е да изберете поне едно!, но след като опитам да кача снимка и ми дава следната грешка Warning: Invalid argument supplied for foreach() in
 
Грешката е от този ред, първия в елса.
$number_of_images = isset($_FILES['images']['name']) ? count($_FILES['images']['name']) : 0;

Направи го така, и няма да имаш грешка.
$number_of_images = $_FILES['images']['name'];

Като цяло кода е пълна мешавица. Дали работи коректно не мога да кажа.
 
След като смених реда няма грешка, но не казва снимки/картинки ама ще се мъча с тоя код. Явно стана голяма кашотина. Благодаря за помощта
 
Мое мнение, но да качваш малки и големи картинки е безмислено, при положение че, можеш да контролираш големината с html / css много лесно. Също така това прецаква качеството на картинката малко или много, защото ти фактически я прерисуваш. Ако искаш мога да ти дам код без преоразмеряване който съм писал за себе си преди време.
 
Ето заповядай.
Първия ред ти е пътя до папката където искаш да качваш снимките. В случая е направено все едно кода ти е в root директорията и имаш папка images в същата директория. Също така по долу в кода има един ред в който съм разрешил качването на файлове до 2mb, можеш да го промениш ако искаш по-големи или по-малки. Ако имаш въпроси питай.

Код:
<?php

            $imageFolderPath = realpath('images') . DIRECTORY_SEPARATOR;
            $fileTmpLoc = $_FILES['file_upload_field']['tmp_name'];
            $fileName = $_FILES['file_upload_field']['name'];
            $fileSize = $_FILES['file_upload_field']['size'];
            $clasicMimeType = $_FILES['file_upload_field']['type'];

            $exp = explode('.', $fileName);
            $end = strtolower(end($exp));
            $newFileName = bin2hex(openssl_random_pseudo_bytes(16)) . '.' . $end;

            //..........................................................................................

            if ($fileTmpLoc == null) {
                echo 'Please choose image first';
            }
            else {

                if ($clasicMimeType !== 'image/jpg' && $clasicMimeType !== 'image/jpeg' && $clasicMimeType !== 'image/png') {
                    echo 'Allowed formats is: jpg/jpeg/png';
                }

                $finfo = new \finfo(FILEINFO_MIME_TYPE);
                $mimeType = $finfo -> file($fileTmpLoc);

                if ($mimeType !== 'image/jpg' && $mimeType !== 'image/jpeg' && $mimeType !== 'image/png') {
                    echo 'Allowed formats is: jpg/jpeg/png';
                }

                if ($end !== 'jpg' && $end !== 'jpeg' && $end !== 'png') {
                    echo 'Allowed formats is: jpg/jpeg/png';
                }

                $getImageSize = list($width, $height) = getimagesize($fileTmpLoc);

                if (!$getImageSize) {
                    echo 'Upload error, please try again';
                }

                // 1 мегабайт = 1048576 байта
                if ($fileSize > 2097152) {
                    echo 'Max allowed size is: 2MB';
                }
                else {

                    $uploadResult = move_uploaded_file($fileTmpLoc, $imageFolderPath . $newFileName);

                    //Тук записваш в базата данни ако искаш
                    //$sql = $this -> prepare('INSERT INTO table (image) VALUES(?)', array($newFileName)) -> execute();

                    echo 'You succesfuly uploaded your image';
                }
            }

            ?>
 

Back
Горе