Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: прикрипление файла к коментарию......

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
MBmusic
Отправлено: 27 Марта, 2012 - 16:06:17
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




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

в общем вот так выглядит запись:

if (isset($_POST['com_submit']))
{
$name_com = $_FILES['myfile']['name'];
$tmp_name = $_FILES['myfile']['tmp_name'];

$file_add = "../../skins/files/comments_files/$name_com";
move_uploaded_file($tmp_name, $file_add);



if (!($tmp_name))
{
$file_add = "";
// запись в базу
header('Location: ?id='.$_SESSION['row'].'&page=forum_vid&act=view#form');

}
else
{
// запись в базу
header('Location: ?id='.$_SESSION['row'].'&page=forum_vid&act=view#form');
}
}

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

<?php if(!$comments_row['file_add'])
{
}
else
{
echo '<a href="'.$comments_row['file_add'].'">'."<div class='file_down_box'>+файл</div>".'</a>';
}
?>

если файл есть, то появляется кнопочка скачать рядом с коментом, иначе ее нету...

а проблема состоит в том, что при записи в базу оно напостой записывает без файла, даже если его загрузить......он не появляется в базе((
 
 Top
tato
Отправлено: 27 Марта, 2012 - 19:16:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




0) Код на форуме лучше обернуть в тег ( не зря ж его придумали )

1) $_FILES - тоже необходимо проверить:
PHP:
скопировать код в буфер обмена
  1.  
  2. if( isset( $_FILES['myfile'] )
  3. {
  4.     $name_com = $_FILES['myfile']['name'];
  5.     $tmp_name = $_FILES['myfile']['tmp_name'];
  6.  
  7.     $file_add = "../../skins/files/comments_files/$name_com";
  8.     move_uploaded_file($tmp_name, $file_add);
  9.  
  10.     // запись в базу данных
  11.  
  12. }
  13.  

Например, если этого не сделать, то move_uploaded_file() выдаст ошибку, если не был выбран файл.

2) т.к. Мы поместили запись в "запись в БД" в блок с проверкой, нет необходимости в проверке $tmp_name.

3) Я не понимаю как это связанно с БД. Что за база, какие параметры Вы передаете.

PHP:
скопировать код в буфер обмена
  1. header('Location: ?id='.$_SESSION['row'].'&page=forum_vid&act=view#form');


4) следует заменить на
PHP:
скопировать код в буфер обмена
  1.  
  2. if( isset( $comments_row['file_add'] ) )
  3. {
  4.     // вывод
  5. }
  6. else
  7. {
  8.     // ошибка вывода. $comments_row['file_add'] - не существует
  9. }
  10.  


Цитата:
а проблема состоит в том, что при записи в базу оно напостой записывает без файла, даже если его загрузить......он не появляется в базе((


Самое главное - что, как и в какую базу Вы записываете, из приведенного Вами не видно.

(Отредактировано автором: 27 Марта, 2012 - 19:18:46)



-----
просто ?: сложно
 
 Top
MBmusic
Отправлено: 27 Марта, 2012 - 21:24:06
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




tato вы меня немного не поняли......есть форма, состоящая из двух полей

1) пишется коментарий
2) поле для вставки файла

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

(Отредактировано автором: 27 Марта, 2012 - 21:27:57)

 
 Top
tato
Отправлено: 27 Марта, 2012 - 21:27:53
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




Я Вас прекрасно понял, написаный выше код для общего развития.

По теме
Цитата:
Самое главное - что, как и в какую базу Вы записываете, из приведенного Вами не видно.


т.к. Я не вижу что, куда и как пишется, то и помоч не могу.
(Добавление)
Задача решается просто:

В БД франим ссылки на файлы+id коммента, когда делаем вывод проверяем есть ли ссылка и соответственно ставим кнопку.
Ссылка на файл в вашем случае образуется из -> "../../skins/files/comments_files/$name_com"

(Отредактировано автором: 27 Марта, 2012 - 21:31:43)



-----
просто ?: сложно
 
 Top
MBmusic
Отправлено: 27 Марта, 2012 - 21:33:53
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




окей тогда вот допустим по нажатию на кнопку сабмит должно выполнятся чтото одно из этих пунктов:

1) пользователь не заполнил ни единого поля и нажал сабмит, в результате в базу ничего не записало и на стену вывелась только дата отправки
2) пользователь заполнил поле коментария но не загрузил файл, в результате в базу записало комент, а путь к файлу нет, на стену вывело коментарий пользователя
3) пользователь загрузил файл, коментарий не написал, в результате путь к файлу в базе, на стене токо файл для скачивания
4) если написал комент и файл загрузил, ну тут ясно......

вот мой код в таком духе:

PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['com_submit']))                               
  2. {      
  3. $queryreg_add = mysql_query("INSERT INTO comments (name, text, date, date_time, post_id, immage_location, published, vid_act, file_add) VALUES ('$com_name', '$com_post', '$date_com', '$date_time_com', '$post_id', '$immage_location_new', '$published', '$vid_act', '$file_add')") or die(mysql_error());
  4. header('Location: ?id='.$post_id.'&page=forum_vid&act=view#form');                                                                         
  5. }


тоесть если нажата кнопка сабмит полюбому будет чтото записано, я вот токо хз как организовать вот те 4 пункта выше......
 
 Top
tato
Отправлено: 27 Марта, 2012 - 22:09:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




