Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > загрузка картинки и отправка на емайл


Автор: supervladislav 19.4.2008, 21:59
Подскажите ,что я делаю неправильно???
Задача такая чтоб загружаемые файлы отправлялись на мыло ,но в каталог ни у провайдера ни у меня ничего незаписывается ,да и странно как-то емайл должен приходить ,а он почему-то ничего 
неотправляет.да и неподскажите как в майл картинку впихнуть а то я весь форум облазил и ненашол?


Код

<table cellpadding="0" cellspacing="0" border="0" align="center" width="80%">
<tr valign="top">
<form action="" method="post" enctype="multipart/form-data">
<td align="left">Ваше имя:</td>
<td align="left"><input size="30" name="name" type="text">
<?php if(empty($_POST['name']) && $_SERVER['REQUEST_METHOD']=='POST'){echo("<font color=red><br>Пожалуйста введите ваше имя</font>");} ?>
</td>
</tr>
<tr valign="top">
<td align="left">Ваша фамилия:</td>
<td align="left"><input size="30" name="famili" type="text">
<?php if(empty($_POST['famili']) && $_SERVER['REQUEST_METHOD']=='POST'){echo("<font color=red><br>Пожалуйста введите вашу фамилию</font>");} ?>
</td>
</tr>
<tr valign="top">
<td align="left">Ваш емайл для связи:</td>
<td align="left"><input size="30" name="mail" type="text">
<?php if(empty($_POST['mail']) && $_SERVER['REQUEST_METHOD']=='POST'){echo("<font color=red><br>Пожалуйста введите свой email</font>");} ?>
</td>
</tr>
<tr valign="top">
<td align="left">Причина вашего обрашения:</td>
<td align="left"><textarea name="text" rows="10" cols="22" type="text"></textarea>
<?php if(empty($_POST['text']) && $_SERVER['REQUEST_METHOD']=='POST'){echo("<font color=red><br>Пожалуйста введите вашу причину обращения ко мне</font>");} ?></td>
<tr valign="top">
<td align="left""><br><br>Первое загружаемое изображение:</td>
<td align="left"><br><br><input size="30"  type="file" name="file1"></td>
</tr>
<tr valign="top">
<td align="left">Второе загружаемое изображение:</td>
<td align="left"><input size="30" type="file" name="file2"></td>
</tr>
<tr valign="top">
<td align="left">Третье загружаемое изображение:</td>
<td align="left"><input size="30" type="file" name="file3"></td>
</tr>
<tr valign="top">
<td colspan="2" align="center"><br><input size="30" type="submit" value="Оправить" ></td>
<tr>
</form>




</table>











Код

<?php

$uploadfiles='./upload';
if(!empty($_POST['name']) &&  !empty($_POST['famili']) && !empty($_POST['email']) && !empty($_POST['text']) && $_SERVER['REQUEST_METHOD']=='post')
{
$vse.=$_POST['name']."\n";
$vse.=$_POST['famili']."\n";
$vse.=$_POST['email']."\n";
$vse.=$_POST['text']."\n";
$files1=$uploadfiles.basename($_FILES['file1']['name']);
$files2=$uploadfiles.basename($_FILES['file2']['name']);
$files3=$uploadfiles.basename($_FILES['file3']['name']);
if(move_uploaded_file($_FILES['file1']['tmp_name'],$files1) && $_FILES['file1']['type']=='image/jpeg' && $_FILES['file1']['size']<=524288000)
{echo "файл".$files1."загружен";} 
if(move_uploaded_file($_FILES['file2']['tmp_name'],$files2) && $_FILES['file2']['type']=='image/jpeg' && $_FILES['file2']['size']<=524288000)
{echo("файл".$files2."загружен");} 
if(move_uploaded_file($_FILES['file3']['tmp_name'],$files3) && $_FILES['file3']['type']=='image/jpeg' && $_FILES['file3']['size']<=524288000)
{echo("файл".$files3."загружен");}
if(mail("angels_fall_first@rambler.ru","заказ с моего сайта Magicenergy",$vse,"Content-type: text/html; charset=windows-1251 \n")){
echo("емайл отправлен");
}}

?>

Автор: skyboy 19.4.2008, 22:37
Цитата(supervladislav @  19.4.2008,  20:59 Найти цитируемый пост)
но в каталог ни у провайдера ни у меня ничего незаписывается ,да и странно как-то емайл должен приходить ,а он почему-то ничего 

ты определись.
либо не загружается картинка.
либо не формируется письмо.
либо не отправляется письмо.
либо не доходит письмо(к примеру, неправильно сформировано).
какого крокодила рещать вопрос "тут что-то не так в этой куче"? почему не разделять задачу?

Автор: supervladislav 19.4.2008, 22:38
Цитата(skyboy @ 19.4.2008,  22:37)
Цитата(supervladislav @  19.4.2008,  20:59 Найти цитируемый пост)
но в каталог ни у провайдера ни у меня ничего незаписывается ,да и странно как-то емайл должен приходить ,а он почему-то ничего 

