[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файла на сервер. Помогите разобраться!
megadom
Всем привет!
не могу понять почему ошибка.
пытаюсь разобраться с загрузкой файлов на сервер. взял шаблон из учебника, если тестить его отдельно - все работает, если прикручиваю на свой сайт, то выдает непонятные ошибки..
из формы передаются данные методом пост, обрабатываются в контроллере, поэтому не пишу в форме action="upload.php"


<form method="post" enctype="multipart/form-data">
<input
type="file" name="userfile" />


начинается обработка данных из формы и на строчку


$_FILES['userfile']

выдает


Notice: Undefined index: userfile in C:\work\new.ru\www\admin\editvar\read_controller.php on line 188


как его надо определять? расскажите кто знает, плиз)



Спустя 17 минут, 27 секунд (17.05.2012 - 17:00) DruKot написал(а):
А что находится на 188-й строчке и на пару строчек выше? Похоже на ошибку синтаксиса.

Спустя 11 минут, 15 секунд (17.05.2012 - 17:11) megadom написал(а):
там как раз и находится строчка с

$info[] = $_FILES['userfile'];


во всех строках где есть обращение к

$_FILES['userfile']


пишет
 Undefined index: userfile 


вот я и не могу понять почему...

весь синтаксис правильный, испытан и работает если его запускать как отдельный скрипт, а не работает только при внедрении в мой сайт..

логика подсказывает что надо как то описать глобальный массив $_FILES..
НО КАК это сделать и в этом ли проблема.. вроде он должен быть определен
автоматом... :blink:

Спустя 19 минут, 59 секунд (17.05.2012 - 17:31) DruKot написал(а):
попробуй в самом начале файла прописать:
if (isset($_FILES['userfile'])) {$files=$_FILES['userfile'];}

и далее пользоваться этой переменной. Так же можно на каждом шаге прописать проверки, например:
if (isset($_FILES['userfile'])) {$files=$_FILES['userfile'];}else"не сущесвует массива";
if($userfile==''){unset($userfile);}else"не удаляется пустая переменная";
и тд, тогда найти ошибку будет намного проще.

Спустя 12 минут, 51 секунда (17.05.2012 - 17:44) johniek_comp написал(а):
error_reporting(E_ALL); стоит, нужно так
$info[] = isset($_FILES['userfile']) ? $_FILES['userfile'] : null;

Спустя 44 минуты, 10 секунд (17.05.2012 - 18:28) megadom написал(а):
отлично..))) ошибку он не пишет.. но файл все равно не переписывает..))
просто не выводит сообщение.. шутка? smile.gif

Спустя 1 час, 3 минуты, 13 секунд (17.05.2012 - 19:31) megadom написал(а):
чувствую, что ошибка какая-то глупая.. но не могу понять..что может влиять на глобальные массивы? в .htaccess написано следующее..

AddDefaultCharset UTF-8
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag register_globals оn
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
Options -Indexes

# php_value error_reporting 2047
# php_value error_log "c:/work/test.ru/www/log/error.log"
# php_flag log_errors on
# php_flag display_errors off

RewriteEngine on

RewriteRule ^admin/(.*)$ admin/index.php?route=$1 [L,QSA]

RewriteCond %{REQUEST_URI} !^/admin

RewriteCond %{REQUEST_URI} !^/favicon.ico
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Спустя 55 минут, 51 секунда (17.05.2012 - 20:27) Gabriel написал(а):
print_r($_FILES)?
перед обработчиком?

Спустя 24 минуты, 27 секунд (17.05.2012 - 20:52) megadom написал(а):
обработка в контроллере после нажатия кнопки в форме..

в начале формы пишу вот это...
<?php echo implode('<br> ', $_FILES);?>
выводит - пустое место...

Спустя 6 минут, 29 секунд (17.05.2012 - 20:58) megadom написал(а):
как буд-то нет этого массива.. и не передается в него файл..

Спустя 57 секунд (17.05.2012 - 20:59) Gabriel написал(а):
хз почему ощущение, что намудрил при обработке.

Спустя 7 минут, 49 секунд (17.05.2012 - 21:07) megadom написал(а):
контроллер..