1) проверяем isset($_POST['com_submit']) - это введены ли данные, но все же необходимо валидировать каждое поле формы отдельно.
проверяем isset($_FILES) это файл, об этом Я писал выше.
2) это вариант если у нас провалилась проверка $_FILES
3) ВАЖНО! isset($_POST) не правалился, но поле коментария пустое.
4) ну тут все ясно (=

Я бы сделал так:

PHP:
скопировать код в буфер обмена
  1. if( isset( $_POST['comment'] ) )
  2. {
  3.     if( !isset( $_FILES['attach'] ) && trim( $_POST['comment'] ) == "" )
  4.     {
  5.         // Ошибка ничего нет        
  6.     }
  7.     elseif( isset( $_FILES['attach'] ) )
  8.     {
  9.         // есть файл, делаем линк
  10.     }
  11.    
  12.     // пишем в базу
  13.    
  14. }
  15. else
  16. {
  17.     // Вывод формы
  18. }

(Отредактировано автором: 27 Марта, 2012 - 22:10:34)



-----
просто ?: сложно
 
 Top
MBmusic
Отправлено: 27 Марта, 2012 - 22:22:56
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




elseif( isset( $_FILES['attach'] ) )
{
// есть файл, делаем линк
}

дык ссылка у нас совсем в другом файлике......

if( !isset( $_FILES['attach'] ) && trim( $_POST['comment'] ) == "" )
{
// Ошибка ничего нет
}
ошибки ж не должно быть, в любом случае должно чтото записать
(Добавление)
код ваше немного не понял...
 
 Top
tato
Отправлено: 27 Марта, 2012 - 22:29:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 468
Дата рег-ции: Сент. 2011  
Откуда: Владивосток


Помог: 8 раз(а)




Цитата:
elseif( isset( $_FILES['attach'] ) )
{
// есть файл, делаем линк
}

дык ссылка у нас совсем в другом файлике......


attach это myfile у вас

Цитата:
if( !isset( $_FILES['attach'] ) && trim( $_POST['comment'] ) == "" )
{
// Ошибка ничего нет
}
ошибки ж не должно быть, в любом случае должно чтото записать
(Добавление)
код ваше немного не понял...


ошибка для примера, можете в этом месте добавить в базу только дату как хотели.


-----
просто ?: сложно
 
 Top
MBmusic
Отправлено: 28 Марта, 2012 - 10:48:37
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




ну ваш вариант немного не так работает......

я сделал вот таким способом:

PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['com_submit']))
  2. {
  3. $name = $_FILES['myfile']['name'];
  4. $tmp_name = $_FILES['myfile']['tmp_name'];
  5.  
  6. $file_add = "../../skins/files/comments_files/$name";
  7. move_uploaded_file($tmp_name, $file_add);
  8. if (!($tmp_name))
  9. {
  10. $file_add = "";
  11. $queryreg_add = mysql_query("INSERT INTO comments (name, text, date, date_time, post_id, immage_location, published, vid_act, file_add) VALUES ('$com_name', '$com_post', '$date_com', '$date_time_com', '$post_id', '$immage_location_new', '$published', '$vid_act', '$file_add')") or die(mysql_error());
  12. header('Location: ?id='.$post_id.'&page=forum_vid&act=view#form');
  13. }
  14. else
  15. {
  16. $queryreg_add = mysql_query("INSERT INTO comments (name, text, date, date_time, post_id, immage_location, published, vid_act, file_add) VALUES ('$com_name', '$com_post', '$date_com', '$date_time_com', '$post_id', '$immage_location_new', '$published', '$vid_act', '$file_add')") or die(mysql_error());
  17. header('Location: ?id='.$post_id.'&page=forum_vid&act=view#form');
  18. }
  19. }


но проблема опять таки, записывает токлько первый коментарий с файлом в базу, первый это значит что если в данной теме где мы пытаемся написать комент с возможностью прикрепить файл, дык если в этой теме удалить все коменты которые относятся к данной теме, дык токо первый комент оно сможет записать с файлом, следующий коментарий оно чето уже не хочет с файлом записывать......не пойму пчему?!...
 
 Top
svoloch
Отправлено: 29 Марта, 2012 - 08:44:11
Post Id



Новичок


Покинул форум
Сообщений всего: 34
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




Как вариант могу предложить следующий код

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /**
  3. * Автор: svoloch
  4. * Связь: svoloch-chel@mail.ru
  5. * Год: 2012
  6. * Файл: upload.php
  7. */
  8.  
  9. // Проверяем на нажатие сабмита
  10. if(isset($_POST['comment']))
  11. {
  12.         // Проверяем, была ли отмечена опция upload'а
  13.         if(isset($_POST['upload'])) // Если да
  14.         {
  15.                 // Производим действия с файлом
  16.                 $name = $_FILES['myfile']['name'];
  17.                 $tmp_name = $_FILES['myfile']['tmp_name'];
  18.                 $file_add = $name;
  19.                
  20.                 // Выполняем копирование файла в заданную директорию
  21.                 if(move_uploaded_file($tmp_name, $file_add)===true) // Если файл успешно скопирован
  22.                 {
  23.                         // Запрос на добавление строки в таблицу с файлом
  24.                         echo 'Заносим в таблицу комментарий с файлом';
  25.                 }
  26.                 else // Если произошла ошибка при копировании файла
  27.                 {
  28.                         echo 'Ошибка прикрепления файла';
  29.                         // Тут можно записать в таблицу комментарий без файла
  30.                 }
  31.         }
  32.         else // Если не выбран upload
  33.         {
  34.                 // Запрос на добавление строки в таблицу без файла
  35.                 echo 'Заносим в таблицу комментарий без файла';
  36.         }
  37. }
  38. else // Отображаем форму
  39. {
  40.         echo '<form method="post" enctype="multipart/form-data">
  41.         Комментарий<br /><textarea name="text"></textarea>      <input type="checkbox" name="upload" value="1" /> - Прикрепить файл     Выберите файл для загрузки      <input type="file" name="myfile" />
  42.         <br /><input type="submit" name="comment" value="Отправить" />
  43.         </form>';
  44. }
  45. ?>
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB