Помогите довести до ума скрипт

Статус
Закрыто для дальнейших ответов.

risya

Member
Регистрация
30.06.2010
Сообщения
10
Пытаюсь написать скрипт, который будет загружать изображение с описанием в бд (в бд - путь к изображению) вот что максимально получилось (записываются данные в бд - кроме пути к изображению, закидывается изображение в папку, и не получается цикл который выводит ошибку в случае если не все поля заполнены)

Код:
<?  $path=GetCWD()."/books"; 
include ('db.php');
if (isset($_POST['title'])) {$title = $_POST['title']; if ($title == '') {unset ($title);}}
if (isset($_POST['price'])) {$price = $_POST['price']; if ($price == '') {unset ($price);}}
if (isset($_POST['text'])) {$text = $_POST['text']; if ($text == '') {unset ($text);}}
if (isset($_POST['UserFile'])) {$UserFile = $_POST['UserFile']; if ($UserFile == '') {unset ($UserFile);}}
  
  if (isset($title) && isset($price) && isset($text)) {
	$result = mysql_query ("INSERT INTO books (title,image,text,price) VALUES ('$title','$UserFIle','$text','$price')");}
  if(empty($_FILES['UserFile']['tmp_name'])) 
echo "<form method=post enctype=multipart/form-data>
<p>
    <label>Введите название книги<br>
      <input  name='title' type='text' id='title' size='40' />
    </label>
  </p>
<p>
    <label>Введите описание<br>
<textarea name='text' id='text' cols='40' rows='10'></textarea>
    </label>
  </p>
  <p>
    <label>Введите цену книги<br />
<input type='text' name='price' id='price' />
    </label>
  </p>
<p>Выберите изображение:</p> <input type=file name=UserFile> <input type=submit value=Отправить> 
</form>"; 
elseif(!is_uploaded_file($_FILES['UserFile']['tmp_name'])) die("<b><font color=red>Не удалось загрузить изображение</font></b>"); 
else {  
if(@!copy($_FILES['UserFile']['tmp_name'],$path.chr(47).$_FILES['UserFile']['name'])) die("<b><font color=red>Изображение не было скопировано</font></b>");     
else     echo "Книга успешно добавлена"; 
} 

?>
 

Romani

Well-Known Member
Регистрация
08.01.2010
Сообщения
462
isset() заменить на $text!==""
 

risya

Member
Регистрация
30.06.2010
Сообщения
10
if (isset($title) && isset($price) && isset($text))
вот здесь заменить?

но все равно, это не решает то что я хочу сделать

вот такую работоспособную форму хотелось бы сделать)

Посмотреть вложение scrin_book.bmp
 

blackcot

Well-Known Member
Регистрация
10.09.2009
Сообщения
439
Что конкретно не получается и что хотите увидеть?
В Вашем скрипте ошибки синтаксиса - возьмите оператор echo с HTML кодом формы в фигурные скобки.
 

Serg@NT

Well-Known Member
Регистрация
20.02.2010
Сообщения
506
1) Сильно сомневаюсь, что вот это: $UserFile = $_POST['UserFile'] будет работать.
Файл надо сохранить на диске и уж потом записать его в БД.
Код:
if(copy($_FILES['UserFile']['tmp_name'], $path))
   unlink($_FILES['UserFile']['tmp_name']);
Этот код сохранит файл в папке с путём $path и удалит временную копию. Потом уже $path и записывайте в БД. Кстати, не забудьте дать доступ для записи в эту папку.

2) Проверьте вложенность операторов:
Код:
if (isset($_POST['title'])) {$title = $_POST['title']; if ($title == '') {unset ($title);}}
Думается, что if ($title == '') надо вывести за пределы внешнего if.

Как уже писали:
3) Вот это:
Код:
if (isset($title) && isset($price) && isset($text)) {
можно заменить на:
Код:
if ($title && $price && $text) {
4) Всю форму, выводимую вами через echo лучше сделайте на обычном html, это позволит избежать проблем с кавычками и прочим:
Код:
if(empty($_FILES['UserFile']['tmp_name']))
?>
<form method=post enctype=multipart/form-data>
<p>
...
</form>
<?php
elseif...
 

risya

Member
Регистрация
30.06.2010
Сообщения
10
Спасибо, сейчас буду пробовать))
 

