|
|
|
| При заполнении формы возможно ли реализовать загрузку картинок во временный каталог с созданием уменьшенной копии?
Если форма заполнена верно то, изображения сохраняются в соответствующий каталог, если нет, то удаляются. Хотя бы принцип может кто-нибудь объяснить? Спасибо. | |
|
|
|
|
|
|
|
|
для: sim5
(17.11.2008 в 13:22)
| | =)
Вы всех туда отправляете? | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 13:25)
| | А вам что надо? Готовый скрипт или понять как это делается? Если второе, то не мешает прочитать по этому поводу документацию. | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 13:00)
| | Вот скриптик неплохой, я где то здесь находил. Делает уменьшенные копии.
$filename - путь до превьюшки
$w - максимальнй размер
<?
function resizeimg($filename, $w)
{
$h = $w;
$size_img = getimagesize($filename);
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
$src_ratio=$size_img[0]/$size_img[1];
if ($src_ratio > 1)
{
$h = $w/$src_ratio;
}
else
{
$w = $h*$src_ratio;
}
$dest_img = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename);
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
if ($size_img[2]==2) imagejpeg($dest_img, $filename);
else if ($size_img[2]==1) imagegif($dest_img, $filename);
else if ($size_img[2]==3) imagepng($dest_img, $filename);
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
?>
|
| |
|
|
|
|
|
|
|
для: Николай2357
(17.11.2008 в 13:31)
| | >Вот скриптик неплохой, я где то здесь находил. Делает уменьшенные копии.
> if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
> if ($size_img[2]==2) imagejpeg($dest_img, $filename);
Вы ничего не напутали? | |
|
|
|
|
|
|
|
для: Trianon
(17.11.2008 в 14:02)
| | хорошо, тогда вопрос такой, допустим загрузили, создали уменьшенный копии, но пользователь отказался от заполнения формы, как удалить загруженные им изображения?
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 14:13)
| | Значит не читали то, что я вам сказал прочитать, иначе бы вопроса об удаленни не было. А если пользователь отправил форму (в которой и передается файл), то о каком отказе может идти речь? | |
|
|
|
|
|
|
|
для: sim5
(17.11.2008 в 14:16)
| | отказ в том, что после передачи формы post идет проверка на наличие ошибок. | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 14:20)
| | Когда вы принимаете форму, которая передает файл, тогда, перед сохранением изображения (!), и проверяется наличие ошибок. Но каких ошибок имеется ввиду? Если это ошибка, например, связанная с большим размером файла, то файл не будет закачан на сервер. Остальное, это выши условия. Кроме передачи файла, форма может передавать и другую информацию, так что "отказ/подтверждение" ваше и загрузкау файла организовывайте одной формой. | |
|
|
|
|
|
|
|
для: sim5
(17.11.2008 в 14:33)
| | Да, я вас понял. Я имел ввиду ошибки в других полях формы, хорошо опустим это. Но, если они есть, и изображения не загружены, то пользователя придется каждый раз их снова загружать, ну или указывать к ним путь (пока в форме не останется ошибок), а это не есть удобно, вы согласны? Поэтому я и спрашивал, как сделать, чтобы при первой передаче формы, изображения загружались бы (если конечно ошибки не связаны с самими файлами), а если в форме так и остались ошибки и пользователь бросил ее заполнять, то изображения удалялись бы...
Так более-менее понятно? =) | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 14:41)
| | Вы читали или нет мануал? Там черным по белому написано, что файл загружаются во временную папку, которая указана в переменной окружения сервера, и что вы обязаны перемещать его в конечную папку назначения, ибо этот файл будет удален мусорщиком в конечном итоге. Кто вас заставляет копировать этот файл, не проверив какие-то ошибки пользователя в этой же форме? | |
|
|
|
|
|
|
|
для: sim5
(17.11.2008 в 14:52)
| | Не нужно нервничать... )
Я понял Вас, а как узнать путь к данному файлу? И можно ли когда он находится во временной директории создать его уменьшенную копию? | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 15:05)
| | Было бы из-за чего нервничать. Какой путь? Прочтите мануал. | |
|
|
|
|
|
|
|
для: sim5
(17.11.2008 в 15:08)
| | >> Там черным по белому написано, что файл загружаются во временную папку
Путь к временной папке. | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 15:09)
| | А он вам нужен? Посмотрите пример загрузки файла, который есть в мануале. | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 14:41)
| | >Но, если они есть, и изображения не загружены, то пользователя придется каждый раз их снова загружать, ну или указывать к ним путь (пока в форме не останется ошибок), а это не есть удобно,
Сделайте валидацию на аяксе и проблема отпадет сама собой. | |
|
|
|
|
|
|
|
для: Николай2357
(17.11.2008 в 15:44)
| | человек с загрузкой картинок справиться не может, а Вы его в в аякс отправляете.
ну не звер? :) | |
|
|
|
|
|
|
|
для: Trianon
(17.11.2008 в 15:59)
| | Если сделать на ajaxe загрузку, допустим так
<form name="form1" method="post" action="" enctype="multipart/form-data">
<input type="file" name="photo" id="photo" onchange="javascript: sendSearchRequest_3();">
</form>
|
То в результате, получаем путь до картинки - D:\documents\30d349ec6038.jpg
Исходя из этого, можно как-то ее загрузить, не пойму.
Спасибо за ответ. | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 21:46)
| | Загружается все посто, без аякса. Это только проверка. А приемник должен быть другим, у Вас есть уже наверно. А чтоб картинку загрузить, читайте, что Вам посоветовали. Просто при такой проверке не нужно каждый раз файл в поле засовывать. Форма отправится только тогда, когда пройдет валидация. | |
|
|
|
|
|
|
|
для: kis-kis
(17.11.2008 в 21:46)
| | Если вы установите ограничение, например, на тип файла, на его размер, на разрешение (если это картинка), то весь AJAX, это с боку припека будет, так как вышеуказанные ограничения вы сможите проверить только после загрузки файла на сервер. Забудьте вы о AJAX, научитесь сперва простому. Путь до картинки на локальном компьютере вам совсем не нужен, вся суть загрузки разъясняется в одной функции - move_uploaded_file(). | |
|
|
|
|
 2.2 Кб |
