Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка картинок.
 
 автор: qwelp   (23.10.2006 в 00:44)   письмо автору
 
 

Я загружаю картинку на свой сайт:
Вот форма:

<form action="File_upload.php" method="post" enctype="multipart/form-data" name="file_upload" id="file_upload">
             <p>
               <input name="MAX_FILE_SIZE" type="hidden" id="MAX_FILE_SIZE" value="165536">
             </p>
             <p>Фаил:
               <label></label>
                 <label>
                 <input name="sendfile" type="file" id="sendfile">
                 </label>
             </p>
             <p>
               <label>
               <input name="Submit" type="submit" id="Submit" value="Отправить">
               </label>
             </p>
           </form>



Скрипт отправки:

<?php
if (isset($_POST["MAX_FILE_SIZE"])) {
$tmpFile $_FILES["sendfile"]["tmp_name"];
$destFile $_SERVER["DOCUMENT_ROOT"] . "/uploads/" 
$_FILES["sendfile"]["name"];
move_uploaded_file($tmpFile$destFile);
}
header("Location: Files.php");
?>


Всё прекрастно работает, но я бы хотел чтобы при загрузки картинок путь записывался в базу данных mysql долго бьюсь но не как не могу реализовать, прошу помощи у проффесионалов.
Помогите разобраться :)

   
 
 автор: cheops   (23.10.2006 в 02:54)   письмо автору
 
   для: qwelp   (23.10.2006 в 00:44)
 

Что вызывает сложность? У вас какая структура таблицы?

   
 
 автор: qwelp   (23.10.2006 в 03:20)   письмо автору
 
   для: cheops   (23.10.2006 в 02:54)
 

Структура

 table: url_foto
        id_im      int(11)                      auto_increment             
    path_im     varchar(200)         


Как я понимаю в скрипт нужно добавить значения для, того чтобы вместе с отправленным файлом отправлялась ещё запись в таблицу с адрессом файла или проще с имянем файла. Вообще я планирую применять это к новостям, но для начала решил розобраться с созданием записи в таблице.
Потом я вроде смогу связать таблицы картинок с таблицей новосте, добавить поле catid и запрос вроде этого Items.id=url_foto.catid

   
 
 автор: cheops   (23.10.2006 в 12:42)   письмо автору
 
   для: qwelp   (23.10.2006 в 03:20)
 

Тогда вам следует сформировать INSERT-запрос и выполнить его при помощи кода
<?php
  
// Устанавливаем соединение с базой данных
  
require_once("config.php");
  
// Формируем и выполняем SQL-запрос
  
$query "INSERT INTO url_foto VALUES(NULL, '$destFile')";
  if(!
mysql_query($query)) exit("Ошибка при выполнении запроса - ".mysql_error())
?>

Пример файла config.php можно найти в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=19122

   
 
 автор: qwelp   (23.10.2006 в 13:57)   письмо автору
 
   для: cheops   (23.10.2006 в 12:42)
 

Вот так я зделал но в базу всё равно не пишит посмотри пожайлуста где ошибка?


<?php require_once('../Connections/u26661.php'); ?>
<?php
if (isset($_POST["MAX_FILE_SIZE"])) {
$tmpFile $_FILES["sendfile"]["tmp_name"];
$destFile $_SERVER["DOCUMENT_ROOT"] . "/uploads/" 
$_FILES["sendfile"]["name"];

move_uploaded_file($tmpFile$destFile);
}
header("Location: Files.php");

  
// Формируем и выполняем SQL-запрос
  
$query "INSERT INTO url_foto VALUES(NULL, '$destFile')";
  if(!
mysql_query($query)) exit("Ошибка при выполнении запроса - ".mysql_error())

?>

   
 
 автор: cheops   (23.10.2006 в 14:16)   письмо автору
 
   для: qwelp   (23.10.2006 в 13:57)
 

Переместите строку
<?php
header
("Location: Files.php");
?>

в конец файла - это редирект и код вставки записи не успевает срабатывать, так как происходит переход на другую страницу.

   
 
 автор: qwelp   (24.10.2006 в 17:13)   письмо автору
 
   для: cheops   (23.10.2006 в 14:16)
 

Переместил, пробывал несколько вариантов, не получаеться. посмотри где у меня ошибка. Заранее спасибо


