Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Форма и добавление картинок, что не так?

#1 SURkiss

SURkiss
  • Пользователь
  • 22 сообщений
  • Репутация: 0
0

Отправлено 08 Апрель 2012 - 19:24

Всем привет. До недавнего времени добавлял картинки к статье на сайте с помощью ссылок, так как не хотел закидывать их к себе на сервер. Заколебалось уже их добавлять так и хочется, чтобы их размер и путь был добавлен с помощью php.
Вот форма через которую добавляю описание и постер.
<form action="add_serial.php" method="post" enctype="multipart/form-data">
  <p>Название:<br />
	<input name="title" type="text" id="title" size="60" />
  </p>
	<p>Автор:<br />
	<input name="author" type="text" id="author" size="60" />
  </p>
  <p>Ссылки на постер:</p>
  <p>Маленькая (для категорий):<br/>
<input name="mini_img" type="file" id="mini_img" size="60" />
  </p>
  <p>Большая (постер показывается внутри статьи):<br/>
  <input name="big_img" type="file" id="big_img" size="60" />
  </p>
  <p>
<p>Краткое описание (meta):</p>
   <p>
  <textarea name="meta_d" id="meta_d" cols="70" rows="5"></textarea>
   </p>
<p>Ключевые слова (через запятую) (meta):</p>
	<p>
   <textarea name="meta_k" id="meta_k" cols="70" rows="5"></textarea>
	</p>
<p>
   Дата добавления:<br />
<input name="date" type="date" id="date" value="<?php $date = date ("Y-m-d"); echo $date?>" />
  </p>
  <p><label for="video_insert">код-встава для видео:</p>
	</label>
	 <p><textarea name="video_insert" id="video_insert" cols="70" rows="15"></textarea></p>
  <p>
   Краткое описание:<br />
   <textarea name="description" id="description" cols="70" rows="5"></textarea>
   <br />
</p>
  <p>
	Полный текст статьи:<br />
<textarea name="text" cols="70" rows="35" id="text"></textarea>
</p>
<p>
<input type="submit" name="submit" id="submit" value="Отправить" /></p>
</form>
Вот содержание обработчика:
<?php
//добавление фото
if (isset ($_FILES['file']['name']) && !empty($_FILES['file']['name']))
{
//изменение картинки
function file_sm2($bil, $stal, $width, $height, $quality=100)
  { if (!file_exists($bil)) return false;
	$size = getimagesize($bil);
	if ($size === false) return false;
	$icfunc = imagecreatefromstring(file_get_contents($bil));
	$x_ratio = $width / $size[0];
	$y_ratio = $height / $size[1];
	$ratio	   = min($x_ratio, $y_ratio);
	$use_x_ratio = ($x_ratio == $ratio);
	$new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
	$new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
	$isrc = $icfunc;
	$idest = imagecreatetruecolor($new_width, $new_height);
	imagecopyresampled($idest, $isrc, 0, 0, 0, 0,
	$new_width, $new_height, $size[0], $size[1]);
	imagejpeg($idest, $stal, $quality);
	imagedestroy($isrc);
	imagedestroy($idest);
	return true;
  }

   //добавление изображений
   if (isset ($_FILES['file']['name']) && !empty($_FILES['file']['name'])) { $filedir = "pic/poster"; }
   $filename = $_FILES['file']['name'];
   $filesize = $_FILES['file']['size'];
   $dopus=array("gif","jpg","jpeg","png");
   $rash = strtolower(substr($filename, 1 + strrpos($filename, ".")));
   $filename = 'poster-'.time().".".$rash;
   if (!in_array($rash, $dopus))
   {
	$oshibka .= "<center><div class='alert'>
	Разрешены изображения с расширениями: gif, jpg, jpeg, png</div></center>"; $osh=1; }
	$tochka = substr_count($filename, ".");
	if ($tochka > 1)
	{ $oshibka .= "<center><div class='alert'>Запрещенный файл! Более одной точки</div></center>\r\n";
	}
	if (!preg_match("/^[a-z0-9\.\-_]+\.(jpg|gif|png|)+$/is",$filename))
	{ $oshibka .= "<center><div class=alert>
	Название изображения содержит запрещенные символы</div></center>";
	}
	$filekb = round($filesize/10.24)/100;
	$filexy=getimagesize($_FILES['file']['tmp_name']);
	$gor = $filexy[0];
	$ver = $filexy[1];
	if ($filesize > "0" && !isset($oshibka))
	{
	copy ($_FILES['file']['tmp_name'], $filedir."/".$filename);
  
	if (!empty($file)) { $maxgor=200;  $maxver=300; $sm_maxgor=120;  $sm_maxver=170; }
   if ($gor > $maxgor or $ver > $maxver)
   {
   if (file_sm2("$filedir/$filename", "$filedir/$filename", $maxgor, $maxver)) {  }
   else  { $oshibka .= '<div class=alert>Ошибка маштабирования</div>'; }
   }
   if (file_sm2("$filedir/$filename", "$filedir/sm_$filename", $sm_maxgor, $sm_maxver)) {  }
   else  { $oshibka .= '<div class=alert>Ошибка маштабирования</div>'; }
   $foto = 'da';
	}
	else { $oshibka .= '<center><div class=alert>Изображение не загружено!</div></center>';
	}
}
//конец добавления фото ^^
if (isset($title) && isset($meta_d) && isset($meta_k) && isset($description) && isset($text) && isset($author) && isset($cat) && isset($mini_img) isset($big_img) && isset($date))
{
/*Здесь выводиться информация о удачном добвалении*/
$result = mysql_query ("INSERT INTO data (title,cat,mini_img,big_img,meta_d,meta_k,date,description,text,author,video_links,promo,release_date,all_news,screens) VALUES ('$title','$cat','$mini_img','$big_img','$meta_d','$meta_k','$date','$description','$text','$author','$video_links','$promo','$release_news','$all_news','$screens')");
if ($result == 'true') {echo "<p>Сериал успешно добавлен и опубликован!</p>";}
else {echo "<p>Сериал не добавлен!</p>";}
}
else
{
echo "<p>Вы ввели не всю информацию, поэтому сериал не может быть добавлен.</p>";
}

?>
Вылазит ошибка, из-за вот этой строки: if (isset($title) && isset($meta_d) && isset($meta_k) && isset($description) && isset($text) && isset($author) && isset($cat) && isset($mini_img) isset($big_img) && isset($date))
Что не так я делаю и подскажите пожалуйста как начинающему, как добавить в базу результат изменения картинки к статье. Создается два файла и путь к каждому надо вписать в базу. Один в mini_img, второй в big_img.

Полный бред, но буду благодарен за помощь.

 

 

  • 0

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 08 Апрель 2012 - 20:03

Вылазит ошибка, из-за вот этой строки: if (isset($title) && isset($meta_d) && isset($meta_k) && isset($description) && isset($text) && isset($author) && isset($cat) && isset($mini_img) isset($big_img) && isset($date))


О том, какая ошибка, нам стоит лишь догадываться?

и подскажите пожалуйста как начинающему, как добавить в базу результат изменения картинки к статье


При помощи запроса UPDATE.
  • 0


#3 SURkiss

SURkiss
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 0

Отправлено 09 Апрель 2012 - 00:05

Ошибка вот какая: Parse error: syntax error, unexpected T_ISSET in /home/domen/domen.ua/www/administrator/add_serial.php on line 89
на 89 строке вот что
if (isset($title) && isset($meta_d) && isset($meta_k) && isset($description) && isset($text) && isset($author) && isset($cat) && isset($mini_img) isset($big_img) && isset($date))

Скрипт изменяет постер создавая две его копии. Строка в форме mini_img не нужна ведь? Можно же и так добавить путь к картинке которая загружается с помощью строки big_img?
  • 0

#4 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 09 Апрель 2012 - 07:54

Ошибка на этом участке:

&& isset($mini_img) isset($big_img) && isset($date)


Пропущено логическое И между $mini_img и $big_img
А вообще, правильнее было бы писать код так:

if (isset($title, $meta_d, $meta_k, $description, $text, $author, $cat, $mini_img, $big_img, $date))

Кроме просмотра видеокурсов рекомендую также читать мануалы, в которых о функции isset пишут, что ей можно подавать на вход несколько параметров, и тогда она вернет TRUE только если все они определены.
  • 1


#5 SURkiss

SURkiss
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 0

Отправлено 09 Апрель 2012 - 21:31

Подскажите ещё, пожалуйста, из-за чего в переменную mini_img и big_img не передаёт путь к картинке?

Чтобы записать путь в базу указываю переменную $filename
$result = mysql_query ("INSERT INTO test (mini_img,big_img) VALUES ('pic/poster/sm_$filename','pic/poster/$filename')");
В базу записывается только pic/poster/sm_ для mini_img и pic/poster/ для big_img соответственно. Файл загружается в папку, только путь не передаётся в базу, по какой причине?
  • 0

#6 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 10 Апрель 2012 - 10:10

По предыдущему вопросу Вы никак не прокомментировали - помогло, не помогло?..

из-за чего в переменную mini_img и big_img не передаёт путь к картинке?


Насколько я понял, mini_img, big_img - это не переменные, а имена полей в БД.
1) Смотрите попадает ли что-то в переменную $filename перед формированием запроса (проблема, скорее всего в этом):

echo $filename; die;

2) запрос лучше формировать, явно указывая переменную во избежание недоразумений:

$result = mysql_query ("INSERT INTO test (mini_img,big_img) VALUES ('pic/poster/sm_{$filename}','pic/poster/{$filename}')");

3) а вообще, в базу лучше записывать только имя картинки, а путь добавлять уже в скрипте... также, если комплект картинкок (миниатюра и картинка) имеют одинаковое имя (а так и должно быть при грамотном продумывании приложения), то достаточно в БД только одного поля под имя картинки... далее получаем имя картинки из БД и в скрипте имеем 2 переменные:

$big_img = 'pic/poster/'; // каталог с постерами
$mini_img = 'pic/mini/'; // каталог с миниатюрами
$img = ''; // сюда вытаскиваем имя картинки из БД
echo $big_img.$img; // выводим постер
echo $mini_img.$img; // выводим миниатюру

  • 1


#7 SURkiss

SURkiss
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 0

Отправлено 10 Апрель 2012 - 15:45

По предыдущему вопросу Вы помогли. Ошибка была именно из-за пропуска && и благодарю за правку кода. Тот способ, который указали, намного удобнее.
  • 0

#8 SURkiss

SURkiss
    Topic Starter
  • Пользователь
  • 22 сообщений
  • Репутация: 0

Отправлено 10 Апрель 2012 - 16:08

Большое спасибо Вам за помощь! Работает всё, заносит в базу и загружает файлы на сервер. И Вы правы, лучше и правда записывать только имя картинки, так удобнее и более правильно. Ещё раз спасибо.
  • 0

#9 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 10 Апрель 2012 - 19:24

Пожалуйста ^_^
  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru