Помогите с логикой скрипта

ККлава

Новичок
Здравствуйте, есть код, картинка нужного размера сохраняется, все выводится, но не могу сообразить, как сделать необязательным условием загрузку фото. На данный момент если в форме не выбрать файл, то выдает ошибку :
"Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in W:\home\localhost\www\cat.loc\next_kupi.php on line 21"
Пыталась сделать обработку если файл существует через
"if(
isset($_POST['upload'])"
и дальше уменьшать, но это не прокатило.
Спасибо заранее, если кто-то поможет.
PHP:
 <?php
 $time=date("Y:m:d");
 $uploaddir = 'uploads/';
 $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
 // Проверяем, была ли корректным образом отправлена форма
 if(
     isset($_POST['name']) && !empty($_POST['name']) &&
     isset($_POST['page']) && !empty($_POST['page']) &&
     isset($_POST['time']) && !empty($_POST['time']) &&
     isset($_POST['text']) && !empty($_POST['text'])
 ){
     // Обрабатываем данные
     $name = stripslashes(trim(htmlspecialchars($_POST['name'],ENT_QUOTES)));
     $page = stripslashes(trim(htmlspecialchars($_POST['page'],ENT_QUOTES)));
     $time = stripslashes(trim(htmlspecialchars($_POST['time'],ENT_QUOTES)));
     $text = stripslashes(trim(htmlspecialchars($_POST['text'],ENT_QUOTES)));
     if($_FILES["userfile"]["size"] > 1024*2*1024) {
        
         exit ("<p> Размер файла больше 2МБ </p>");
 }
 $params = getimagesize($_FILES['userfile']['tmp_name']);
 if($params['mime'] != 'image/gif' &&
   $params['mime'] != 'image/jpeg' &&
   $params['mime'] != 'image/png') {
        
         exit ("<p> Не тот формат файла </p>");
 }
 switch ( $params[2] ) {
       case 1: $source = imagecreatefromgif($_FILES['userfile']['tmp_name']); break;
       case 2: $source = imagecreatefromjpeg($_FILES['userfile']['tmp_name']); break;
       case 3: $source = imagecreatefrompng($_FILES['userfile']['tmp_name']); break;
 }
 // максимально допустимый размер
 // (по ширине/высоте) уменьшенной картинки
 $max_size = 250;
 if ( $params[0]>$max_size || $params[1]>$max_size ) {
     if ( $params[0]>$params[1] ) $size = $params[0]; # ширина
         else $size = $params[1]; # высота
         $resource_width = floor($params[0] * $max_size / $size);
         $resource_height = floor($params[1] * $max_size / $size);
         $resource = imagecreatetruecolor($resource_width, $resource_height);
 
             imagecopyresampled($resource, $source, 0, 0, 0, 0,
                                 $resource_width, $resource_height, $params[0], $params[1]);
 }
 
 else $resource = $source;
 // сохраняем уменьшенную картинку
 imagePng($resource, $uploadfile);
 imagedestroy($resource);
 imagedestroy($source);
    
     $sql = "
     INSERT INTO
         ads_next (name, text, userfile, page, date)
     VALUES
         ('$name','$text', '$uploadfile','$page','$time')
     ";
     mysql_query($sql);
 // Перезапрашиваем страницу
     header('Location: ' . $_SERVER['PHP_SELF']. '?id=' . $id);
     exit;       
 }
 ?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
>>> $params = getimagesize($_FILES['userfile']['tmp_name']);

Массива с такими данными может и не быть, если файл никакой во время отправки формы не был к ней присоединен.
 

ККлава

Новичок
Не буду врать,что сама разобралась, мне помогли решить проблему. Выложу код, может понадобится кому.
PHP:
<?php
$time=date("Y:m:d");
$uploaddir = 'uploads/';
$uploadfile = ""; // default empty

// Проверяем, была ли корректным образом отправлена форма
if (
    isset($_POST['name']) && !empty($_POST['name']) &&
    isset($_POST['page']) && !empty($_POST['page']) &&
    isset($_POST['time']) && !empty($_POST['time']) &&
    isset($_POST['text']) && !empty($_POST['text'])
)
{
    // Обрабатываем данные
    $name = stripslashes(trim(htmlspecialchars($_POST['name'],ENT_QUOTES)));
    $page = stripslashes(trim(htmlspecialchars($_POST['page'],ENT_QUOTES)));
    $time = stripslashes(trim(htmlspecialchars($_POST['time'],ENT_QUOTES)));
    $text = stripslashes(trim(htmlspecialchars($_POST['text'],ENT_QUOTES)));

     // if no errors, http://www.php.net/manual/en/features.file-upload.errors.php
     if ($_FILES['userfile']['error'] == UPLOAD_ERR_OK)
     {
	    $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

	    // лимит размера
	    if($_FILES["userfile"]["size"] > 2*1024*1024) {
	        exit ("<p> Размер файла больше 2МБ </p>");
	    }

	    // узнаем инфу о изображении
	    $params = getimagesize($_FILES['userfile']['tmp_name']);

	    // Проверка MIME
	    if ( !in_array(
		     $params['mime'],
		      array('image/gif', 'image/jpeg', 'image/png')
		))
		{
	        exit ("<p> Не тот формат файла </p>");
	    }

	       switch ( $params[2] ) {
	          case 1: $source = imagecreatefromgif($_FILES['userfile']['tmp_name']); break;
	          case 2: $source = imagecreatefromjpeg($_FILES['userfile']['tmp_name']); break;
	          case 3: $source = imagecreatefrompng($_FILES['userfile']['tmp_name']); break;
	       }

		  // максимально допустимый размер
		  // (по ширине/высоте) уменьшенной картинки
		  $max_size = 250;
		  if ( $params[0]>$max_size || $params[1]>$max_size ) {

		    if ( $params[0]>$params[1] )
		      $size = $params[0]; # ширина
		    else
		      $size = $params[1]; # высота

		    $resource_width = floor($params[0] * $max_size / $size);
		    $resource_height = floor($params[1] * $max_size / $size);
		    $resource = imagecreatetruecolor($resource_width, $resource_height);

		    imagecopyresampled($resource, $source, 0, 0, 0, 0,
		                       $resource_width, $resource_height, $params[0], $params[1]);
		  } else $resource = $source;

		 // сохраняем уменьшенную картинку
		 imagePng($resource, $uploadfile);
		 imagedestroy($resource);
		 imagedestroy($source);

    }
   
    $sql = "
    INSERT INTO
        ads_next (name, text, userfile, page, date)
    VALUES
        ('$name','$text', '$uploadfile','$page','$time')
    ";
    mysql_query($sql);

// Перезапрашиваем страницу
    header('Location: ' . $_SERVER['PHP_SELF']. "?id=$id");
    exit;       
}
?>
 

KorP

Новичок
PHP:
if(isset($_FILES['userfile']))
{
    ...
}
хотя странно, по сути твоё
PHP:
if($_FILES['userfile']['error'] == UPLOAD_ERR_OK)
должно аналогично отрабатывать...
 

ККлава

Новичок
Спасибо всем ответившим ))), может еще накидаете ссылочек (нормальных, понятных) на тему постраничного вывода информации? К примеру есть 40 объявлений, нужно на странице выводить не более 20. Не сочтите за наглость, может просто завалялись где в истории и не жалко поделиться? Спасибо.
 

HEm

Сетевой бобер
Извините за оффтопик, а при чем тут базы данных?
 
Сверху