<?php require_once('../Connections/u26661.php'); ?>
<?php
if (isset($_POST["MAX_FILE_SIZE"])) {
$tmpFile $_FILES["sendfile"]["tmp_name"];
$destFile $_SERVER["DOCUMENT_ROOT"] . "/uploads/" 
$_FILES["sendfile"]["name"];
move_uploaded_file($tmpFile$destFile);
  
// Формируем и выполняем SQL-запрос
  
$query "INSERT INTO url_foto VALUES(NULL, '$destFile')";
  if(!
mysql_query($query)) exit("Ошибка при выполнении запроса - ".mysql_error())
?>
<?php
header
("Location: Files.php");
?> 

   
 
 автор: cheops   (24.10.2006 в 19:18)   письмо автору
 
   для: qwelp   (24.10.2006 в 17:13)
 

А какое-нибудь сообщение об ошибке выводится?

   
 
 автор: qwelp   (24.10.2006 в 21:48)   письмо автору
 
   для: cheops   (24.10.2006 в 19:18)
 

Сообщение об ошибке не выводится. Идёт переход на страницу скрипта и перенаправление не происходит обратною прото пустая страница.

   
 
 автор: cheops   (24.10.2006 в 21:55)   письмо автору
 
   для: qwelp   (24.10.2006 в 21:48)
 

Ошибки происходят только с этим скриптом? Другие скрипты, использующие MySQL, работают нормально?

   
 
 автор: qwelp   (24.10.2006 в 22:37)   письмо автору
 
   для: cheops   (24.10.2006 в 21:55)
 

да всё работает отлично. masterhost

   
 
 автор: slonik   (24.10.2006 в 23:45)   письмо автору
 
   для: qwelp   (24.10.2006 в 22:37)
 

Возможно я ослеп и не вижу, а может как всегда туплю, но я не вижу, чтобы if закрывался..также не вижу ещё две штуки, но про них промолчу, т.к. сомневаюсь и не хочу нести бред.

   
 
 автор: cheops   (25.10.2006 в 00:25)   письмо автору
 
   для: qwelp   (24.10.2006 в 22:37)
 

У вас скорее всего отключен вывод ошибок в окно браузера - посмотрите их в логе в системе администрирования.

   
 
 автор: qwelp   (25.10.2006 в 02:29)   письмо автору
 
   для: cheops   (25.10.2006 в 00:25)
 

Может надо вставить закрывающую скобку ? или в запросе что то

   
 
 автор: cheops   (25.10.2006 в 02:57)   письмо автору
 
   для: qwelp   (25.10.2006 в 02:29)
 

Закрывающую скобку однозначно поставить следует, slonik, всё правильно говорит.

   
 
 автор: qwelp   (25.10.2006 в 03:55)   письмо автору
 
   для: cheops   (25.10.2006 в 02:57)
 

может есть похожий рабочий скрипт?

   
 
 автор: Trianon   (25.10.2006 в 09:51)   письмо автору
 
   для: cheops   (23.10.2006 в 14:16)
 

Вот этот момент мне непонятен. Разве функция header прерывает выполнение php-скрипта?

   
 
 автор: cheops   (25.10.2006 в 12:20)   письмо автору
 
   для: Trianon   (25.10.2006 в 09:51)
 

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

   
 
 автор: Trianon   (25.10.2006 в 13:30)   письмо автору
 
   для: cheops   (25.10.2006 в 12:20)
 

>Нет, но PHP является интерпретатором, который выполняет строки последовательно,
>встретив заголовок он его отправит,
Разве?
А по-моему, лишь запомнит для отправки. А отправлен он будет не раньше, чем придет требование отправить первый байт тела отклика.
Иначе я не представляю себе, как смогли бы работать headers_sent(), да и второй параметр (replace) самой функции header()

   
 
 автор: cheops   (25.10.2006 в 15:21)   письмо автору
 
   для: Trianon   (25.10.2006 в 13:30)
 

Да вы правы, но лучше программировать без учёта этого факта. Если я вынужден использовать header() я стараюсь разместить в наиболее безопасном, по моему мнению месте, т.е. после всего кода, отсюда мой совет. Лучше, чтобы header() размещался после всего кода, так как его реализация может быть изменена, да и соблазн написать ещё что-то будет существенно меньше, так как в середине кода забыть про воткнутый header() проще, чем в конце.

Использование функции header() и тем более учёт в программе алгоритма их обработки - это нарушение инкапсуляции - PHP берёт на себя низкоуровневую работу с протоколом, а при помощи header() можно влиять на эту работу - в результате получается не очевидная среда, зависищая от прядка вызова функций. Что во всех методических работах называют одним из серьёзных промахов проектирования. Абстрактные уровни для того и разводят, чтобы они не влияли друг на друга и они могли бы быть заменены без ущерба друг для друга. Например, я вообще стараюсь не вызывать фукнции header(), так как это влечёт за собой целый ряд последствий: буферизация не на всех серверах включена, поэтому файл, использующий header() не может быть просто включён в другой файл, нужно помнить, что впереди него не должно быть вывода.

   
 
 автор: Trianon   (25.10.2006 в 15:24)   письмо автору
 
   для: cheops   (25.10.2006 в 15:21)
 

Кто б спорил :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования