Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форма и скрипт для загрузки файла, страность какая-то.. 
V
    Опции темы
zluka
Дата 30.10.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Пишу скрипт для загрузки файла на сервер. Этот же скрипт делает запись в БД (информация о загружаемом файле). Вот сама форма:
Код

<form action="add_programs.php" method="POST">
<p>
<label>Программа:</label>
<input name="Ufile" value="" type="file" size="30" />
<label>Имя файла на сервере:</label>
<input name="Ufile_name" value="" type="text" size="30" />
<label>Название программы:</label>
<input name="title" value="" type="text" size="30" />
<label>Категория:</label>
<?php

$dblocation = "127.0.0.1";
$dbname = "test";
$dbuser = "root";
$dbpasswd = "";
$dbcnt = mysql_connect($dblocation, $dbuser, $dbpasswd);
$dbphp = mysql_select_db($dbname);

$query_type_category = mysql_query("SELECT * FROM programs_catalog");
$rows = mysql_num_rows($query_type_category);

/*Это для вывода категории программ*/
echo "<select size='1' name='category'>";
for($i=0; $i<$rows; $i++)
{
    $category = mysql_fetch_array($query_type_category);
    echo "<option value='{$category['Type']}'>{$category['Name']}</option>";
}
echo "</select>";

?>
<label>Описание программы:</label>
<textarea name="description" rows="5" cols="5"></textarea>
<br />
<input name="upload" class="button" type="submit" value="Загрузить"/>
</p>
</form>
<br />

Вот продолжение того же скрипта:
Код

<?php

if(!empty($_POST))
{
$file = $_POST['Ufile'];
$file_name = $_POST['Ufile_name'];

$title = $_POST['title'];  //Название программы
$category = $_POST['category'];  //Категория программы
$description = $_POST['description']; //Описание программы
$knopka = $_POST['upload'];
$datetime = date('Y-m-d H:i:s'); 

$to = "F:/Program Files/Apache Software Foundation/Apache2.2/htdocs/site/programs/".$file_name;
if(isset($knopka))
{
    if (copy($file, $to))
    {
        echo "<p>Файл загружен</p>";
        $size = filesize($to);
                                                                                                                        
        $query_insert_books = mysql_query("INSERT INTO `programs` (id, Title, Downloads, Link, Date, Size, Description, Type) VALUES (NULL, '$title', '0', '$file_name', '$datetime', '$size', '$description', '$category')");
        if (!$query_insert_books)
        {
            mysql_error($dbcnt);
        }


    }
    else
    {
        echo "<p>Ошибка загрузки!</p>";
    }
}

}
?>

