Консультация № 43231
16.05.2006, 14:32
0.00 руб.
0 4 4
Здравствуйте, уважаемые эксперты! Нужна ваша помощь. Есть форма. В ней присутствуют поля тира text и file, т.е передаются текстовые данные и пользовательский файл(картинка). Подскажите, пожалуйста, как проверить размеры изображения(например, чтобы было не шире 200px), показать соотв. сообщение, но чтобы при этом текстовые данные не пришлось вписывать заново? Заранее очень благодарен!

Обсуждение

Неизвестный
16.05.2006, 14:39
общий
это ответ
Здравствуйте, Андрющенко Вячеслав Васильевич!

1) Когда делаешь аплоад, перед тем как сохранять файл из временной директории туда куда тебе надо примени функцию getimagesize
http://ru.php.net/manual/ru/function.getimagesize.php
2) Если размер нормальный, продолжай выполнение скрипта, перемещай файл и записываю инфу о нем куда-надо (например в БД)
Если размер не тот, покажи ту же страницу, просто изначально рисуй поля формы например так
для востановления данных
printf("<input type=text name=‘your_field‘ value=‘%s‘>", $_POST[‘your_field‘]);
Неизвестный
16.05.2006, 15:29
общий
это ответ
Здравствуйте, Андрющенко Вячеслав Васильевич!

Вот такой вариант, но на javascript. См. приложение.
То есть та же самая проверка, но на клиенте. Не нужно думать о резервировании полей, в случае ошибки.

Приложение:
<form name="form" action="Куда посылаем" method="post"><input type="file" name="img"><input type="submit" value="Send" OnClick="CheckWidthImg(img.value); return false;"></form><script language="JavaScript"><!--function CheckWidthImg(url) {myImage = new Image();myImage.src = url;if (myImage.width > "100") { alert("Ширина картинки не может быть шире 100 px"); return false;} else { form.submit();}}//--></script>
Неизвестный
17.05.2006, 09:41
общий
это ответ
Здравствуйте, Андрющенко Вячеслав Васильевич!
нужно просто проверить с помошью графичеких функций.
в приложении пример.


Приложение:
<?$larg=false;if(isset($_FILES[‘imag‘])){list($width, $height, $type, $attr) = getimagesize($_FILES[‘imag‘][‘tmp_name‘]);if ($width<=200){ //upload files}else {$larg=true}}?><form action="" method=post enctype="multipart/form-data"><input name="text"<? if($larg)echo " value=‘$_POST[text]‘"?>><input type=file name="imag"></form>
Неизвестный
17.05.2006, 16:04
общий
это ответ
Здравствуйте, Андрющенко Вячеслав Васильевич!
Проверка изображения - очень простая.
Фнукция
array getimagesize ( string filename [, array imageinfo])
решает все проблемы.
Returns an array with 4 elements. Index 0 contains the width of the image in pixels. Index 1 contains the height. Index 2 is a flag indicating the type of the image: 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF, 15 = WBMP, 16 = XBM. These values correspond to the IMAGETYPE constants that were added in PHP 4.3. Index 3 is a text string with the correct height="yyy" width="xxx" string that can be used directly in an IMG tag.
Пример с ней, из мануала:
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src="img/flag.jpg" $attr alt="getimagesize() example" />";

А данные вставить те которые были переданы - еще проще.
Есть несколько вариантов.
Первый, самый простой.
Пусть есть файл file.php:
<?php
$var = $_POST[‘var‘];
?>
<form action="file.php" method="POST">
<input type="text" name="var" value="<?=$var?>">

<input type="submit" value="submit">
</form>
Тут при первой загрузке файла будет форма с пустым значением. Если ввести значение в поле и отправить форму, то файл загрузится снова, но уже с тем значением что было введено.

Ты должен идти по тому же принципу. Только значений у тебя больше. Единственное - имя файла в <input type="file"> ты поставить снова не сможешь.

Можно по-другому. Принцип тот же, но с небольшими изменениями:
1)проверяем, подходит ли картинка. Если да, то грузим все из POST в MySQL
2)если нет, то в сессию. и открываем страничку, с формой.
3)Там смотрим, если сессия не пустая, то грузим из нее данные в форму, так же как в предыдущем примере из POST.

Преимущество этого подхода. Можно чтобы форма была в одном файле, а обрабатывать ее можно в другом.
Форма ответа