ты определись.
либо не загружается картинка.
либо не формируется письмо.
либо не отправляется письмо.
либо не доходит письмо(к примеру, неправильно сформировано).
какого крокодила рещать вопрос "тут что-то не так в этой куче"? почему не разделять задачу?

незаписывается файл в директорию 

Автор: Fortop 19.4.2008, 22:54
Код

$uploadfiles='./upload';
$files3=$uploadfiles.basename($_FILES['file3']['name']);


слеш пропустил между $uploadfiles и basename();

добавь предопределенную константу DIRECTORY_SEPARATOR между ними.

Автор: skyboy 19.4.2008, 22:55
ни один? тогда зачем куча кода?
приведи:
а) код html формы
б) содержимое массива $_FILES в скрипте-обработчике формы
в) права на каталог, в который пытаешься записать файлы

Автор: supervladislav 20.4.2008, 00:33
права всё окей с правами в ручную ставил ,сам код копирования и добовления файла правильный????

Автор: Fortop 20.4.2008, 00:46
Цитата(Fortop @  19.4.2008,  22:54 Найти цитируемый пост)
слеш пропустил между $uploadfiles и basename();

Еще раз повторить?

Если ты тестировал, то рядом с скриптом должна было образоваться пачка файлов чье имя начинается на "upload"

Автор: supervladislav 20.4.2008, 00:47
поменял на вот так -всёравно ничего ,но в массиве файлес инфа о них есть проверял
Код

print_r($_FILES);


Код

$uploadfiles='./upload/';
if(!empty($_SERVER['REQUEST_METHOD']=='post'))
{
$vse.=$_POST['name']."\n";
$vse.=$_POST['famili']."\n";
$vse.=$_POST['email']."\n";
$vse.=$_POST['text']."\n";
$files1=$uploadfiles.DIRECTORY_SEPARATOR.basename($_FILES['file1']['name']);
$files2=$uploadfiles.basename($_FILES['file2']['name']);
$files3=$uploadfiles.basename($_FILES['file3']['name']);
if(move_uploaded_file($_FILES['file1']['tmp_name'],$files1) && $_FILES['file1']['type']=='image/jpeg' && $_FILES['file1']['size']<=524288000)
{echo "файл".$files1."загружен";}
if(move_uploaded_file($_FILES['file2']['tmp_name'],$files2) && $_FILES['file2']['type']=='image/jpeg' && $_FILES['file2']['size']<=524288000)
{echo("файл".$files2."загружен");}
if(move_uploaded_file($_FILES['file3']['tmp_name'],$files3) && $_FILES['file3']['type']=='image/jpeg' && $_FILES['file3']['size']<=524288000)
{echo("файл".$files3."загружен");}
i}

?>


?>

Автор: Fortop 20.4.2008, 00:52
supervladislav, 
Я сразу не обратил внимание. НО

Это уже второй случай за последние 2 дня.
Код

<tr valign="top">
<form action="" method="post" enctype="multipart/form-data">
<td align="left">Ваше имя:</td>


так не НАДО делать

оберни таблицу формой

Код

<form>
<table>
тут твои поля
</table>
</form>


Добавлено @ 00:56
Вот предыдущий http://forum.vingrad.ru/index.php?showtopic=207100&view=findpost&p=1484157

Добавлено @ 00:57
К слову сказать, автор предыдущей темы более точно диагностировал проблемы. Поэтому большая просьба прочитай вот эту статью
http://forum.vingrad.ru/articles/topic-206796.html
http://forum.vingrad.ru/forum/topic-27230.html
и все что найдешь на форуме про отладку

Автор: supervladislav 20.4.2008, 02:05
Весьма польщён за разъяснения ,но дело в том ,что  у меня вобще ошибок не выдаётся!!!!
несовсем понимаю как скрипт того товарища связан с моим 
но в в массиве $_FILES вот такое 
Array ( [file1] => Array ( [name] => IMG_0075.jpg [type] => image/jpeg [tmp_name] => Z:\tmp\php73C.tmp [error] => 0 [size] => 280235 ) [file2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [file3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )

Автор: Fortop 20.4.2008, 02:29
1. связаны тем, что вы рвете форму таблицей. Не все браузеры (в частности FireFox) всегда корректно обрабатывают такие вещи
2. надо было добавить либо слэш в конце $uploadfiles,
либо все имена файлов сделать как у $files1 с DIRECTORY_SEPARATOR. Но что-то одно smile
3. также может быть полезным использовать не относительный путь а
Код

$uploadfiles = realpath('./upload/');

4. Поскольку $_FILES у тебя все-таки не пустой, то выведи на экран сами имена
$files1, $flies2, $files3.
Чтобы быть твердо уверенным, что у тебя правильно сформировались пути и там куда ты пытаешься копировать, есть нужный каталог smile

Добавлено через 11 минут и 29 секунд
Да и еще, ты уверен, что 

Код

if($_SERVER['REQUEST_METHOD']=='post')


выполняется?

Добавлено через 12 минут и 58 секунд
Цитата(supervladislav @  20.4.2008,  02:05 Найти цитируемый пост)
но дело в том ,что  у меня вобще ошибок не выдаётся!!!!

Чтобы включить вывод ошибок - вначале скрипта добавь

Код

error_reporting(E_ALL);

Автор: supervladislav 20.4.2008, 03:02
вот так усё изменил ,то что в переменных $files1 он невыводит))))на счёт POST нет хотя регистр поменял неизменилось ничего,ошибки выдавались на $files типа неизвестная переменная ,но переписал их вначало все ошибки исчезли