И вот странность. Файл загружается нормально. А запись в таблицу ну никак не хочет делать:( При этом никаких ошибок. Делал QUERY вручную, через mysql command line client - все нормально, а через скрипт не хочет.

Это сообщение отредактировал(а) zluka - 30.10.2008, 16:50


--------------------
user posted image
PM MAIL   Вверх
bars80080
Дата 30.10.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а что id - не автоинкрементное поле? и допускает NULL?

и что значит никаких ошибок? по скрипту не видно, что вы выводите ошибку
PM MAIL WWW   Вверх
zluka
Дата 30.10.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Цитата(bars80080 @  30.10.2008,  16:52 Найти цитируемый пост)
а что id - не автоинкрементное поле? и допускает NULL?

Автоинкрементное поле. У меня стоит SQL_MODE='NO_AUTO_VALUE_ON_ZERO' Вроде работает и так.. Хотя попробывал без NULL, все равно не добавляет запись:
Код

$query_insert_books = mysql_query("INSERT INTO `programs` (Title, Downloads, Link, Date, Size, Description, Type) VALUES ('$title', '0', '$file_name', '$datetime', '$size', '$description', '$category')");


Цитата(bars80080 @  30.10.2008,  16:52 Найти цитируемый пост)
и что значит никаких ошибок? по скрипту не видно, что вы выводите ошибку

А это не оно?smile        
Код

if (!$query_insert_books)
{
    mysql_error($dbcnt);
 }




--------------------
user posted image
PM MAIL   Вверх
password
Дата 30.10.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

Репутация: нет
Всего: 8



при загрузке файлов на сервер форма должна иметь вид (насколько я помню, может конечно не прав):
<form   enctype="multipart/form-data"  name="___" method="post" action="____">

а при выполнении сделай вывод готового SQL запроса и проверь еще раз с подставленными параметрами, смущает еще поле Size, оно у тебя число или строка? '$size' или $size
PM MAIL Skype   Вверх
Валерия
Дата 30.10.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: 3
Всего: 8



password, а в чём проблема вставлять число в кавычках даже если оно integer в базе?
PM MAIL   Вверх
unicross
Дата 30.10.2008, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 21
Всего: 53



Цитата(zluka @ 30.10.2008,  17:04)
А это не оно?   
Код

if (!$query_insert_books)
{
    mysql_error($dbcnt);
 }

Нет не оно!

Код

if (!$query_insert_books)
{
    echo mysql_errno() . ": " . mysql_error() . "<BR>";
}

Выводим сюда структуру таблицы.
Заменяем 
Код

        $query_insert_books = mysql_query("INSERT INTO `programs` (id, Title, Downloads, Link, Date, Size, Description, Type) VALUES (NULL, '$title', '0', '$file_name', '$datetime', '$size', '$description', '$category')");

на
Код

$q = "INSERT INTO `programs` (`id`, `Title`, `Downloads`, `Link`, `Date`, `Size`, `Description`, `Type`) VALUES (NULL, '$title', 0, '$file_name', '$datetime', '$size', '$description', '$category')";
echo $q . "<BR>";
        $query_insert_books = mysql_query($q);

Результат формирования SQL-запроса выкладываем сюда.
zluka, механизм загрузки файлов у вас абсолютно неверный...

PM MAIL WWW   Вверх
zluka
Дата 30.10.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Попробывал вот так, все нормально, есть запись:
Код

$query_insert_books = mysql_query("INSERT INTO `programs` (Title, Downloads, Link, Date, Size, Description, Type) VALUES ('Net Utils', 0, 'netutils.rar', '2008-10-30 16:57:01', 1252665, 'Матьорая прога', 'scanners')");


Добавлено через 6 минут и 47 секунд
unicrossВсе нормально, заменил, сейчас окsmile

Цитата(unicross @  30.10.2008,  18:03 Найти цитируемый пост)
zluka, механизм загрузки файлов у вас абсолютно неверный...

А как нужно? Если не трудно приведите пример. smile 


--------------------
user posted image
PM MAIL   Вверх
unicross
Дата 30.10.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 21
Всего: 53



Цитата

unicrossВсе нормально, заменил, сейчас ок

Что на что?

Примерно так:
Код

<FORM method="POST" enctype="multipart/form-data">
<INPUT type="file" name="file_name">
<INPUT type="submit" value="Загрузить">
</FORM>
<?php
if (isset($_FILES["file_name"]["tmp_name"])) {
   if($_FILES["file_name"]["error"] == 0 && $_FILES["file_name"]["size"] > 0) {
      $path = "C:\\Apache2\\htdocs\\";
      $path .= $_FILES["file_name"]["name"];
      if (@move_uploaded_file($_FILES["file_name"]["tmp_name"], $path)) {
         echo "Файл загружен";
      }
      else {
         echo "Ошибка при загрузке";
      }
   }
   else echo "Ошибка при загрузке";
}
?>



Это сообщение отредактировал(а) unicross - 30.10.2008, 18:30
PM MAIL WWW   Вверх
password
Дата 30.10.2008, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 23.9.2008
Где: Украина, Сумы

Репутация: нет
Всего: 8



Валерия  
Цитата

а в чём проблема вставлять число в кавычках даже если оно integer в базе?


Возможно проблемы нету, просто я пришел из языков программирования со строгим отношением к типам (а php изучаю не очень долго) и по привычке первоначально учитываю тип переменных  smile 
PM MAIL Skype   Вверх
zluka
Дата 30.10.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Цитата(unicross @  30.10.2008,  18:20 Найти цитируемый пост)
Что на что?

Код

$query_insert_books = mysql_query("INSERT INTO `programs` (Title, Downloads, Link, Date, Size, Description, Type) VALUES ('$title', 0, '$file_name', '$datetime', $size, '$description', '$category')");

На:
Код

$query_insert_books = mysql_query("INSERT INTO `programs` (`id`, `Title`, `Downloads`, `Link`, `Date`, `Size`, `Description`, `Type`) VALUES (NULL, '$title', 0, '$file_name', '$datetime', '$size', '$description', '$category')");

А тот пример, который Вы мне дали, что-то неработает. Не загружает файлы и не выводит ошибок.
Вот код, я немного подредактировал под себя:
Код

$file = $_POST['Ufile'];

$title = $_POST['title'];  //Название программы
$category = $_POST['category'];  //Категория программы
$description = $_POST['description']; //Описание программы
$datetime = date('Y-m-d H:i:s');

if (isset($_FILES["Ufile"]["tmp_name"]))
{
    if($_FILES["Ufile"]["error"] == 0 && $_FILES["Ufile"]["size"] > 0)
    {
        $path = "F:/Program Files/Apache Software Foundation/Apache2.2/htdocs/site/programs/";
        $path .= $_FILES["Ufile"]["name"];
        if (move_uploaded_file($_FILES["Ufile"]["tmp_name"], $path))
        {
             echo "Файл загружен";
             $file_name = $_FILES["Ufile"]["name"];
             $size = $_FILES["Ufile"]["size"];

        $query_insert_books = mysql_query("INSERT INTO `programs` (`id`, `Title`, `Downloads`, `Link`, `Date`, `Size`, `Description`, `Type`) VALUES (NULL, '$title', 0, '$file_name', '$datetime', '$size', '$description', '$category')");
          if (!$query_insert_books)
     {
          echo mysql_errno() . ": " . mysql_error() . "<BR>";
             }
        }
        else
        {
            echo "Ошибка при загрузке";
        }
    }
    else
    {
        echo "Ошибка при загрузке";
    }
}



--------------------
user posted image
PM MAIL   Вверх
unicross
Дата 30.10.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 21
Всего: 53



Цитата

А тот пример, который Вы мне дали, что-то неработает. Не загружает файлы и не выводит ошибок.

Приведите код формы...
PM MAIL WWW   Вверх
zluka
Дата 30.10.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Форма:
Код

<form action="add_programs.php" method="POST" enctype="multipart/form-data">
<p>
<label>Программа:</label>
<input name="Ufile" value="" type="file" size="30" />
<label>Название программы:</label>
<input name="title" value="" type="text" size="30" />
<label>Категория:</label>
<?php

$dblocation = "127.0.0.1";
$dbname = "test";
$dbuser = "root";
$dbpasswd = "";
$dbcnt = mysql_connect($dblocation, $dbuser, $dbpasswd);
$dbphp = mysql_select_db($dbname);

$query_type_category = mysql_query("SELECT * FROM programs_catalog");
$rows = mysql_num_rows($query_type_category);

echo "<select size='1' name='category'>";
for($i=0; $i<$rows; $i++)
{
    $category = mysql_fetch_array($query_type_category);
    echo "<option value='{$category['Type']}'>{$category['Name']}</option>";
}
echo "</select>";

?>
<label>Описание программы:</label>
<textarea name="description" rows="5" cols="5"></textarea>
<br />
<input name="addnew" type="checkbox" value="OFF">Добавить в новости
<br />
<input name="upload" class="button" type="submit" value="Загрузить"/>
</p>
</form>
<br />


Это сообщение отредактировал(а) zluka - 30.10.2008, 20:22


--------------------
user posted image
PM MAIL   Вверх
unicross
Дата 30.10.2008, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 422
Регистрация: 15.6.2008

Репутация: 21
Всего: 53



У меня работает.

Вставьте эту строку в начало программы обработки
Код

var_dump($_FILES);

Приведите результат.
Попробуйте заменить $_FILES на $HTTP_POST_FILES

Это сообщение отредактировал(а) unicross - 30.10.2008, 21:22
PM MAIL WWW   Вверх
zluka
Дата 31.10.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 27.7.2006

Репутация: нет
Всего: 2



Цитата(unicross @  30.10.2008,  20:41 Найти цитируемый пост)
Попробуйте заменить $_FILES на $HTTP_POST_FILES

Не помогло.
Короче приколы продолжаются. Вставил print_r($_FILES) между строками:
Код

<?php

echo "<pre>";
echo print_r($_FILES);
echo "</pre>";

if(!empty($_POST))

Заполняю форму, нажимаю кнопку и.. пусто:
Код

Array
(
)

Тут я случайно нажал еще раз на кнопку и вывело:
Код

Array
(
    [ufile] => Array
        (
            [name] => 
            [type] => 
            [tmp_name] => 
            [error] => 4
            [size] => 0
        )

)
1

Ошибка при загрузке





--------------------
user posted image
PM MAIL   Вверх
bars80080
Дата 31.10.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



вставь в форму ещё:

Код

<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />

PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0837 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.