function uploadHandle($max_file_size = 100, $valid_extensions = array(), $upload_dir = '.')
{

$error = null;
$info = null;
$max_file_size *= 50024;

if ($_FILES['userfile']['error'] === UPLOAD_ERR_OK)
{
// проверяем расширение файла
$file_extension = pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION);
if (in_array($file_extension, $valid_extensions))
{
// проверяем размер файла
if ($_FILES['userfile']['size'] < $max_file_size)
{
$destination = $upload_dir .'/' . $_FILES['userfile']['name'];

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $destination))
$info = 'Файл успешно загружен';
else
$error = 'Не удалось загрузить файл';
}
else
$error = 'Размер файла больше допустимого';
}
else
$error = 'У файла недопустимое расширение';
}
else
{
// массив ошибок
$error_values = array(

UPLOAD_ERR_INI_SIZE => 'Размер файла больше разрешенного директивой upload_max_filesize в php.ini',
UPLOAD_ERR_FORM_SIZE => 'Размер файла превышает указанное значение в MAX_FILE_SIZE',
UPLOAD_ERR_PARTIAL => 'Файл был загружен только частично',
UPLOAD_ERR_NO_FILE => 'Не был выбран файл для загрузки',
UPLOAD_ERR_NO_TMP_DIR => 'Не найдена папка для временных файлов',
UPLOAD_ERR_CANT_WRITE => 'Ошибка записи файла на диск'

);

$error_code = $_FILES['userfile']['error'];

if (!empty($error_values[$error_code]))
$error = $error_values[$error_code];
else
$error = 'Случилось что-то непонятное';
}

return array('info' => $info, 'error' => $error);
}







/**
* Внесение изменений в данные о варианте
*/


if($ok)
{
$getid= $GET['id'];
if ($POST['value7'])
{
mysqlQuery("DELETE FROM variant WHERE id=$getid");
} else
{
if ($POST['value1']) {$postaction=1; } else {$postaction=0;}
$posttype= $POST['value2'];
$postad= $POST['value3'];
$postts= $POST['value4'];
$postopis= $POST['value5'];
$date=getdate();
mysqlQuery("UPDATE variant
SET date='
$date[mday].$date[mon].$date[year]',
type=
$posttype,
ad='
$postad',
ts='
$postts',
opis='
$postopis',
action=
$postaction
WHERE id=$getid");
//$image = new SimpleImage();
//$image->load($_FILES['value6']['tmp_name']);
//$image->scaleresize(150,150);
//$image->save('../1111.jpg');
//copy($image);

$extensions = array('jpg', 'jpeg', 'png', 'gif' ,'JPG');
$upload_dir = 'variant1';

// Запускаем функцию

$info = uploadHandle(200, $extensions, $upload_dir);

// $info[]= $_FILES[$POST['value6']];
// $folder = 'variant1/';
// $uploadedFile = $folder.$_FILES['filename1']['name'];
// move_uploaded_file($_FILES['filename1']['tmp_name'],$uploadedFile);

}
// reDirect('page=basa');
}


форма ввода...

<!-- ./skins/tpl/admin/editvar/show.tpl begin -->
<div class="pro" id="content">
<?php
echo implode('<br> ', $info);?>
<?php
echo implode('<br> ', $_FILES);?>
<h3>
Редактирование варианта №<?php print $GET['id'];?></h3>
<form
method="post">
<table>
<tr>
<td>
Активное объявление</td>
<td> <input
type="checkbox" name="form[value1]" value="1"
<?php
$vr = $GET['id'];
$str = "SELECT * FROM variant WHERE id = '$vr'";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res)){
$vaction=$row['action'];
}
if ($vaction) print "checked='checked'";
?>/>
</td>
</tr>
<tr>
<td>
Тип недвижимости</td>
<td>
<select
name="form[value2]">
<?php

$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res)){
if ($row['id'] == $vr) { $typevar=$row['type_id'];
printf('<option value="%s">%s</option>',$row['type_id'],htmlspecialchars($row['name']));}
}

$res = mysqlQuery("SELECT * FROM type");
while($row=mysql_fetch_array($res)){
if ($row['type_id'] <> $typevar) {
printf('<option value="%s">%s</option>',$row['type_id'],htmlspecialchars($row['name']));}
}

?>
</select>
</td>
</tr>
<tr>
<td>
Адрес объекта</td>
<td>
<textarea
name="form[value3]" cols="30" rows="4"><?php
$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res)){
if ($row['id'] == $vr) {print $row['ad'];}
}

?></textarea>
</td>
</tr>
<tr>
<td>
Цена объекта</td>
<td>
<textarea
name="form[value4]" cols="30" rows="4"><?php
$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res)){
if ($row['id'] == $vr) {print $row['ts'];}
}

?></textarea>
</td>
</tr>
<tr>
<td>
Описание объекта</td>
<td>
<textarea
name="form[value5]" size="400" cols="30" rows="7"><?php
$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res)){
if ($row['id'] == $vr) {print $row['opis'];}
}

?></textarea>
</td>
</tr>
<tr>
<td>
ФОТОГРАФИИ</td><td></td>
</tr>
<tr>
<td>
Фото №1</td>
<td>
<?php

$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res))
{
if ($row['id'] == $vr && $row['f1'])
{
print "<img src='../../variant1/" . $row['id'] . "/images/images/001_p.jpg' width='150' height='100' alt='' />";
}
}

?><br>
<form
enctype="multipart/form-data" method="post">
<input
type="file" name="userfile" />

</td>
</tr>
<tr>
<td>
Фото №2</td>
<td>
<?php

$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res))
{
if ($row['id'] == $vr && $row['f2'])
{
print "<img src='../../variant1/" . $row['id'] . "/images/images/002_p.jpg' width='150' height='100' alt='' />";
}
}

?><br>
<form
enctype="multipart/form-data" method="post">
<input
name="filename2" type="file"/>
</td>
</tr>
<tr>
<td>
Фото №3</td>
<td>
<?php

$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res))
{
if ($row['id'] == $vr && $row['f3'])
{
print "<img src='../../variant1/" . $row['id'] . "/images/images/001_p.jpg' width='150' height='100' alt='' />";
}
}

?><br>
<form
enctype="multipart/form-data" method="post">
<input
name="filename3" type="file"/>
</td>
</tr>
<tr>
<td>
Фото №4</td>
<td>
<?php

$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res))
{
if ($row['id'] == $vr && $row['f4'])
{
print "<img src='../../variant1/" . $row['id'] . "/images/images/001_p.jpg' width='150' height='100' alt='' />";
}
}

?><br>
<form
enctype="multipart/form-data" method="post">
<input
name="filename4" type="file"/>
</td>
</tr>
<tr>
<td>
Фото №5</td>
<td>
<?php

$vr = $GET['id'];
$str = "SELECT * FROM variant,type WHERE id = '$vr' AND variant.type=type.type_id";
$res = mysqlQuery($str);
while($row=mysql_fetch_array($res))
{
if ($row['id'] == $vr && $row['f5'])
{
print "<img src='../../variant1/" . $row['id'] . "/images/images/001_p.jpg' width='150' height='100' alt='' />";
}
}

?><br>
<form
enctype="multipart/form-data" method="post">
<input
name="filename5" type="file"/>
</td>
</tr>
<tr>
<td>
Виртуальный тур</td>
<td>
<?php

$res = mysqlQuery("SELECT * FROM variant WHERE id=" . $GET["id"]);
while($row = mysql_fetch_array($res))
{
if ($row['id'] == $vr && $row['p'])
{
print "<div id='flash_content'>";
print "<object id='swf1' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' width='150' height='100'>";
print "<param name='movie' value='../../variant1/" . $row['id'] . "/panorama.swf'/>";
print "<param name='bgcolor' value='9e9e9e' />";
print "<param name='allowFullScreen' value='true' />";
print "<param name='flashvars' value='xml=panorama.xml&scene=init_scene' />";
print "<!--[if !IE]>-->";
print "<object type='application/x-shockwave-flash' data='../../variant1/" . $row['id'] . "/panorama.swf' width='150' height='100'>";
print "<param name='bgcolor' value='9e9e9e' />";
print "<param name='allowFullScreen' value='true' />";
print "<param name='flashvars' value='xml=panorama.xml&scene=init_scene' />";
print "<!--<![endif]-->";
print "<div style='width:150px; hei ght:100px;'>У Вас не установлен Flash plugin.</div>";
print "<!--[if !IE]>-->";
print "</object>";
print "<!--<![endif]-->";
print "</object>";
print "</div>";
}
}

?>
<form
enctype="multipart/form-data" method="post">
<input
name="filenamep" type="file"/>
</td>
</tr>
<tr>
<td>
Удалить объявление</td>
<td> <input
type="checkbox" name="form[value7]" value="1"/></td>
</tr>
<tr>
<td><input
name="ok" type=submit value="Внести изменения"/></td>
<td></td>
</tr>
</table>
</form>
</div>