Код

<?php
error_reporting(E_ALL);
$uploadfiles='./upload';
if($_SERVER['REQUEST_METHOD']=='POST'))
{

$files1=$uploadfiles.DIRECTORY_SEPARATOR.$_FILES['file1']['name'];
$files2=$uploadfiles.DIRECTORY_SEPARATOR.$_FILES['file2']['name'];
$files3=$uploadfiles.DIRECTORY_SEPARATOR.$_FILES['file3']['name'];
echo($files1);
echo($files2);
echo($files3);
if(!move_uploaded_file($_FILES['file1']['tmp_name'],$files1) && $_FILES['file1']['type']=='image/jpeg' && $_FILES['file1']['size']<=524288000)
{echo "файл".$files1."загружен";}
if(!move_uploaded_file($_FILES['file2']['tmp_name'],$files2) && $_FILES['file2']['type']=='image/jpeg' && $_FILES['file2']['size']<=524288000)
{echo("файл".$files2."загружен");}
if(!move_uploaded_file($_FILES['file3']['tmp_name'],$files3) && $_FILES['file3']['type']=='image/jpeg' && $_FILES['file3']['size']<=524288000)
{echo("файл".$files3."загружен");}
}



?>

Автор: Fortop 20.4.2008, 03:29
Цитата(supervladislav @  20.4.2008,  03:02 Найти цитируемый пост)
то что в переменных $files1 он невыводит))))

Значит оно не проходит условие
Код

if($_SERVER['REQUEST_METHOD']=='POST'))


Добавлено @ 03:30
У меня отлично работает

Код

error_reporting(E_ALL);
$uploadfiles=realpath('./upload');
if($_SERVER['REQUEST_METHOD']=='POST')
{
$files1=$uploadfiles . DIRECTORY_SEPARATOR . basename($_FILES['file1']['name']);
$files2=$uploadfiles . DIRECTORY_SEPARATOR . basename($_FILES['file2']['name']);
$files3=$uploadfiles . DIRECTORY_SEPARATOR . basename($_FILES['file3']['name']);
if(move_uploaded_file($_FILES['file1']['tmp_name'],$files1) && $_FILES['file1']['type']=='image/jpeg' && $_FILES['file1']['size']<=524288000)
{echo "файл".$files1."загружен";}
if(move_uploaded_file($_FILES['file2']['tmp_name'],$files2) && $_FILES['file2']['type']=='image/jpeg' && $_FILES['file2']['size']<=524288000)
{echo("файл".$files2."загружен");}
if(move_uploaded_file($_FILES['file3']['tmp_name'],$files3) && $_FILES['file3']['type']=='image/jpeg' && $_FILES['file3']['size']<=524288000)
{echo("файл".$files3."загружен");}
var_dump($files1);
var_dump($files2);
var_dump($files3);
die();
}

?>



<form action="" method="post" enctype="multipart/form-data">
<table cellpadding="0" cellspacing="0" border="0" align="center" width="80%">
<tr valign="top">
<td align="left""><br><br>Первое загружаемое изображение:</td>
<td align="left"><br><br><input size="30"  type="file" name="file1"></td>
</tr>
<tr valign="top">
<td align="left">Второе загружаемое изображение:</td>
<td align="left"><input size="30" type="file" name="file2"></td>
</tr>
<tr valign="top">
<td align="left">Третье загружаемое изображение:</td>
<td align="left"><input size="30" type="file" name="file3"></td>
</tr>
<tr valign="top">
<td colspan="2" align="center"><br><input size="30" type="submit" value="Оправить" ></td>
<tr>
</table>
</form>



Добавлено через 4 минуты и 27 секунд
Единственный нюанс. файлы которые я аплоадил
имели тип 'image/pjpeg' 
поэтому echo("файл".$files3."загружен") - не срабатывало естественно smile

Автор: supervladislav 20.4.2008, 14:31
во спасибо заработало ))))а скажи что ты поменял ???
да на функцию var_dump человеческого объснения ненашол ,для чего она?

Автор: Fortop 20.4.2008, 15:02
Я много что поменял, но судя по всему ключевым моментом был этот smile
Код

$uploadfiles=realpath('./upload');


var_dump() выводит на экран дамп содержимого любых переменных/массивов/объектов.
В сочетании с установленным xdebug читать удобнее, чем обычный print_r()
Ну и в отличии от последнего принимает более чем одну переменную.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)