|
|
для: sim5
(18.11.2008 в 09:21)
| | Хорошо, посмотрите, плиз, вложенный файл.
Если Вы загрузите картинку, и не заполните текстовое поле, то потом вам будет нужно снова их загружать. Разве я не прав? (хотя в приведенном мной примере они загружаются в любом случае, даже если текст. поле не заполнено).
Тогда вопрос, а как сделать, рядом с полем file - маленькое превью из файлов с названием s_?
Можно конечно сделать так
<input type=\"hidden\" name=\"p1\" value=\"".$_FILES["photo_1"]['name']."\">
|
И путь к картинке тогда будет выглядеть так - <img src=\"s_".$_POST['p1']."\">
Но если трижды отправить форму с незаполненным текст. полем, то картинка теряется. Можно ли это исправить?
Спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(18.11.2008 в 10:02)
| | Пороверку ввода текстовых полей, выбор селекта и т.п.., это уже Ajax, если не хотите перезагрузки. А остальное выбросить, еще раз вернуться к мануалу, прочитать, и уяcнить, что не стоит для загрузки файлов на сервер использовать функцию copy(), для этого существует функция move_uploaded_file() !
Если нет ошибок при загрузке файла на сервер (в частности получем его размер и другое), то ни к чему проверять на "пустоту" временное имя файла. | |
|
|
|
|
|
|
|
для: sim5
(18.11.2008 в 10:09)
| | Мы никак не можем понять друг друга. На счет copy() понял, вот пример, что я хочу получить.
_http://www.e1.ru/auto/sale/manage.php
Посмотрите, плиз, так станет понятно. Просто загрузите, одно фото не заполняя ниодного поля. Заранее спасибо. | |
|
|
|
|
|
|
|
для: kis-kis
(18.11.2008 в 10:38)
| | Какое фото и о какой загрузке речь, если это страница с регистрацией? | |
|
|
|
|
|
|
|
для: sim5
(18.11.2008 в 10:41)
| | Да, с регистрацией, я Вам в пм отправил данные, чтобы Вы посмотрели. | |
|
|
|
|
|
|
|
для: kis-kis
(18.11.2008 в 10:51)
| | Чего смотреть? Суть проста. Если вы, например, загрузите изображение от пользователя себе на сервер только в том случае, пока он не представиться в текстовом поле как "Петя", то проверяя это текстовое поле, вы будете знать "Петя" он или нет. И пока нет, возвращаете ему назад форму, пусть вводит "Петя". Как только вы получили необходимое, проверяете параметры присланного файла ($_FILES). Если загрузка файла прошла без ошибок ($_FILES['fielname']['error'] - не содержит ошибок), проверяете условия на загрузку файлов. Если условия не удовлетворяют вашим, возвращаете форму пользователю с полем имени уже заполненным ранее пользователем (Петя). И так, пока у кого нервы крепче - у Пети или у вашего скрипта :)
Как только все если в норме, вот тут и копируйте функцией move_uploaded_file() файл из временной папки в папку назначения.
А если вы не хотите постоянной перезагрузки страницы при ошибках ввода (но только текстовых полей, списков, радиокнопок, чекбоксов и т.п.), то используйте Ajax - вам уже приводили пример этого.
PS. Атрибут value поля элемента file формы только для чтения! А это значит, что вы не сможете указать ему значение, например, путь к файлу на локальной машине, которое вы можете получить от пользователя при отправке формы. Другими словами, при ошибках загрузки изображения, этот путь можете выбросить в помойку - присвоить его форме уже нельзя. Пользователь обязан выбрать файл вновь. Отсюда - хотите чтобы картиночку показывало рядом с полем выбора, значит используйте JS. На время "работы" страницы на стороне пользователя, он будет видеть картиночку выбранного файла. | |
|
|
|
|
|
|
|
для: sim5
(18.11.2008 в 11:03)
| | - | |
|
|
|
|
|
|
|
для: sim5
(18.11.2008 в 11:03)
| | Отсюда - хотите чтобы картиночку показывало рядом с полем выбора, значит используйте JS. На время "работы" страницы на стороне пользователя, он будет видеть картиночку выбранного файла.
Не поможете реализовать? :) | |
|
|
|
|
|
|
|
для: kis-kis
(18.11.2008 в 11:47)
| | Ну если вам это так нужно, то в разделе HTML+JS есть примеры вывода картинок. Разница для вас будет лишь в том, что вы будете путь к картинке указывать локалного компьютера, полученный от атрибута value элемента file, а не сетевой. Сами примеры есть в указанном разделе, смотрите.
Собственно самый простой пример, это сделать видимым, после выбора пользователем изображения, например, элемент DIV с необходимым позиционированием относительно поля формы, в котором прописан элемент IMG, src которому вы и указываете тот, что получите у поля file. Размеры изображения укзывать в процентах, в сторону уменьшения, вот вам и предпросмотр. | |
|
|
|
|
|
|
|
для: sim5
(18.11.2008 в 11:57)
| | Спасибо, сейчас попробую. | |
|
|
|
|
|
|
|
для: Trianon
(17.11.2008 в 14:02)
| | Вы что так пугаете... :)))
Чего ж так к словам то цепляться... Ну ладно, пусть будет так:
Вот скриптик неплохой, я где то здесь находил. Уменьшает загруженное изображение.
Хотя какя по большому счету разница... Это разве не копия того, что загружает клиент? | |
|
|
|
|
|
|
|
для: Николай2357
(17.11.2008 в 15:39)
| | >Вы что так пугаете... :)))
>Ну ладно, пусть будет так:
>Вот скриптик неплохой, я где то здесь находил. Уменьшает загруженное изображение.
Уменьшает любое.
>Хотя какя по большому счету разница... Это разве не копия того, что загружает клиент?
Из скрипта ни коим образом не следует.
>Чего ж так к словам то цепляться...
доброй половине изрядному числу вопрошающих здесь не заржавеет напустить его на все картинки в каталоге. | |
|
|
|
|
|
|
|
для: Trianon
(17.11.2008 в 16:02)
| | >изрядному числу вопрошающих здесь не заржавеет напустить его на все картинки в каталоге.
в муках рождается истина... :))
>человек с загрузкой картинок справиться не может, а Вы его в в аякс отправляете.
ну не звер? :)
действительно... бум реабелитироваться.
ajax.js
//Здесь путь от страницы до PHP модуля
var file="valid.php";
function Pusk()
{
var m1, m2;
// Вынимаются данные регистрации.
m1=window.document.getElementById('login').value;
m2=window.document.getElementById('password').value;
// Можно еще добавлять через амперсанд
query="login="+m1+"&password="+m2;
Request(query, file);
}
// Запрос
var req = Create();
function Create()
{
if(navigator.appName == "Microsoft Internet Explorer"){
req = new ActiveXObject("Microsoft.XMLHTTP");
}else{
req = new XMLHttpRequest();
}
return req;
}
function Request(query, file)
{
req.open('post', file, true );
req.onreadystatechange = Valid;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
req.send(query);
}
// Вывод.
function Valid()
{
var a = req.readyState;
var b = req.responseText;
if ( a == 4 && b == 100)// Если условный сигнал - сабмитится форма
window.document.getElementById('userform').submit();
if(a == 4 && b != 100 )// Если нет сигнала, выводятся ошибки
window.document.getElementById('result').innerHTML = req.responseText;
}
|
valid.php
<?php
// Кэшировать аякс нельзя, иначе динамики не будет вот заголовки против кэша
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
// Инициализация
$login=isset($_POST['login'])?$_POST['login']:null;
$password=isset($_POST['password'])?$_POST['password']:null;
$error=array();
// Проверка
if(!$login) $error[]="Вы не написали имя логин";
if(!$password) $error[]="Вы не написали пароль";
if(count($error)!== 0)
{
for($i=0; $i < count($error); $i++)
$err.= ($i+1).".....".$error[$i]."<br>";
$echo= "<b><em style='color:red'>Ошибка:</em></b><br>".$err;
}
else
{
$echo=100; // Если нет ошибок - выводим условный сигнал.
}
echo $echo;
?>
|
сюда можно сессию прикрутить и получится вполне сносно.
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" />
<script type="text/javascript" src="ajax.js"></script>
</head>
<body>
<form id="userform" method="post" enctype="multipart/form-data">
<div id="result"></div>
<input id="login" type="text" /><br />
<input id="password" type="password" /><br />
<input id="file" type="file" /><br />
<input type="button" onclick="Pusk()" value="пошел" />
</form>
</body>
</html>
|
обратите внимание на кодировки. | |
|
|
|