<!-- ./skins/tpl/admin/editvar/show.tpl end -->



ошибки выводит такие...

Notice: Undefined index: userfile in C:\work\new.ru\www\admin\editvar\read_controller.php on line 106

Notice: Undefined index: userfile in C:\work\new.ru\www\admin\editvar\read_controller.php on line 142

Случилось что-то непонятное

Спустя 7 минут, 40 секунд (17.05.2012 - 21:15) megadom написал(а):
106 строка if ($_FILES['userfile']['error'] === UPLOAD_ERR_OK)
142 строка $error_code = $_FILES['userfile']['error'];
в обеих строчках обращение к $_FILES['userfile'] где он и не понимает индекс userfile

Спустя 38 минут, 36 секунд (17.05.2012 - 21:53) walerus написал(а):
1) Может в форму добавить action="" ? Для понятия куда слать форму
<form action="" enctype="multipart/form-data" method="post">

2) Как вариант в функции написать global $_FILES;, хотя должно видеть вроде глобальные переменные...

Спустя 21 минута, 54 секунды (17.05.2012 - 22:15) megadom написал(а):
не помогает ни 1 ни 2..(

Спустя 27 минут, 26 секунд (17.05.2012 - 22:43) megadom написал(а):
нашел...
форма выбора файла находится внутри формы ввода всех данных.. и в первой главной форме не было прописано enctype="multipart/form-data"
но теперь пишет


Warning: move_uploaded_file(admin/P2010108.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\work\new.ru\www\admin\editvar\read_controller.php on line 117


Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\work\_\php_temp\php6D58.tmp' to 'admin/P2010108.JPG' in C:\work\new.ru\www\admin\editvar\read_controller.php on line 117


строка 117

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $destination))
$info = 'Файл успешно загружен';

что за ерунда?)

Спустя 9 минут, 20 секунд (17.05.2012 - 22:52) inpost написал(а):
No such file or directory

Спустя 3 минуты, 20 секунд (17.05.2012 - 22:55) megadom написал(а):
нашёл))))))) сколько мучений из-за такой ерунды...

Спустя 13 дней, 16 часов, 15 минут, 26 секунд (31.05.2012 - 15:11) Аня написал(а):
Всем привет. помогите пожалуйста. Есть код, он работает наполовину, переименовывает название документа, но почему-то не сохраняет.Спасибо
<?php
$referer = $_SERVER['HTTP_REFERER'];
$table = explode('/',$referer);
$table = $table[count($table)-1];
unset($arr);
switch($table){
case 'documents':{
// Инициализация данных документа и частичная очистка массива $_POST для последующей обработки
$docgroup = $_POST['docgroup']; unset($_POST['docgroup']);
$docname = $_POST['docname']; unset($_POST['docname']);
$description = $_POST['description']; unset($_POST['description']);
$period = $_POST['period']; unset($_POST['period']);
$address = $_POST['address']; unset($_POST['address']);
$calc = $_POST['calc']; unset($_POST['calc']);

// Обработка пришедшего файла
$file = $_FILES['file']; $filename = false; // Загрузка файла документа на сайт
if(!is_null($file) && $file['error']==0){ // проверка нормальной загрузки файла
$extension = explode('.',$file['name']);
$extension = $extension[count($extension)-1];
$filename = "./content/documents/example/ex".md5(time()).".$extension";
move_uploaded_file($file['tmp_name'],$filename);
}
// Занесение документа в xml файл
$xmlfile = "./content/documents/xml/docgroup".$docgroup.".xml"; // Необходимо сперва определить имя необходимого файла
$domxml = new DOMDocument('1.0','utf-8'); // потом создать новый XML элемент,
$domxml->formatOutput = true; // установить для него форматированное построение
$domxml->preserveWhiteSpace = false; // и расстановку пробельных символов.
if(file_exists($xmlfile)){ // При физическом наличии файла по требуемому пути
$domxml->load($xmlfile); // загружаем данные из него в наш XML элемент
$root = $domxml->documentElement; // и определяем корневой элемент.
}else{ // В случае отсутствия файла на диске
$root = $domxml->createElement("documents"); // требуется создать корневой элемент
$domxml->appendChild($root); // и привязать его к XML элементу.
}
$document = $domxml->createElement("document"); // Создание XML элемента для одного документа и
$root->appendChild($document); // прикрепление этого элемента к корневому.
$document->appendChild($domxml->createElement("docname",$docname)); // Создание и прикрепление элемента docname к документу
$document->appendChild($domxml->createElement("description",$description)); // Создание и прикрепление элемента description к документу
if($filename) $document->appendChild($domxml->createElement("file",$filename)); // Создание и прикрепление элемента file к документу
$needxml = $domxml->createElement("needdoc"); // Создание и
$document->appendChild($needxml); // прикрепление элемента needxml к документу
$document->appendChild($domxml->createElement("period",$period)); // Создание и прикрепление элемента period к документу
$document->appendChild($domxml->createElement("address",$address)); // Создание и прикрепление элемента address к документу
foreach($_POST as $key=>$on){ // Перебор пришедших данных для определения необходимых документов
$tmparr = explode('=',$key); // для различных категорий лиц и создание массива этих документов
$tmparr[0]=$tmparr[2]; unset($tmparr[2]);
$needdoc[] = $tmparr;
}
$i=1;
while(count($needdoc)>0){ // Перебор различных категорий лиц
foreach($needdoc as $key=>$xmlneed){ // Перебор полученного набора необходимых документов (выход при окончании документов)
if($xmlneed[0]==$i){ // При принадлежности документа к текущей категории
$tmpdoc = $domxml->createElement('nddoc',$xmlneed[1]); // создаётся элемент для текущего документа
$attribute = $domxml->createAttribute("person"); // и аттрибут для созданного элемента,
$attribute->value = $i; // аттрибуту присваиваем значение текущей категории лиц.
$tmpdoc->appendchild($attribute); // Присоединяем аттрибут к элементу
$needxml->appendChild($tmpdoc); // а этот элемент к документу (к элементу needdoc).
unset($needdoc[$key]); // Удаление текущего документа из набора из-за дальнейшей ненадобности
}else continue; // Пропуск итерации при отсутствии принадлежности документа к категории лиц
}
$i++; // Проверка для следующей категории
}
$domxml->save($xmlfile); // Сохранение данных в XML файл

// Запись ддокумента в БД
$arr = array(
'table' => 'f_documents',
'docgroup' => $docgroup,
'docname' => $docname,
'calc' => $calc);
insertbase($arr);
header("Location: $referer");
break;
}
case 'docgroups':{ // Добавление в БД информацию ждя таблицы s_doc_group
$arr = array(
'table' => 's_doc_groups',
'docgroup' => $_POST['docgroup']);
insertbase($arr);
header("Location: $referer");
break;
}
case 'typeperson':{ // Добавление в БД информацию ждя таблицы s_type_person
$arr = array(
'table' => 's_type_person',
'person' => $_POST['person']);
insertbase($arr);
header("Location: $referer");
break;
}
case 'needdoc':{ // Добавление в БД информацию ждя таблицы s_needdoc
unset($_POST['table']);
$docname = $_POST['docname']; unset($_POST['docname']); // Инициализация переменной для сохранения названия документа
foreach($_POST as $needdoc=>$on){ // Перебор категорий лиц, которым необходим данный документ
if($on=='on') $persons[] = str_replace("_"," ",$needdoc); // и преобразование названий этих категорий ('_' -меняется на-> ' ')
}
$sqlQ = "SELECT ID,person FROM s_type_person"; // Вывод из базы названия и порядковые номера всех категорий лиц
$q = sql_query($sqlQ);
$needstr = '';
foreach($q as $needdoc){ // Перебор ВСЕХ категорий, полученных из базы
for($i=0;$i<count($persons);$i++){ // и перебор лишь требуемых для конкретного документа
if($persons[$i]==$needdoc['person']) $needstr .= $needdoc['ID']."|"; // при совпадении названий, порядковый номер категории
} // записывается в сторку через разделитель, для удобства записи в базу
}
$needstr = substr($needstr,0,strlen($needstr)-1); // обрезание крайнего разделителя
$arr = array( // Формирование массива для записи в базу
'table' => 's_needdoc',
'docname' => $docname,
'persons' => $needstr);
insertbase($arr); // Запись
header("Location: $referer");
break;
}
case 'servicestage':{ // Добавление в БД информацию ждя таблицы s_service_stage
$arr = array(
'table' => 's_service_stage',
'stage' => $_POST['stage']);
insertbase($arr);
header("Location: $referer");
break;
}
}
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.