Загрузка файла PHP

#php #windows #easyphp

#php #Windows #easyphp

Вопрос:

Я получаю ошибки index not found на странице обработки для $ _FILES. Насколько я знаю, мой код технически корректен (по крайней мере, два других человека, которые просматривали его, также не могут найти никаких ошибок).

Итак, сначала вызывается функция, которая отображает форму с загрузкой файла:

 function portfolioEditor($p) {
    echo "<form method="post" action="" . siteurl . "/manage/update.php">";
    echo '<input type="text" name="name" id="name" class="grid4 first" value="' . $p['name'] . '" />';
    echo '<input type="text" name="posttype" id="posttype" class="grid4" value="' . $p['posttype'] . '" />';
    echo "n<br />n";
    echo '<textarea name="content" id="content" class="grid8 first">' . $p['content'] . '</textarea>';
    echo "n<br />n";
    echo '<input type="hidden" name="MAX_FILE_SIZE" value="30000" />';
    echo '<input name="file" value="' . $p['image'] . '" id="file" type="file" />';
    echo '<input type="submit" value="Submit" name="submit" id="submit" />';
    echo '<input type="hidden" value="true" id="fileup" name="fileup" />';
    echo '</form>';
}
  

(примите как данность, что страница с формой вызывает portfolioEditor ($ p) с заполненными реквизитами для $ p или пробелами для нового элемента.)

Это страница обновления (пока без вставки базы данных)

 $p = $_POST;

$p['url'] = str_replace(" ", "-", $p['name']);

foreach ($p as $k => $v) {
    $p[$k] = addslashes($v);
    //echo $v;
}

// FILE UPLOAD IF NEEDED
if(isset($p['fileup']) amp;amp; $p['fileup'] == "true") {
    $loc = sitepath . "/files";
    $loc = $loc . basename( $_FILES['file']['name']);
    move_uploaded_file($_FILES['file']['tmp_name'], $loc);
}
  

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

Комментарии:

1. Похоже, вы пытаетесь установить value тип ввода file . Из-за проблем с безопасностью браузеры не должны разрешать это.

Ответ №1:

Вам нужно добавить это в свою форму:

 enctype='multipart/form-data'
  

Таким образом, ваш тег формы становится:

 echo "<form method="post" enctype='multipart/form-data' action="" . siteurl . "/manage/update.php">";
  

Ответ №2:

добавить в качестве form атрибута тега encytype="multipart/form-data"

 echo "<form method="post" action="" . siteurl . "/manage/update.php" encytype="multipart/form-data">";
  

Комментарии:

1. Вы скопировали мой ответ? Неужели? Ваш первоначальный пост был add as form tag attribute encytype="multipart/form-data" … К вашему сведению, лучше проголосовать «за», чем копировать ответы.

2. Извините, но бургомистр добрался туда первым.

3. @cdburgess: Это ваша маленькая мысль, которую вы показали здесь. Как вы думаете, если я каждый раз прав, значит, я скопировал ваш ответ? хм, я видел, что ты проголосовал против, не имеет значения, что это показывает твои мелкие мысли. Я молю бога, чтобы GET WELL SOON

Ответ №3:

Когда вы отправляете файл, в форме должны быть enctype="multipart/form-data" определены такие

 echo "<form 
method="post"
enctype="multipart/form-data"
action="" . siteurl . "/manage/update.php">";
  

Комментарии:

1. Ваш enctype вызовет исключение. «‘s необходимо экранировать с помощью .