risya

Member
Регистрация
30.06.2010
Сообщения
10
уже получше стало, файл в папку грузит, имя в бд прописывает.
осталось с проверками разобраться - если не все текстовые поля заполнены данные в бд не отправляются (+ еще не разобралась как ошибку при этом вывести), если текстовые поля введены, а файл не выбран - данные в бд записываются все кроме изображения, а если выбран файл - в бд не записывает, но файл в папку загружает...


<?php
include ('db.php');
$path=GetCWD()."/books";

if (isset($_POST['title'])) {$title = $_POST['title']; if ($title == '') {unset ($title);}}
if (isset($_POST['text'])) {$text = $_POST['text']; if ($text == '') {unset ($text);}}

?>


<?php if (isset($title) && isset($text)) {
$name=$_FILES['UserFile']['name'];
$result = mysql_query ("INSERT INTO books (title,image,text) VALUES ('$title','$name','$text')");}
if(empty($_FILES['UserFile']['tmp_name'])) {
?>
<form method=post enctype=multipart/form-data>
<p>
<label>Введите название книги<br>
<input name='title' type='text' id='title' size='40' />
</label>
</p>
<p>
<label>Введите описание<br>
<textarea name='text' id='text' cols='40' rows='10'></textarea>
</label>
</p>

<p>Выберите изображение:</p> <input type=file name=UserFile> <input type=submit value=Отправить>
</form>
<?php
}
elseif(!is_uploaded_file($_FILES['UserFile']['tmp_name'])) die("<b><font color=red>Не удалось загрузить изображение</font></b>");
else {
if(@!copy($_FILES['UserFile']['tmp_name'],$path.chr(47).$_FILES['UserFile']['name'])) die("<b><font color=red>Изображение не было скопировано</font></b>");
else echo "<p>Книга успешно добавлена</p> <p><a href='upload_book.php'>Вернуться</a></p>";
}

?>

еще один вопрос, не по теме)

подскажите, хочу сделать чтобы изображения выводились примерно одинакового размера, но если задать пиксели они будут искажаться... хочу сделать чтоб на белом фоне например 200х200 выводилось изображение и было оно уменьшено пропорционально. как такое можно сделать или как это называется, не могу найти!

спасибо)
 

Serg@NT

Well-Known Member
Регистрация
20.02.2010
Сообщения
506
Сохранение файла в папке нужно писать ДО того, как производите добавление записи в БД. И, я ж написал, в базе сохраняется $path, а не имя файла на компьютере пользователя. Сохранили, в $path записали путь, где сохранили, потом это значение в базу уже.

По второму вопросу:
Код:
function resizeimg($filename, $smallimage, $w, $h)
{
 $filename = $filename;
 $ext = strtolower(strrchr($filename, "."));
 $smallimage = $smallimage;
 $ratio = $w/$h;
 $size_img = getimagesize($filename);
 $src_ratio = $size_img[0]/$size_img[1];
 if($size_img[0] > $w || $size_img[1] > $h)
 {
 	//вычисляем размеры уменьшенной копии
 	if($ratio < $src_ratio) $h = $w/$src_ratio;
 	else $w = $h*$src_ratio;
 
 	//создаём пустое изображение
 	$dest_img = imagecreatetruecolor($w, $h);
 	switch ($ext) {
 		case ".gif": 
 			$src_img = imagecreatefromgif($filename);
 			imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
 			imagegif($dest_img, $smallimage);
 			imagedestroy($src_img);
 			break;
 		case ".jpg":
 			$src_img = imagecreatefromjpeg($filename);
 			imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
 			imagejpeg($dest_img, $smallimage);
 			imagedestroy($src_img);
 			break;
 	} 			
 	//очищаем память
 	imagedestroy($dest_img);
 }
 return true;
}
Работает для изображений gif и jpg.
$filename - исходный путь к файлу,
$smallimage - путь, куда сохранить уменьшенный файл,
$w - ширина в пикселях,
$h - высота в пикселях.
Если размеры исходного изображения больше заданный, выбирает наименьшее из ширины и высоты и подгоняет под неё другой параметр.
 

risya

Member
Регистрация
30.06.2010
Сообщения
10
спасибо большое! буду делать)
 
Статус
Закрыто для дальнейших ответов.
Верх Низ