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, JavaScript, MySQL

 PHP.SU

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


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

> Описание: Все это дело соеденить воедино!
Kubert
Отправлено: 02 Июля, 2010 - 20:22:21
Post Id



Частый гость


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


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




Есть форма

CODE (htmlphp):
скопировать код в буфер обмена
  1. <form name="testform" method="post" enctype="multipart/form-data" action="start.php">
  2.  
  3. <span id="table">
  4. <table border=0 cellspacing=0 cellpadding=2>
  5.         <tr>
  6.         <td>Файл</td>
  7.         <td><a href="#" onclick="return addline();">добавить</a></td>
  8.     </tr>
  9.         <tr id="newline" nomer="[0]">
  10.         <td><input type="file" name="file[0]" value=""></td>
  11.         <td valign="top"><a href="#" onclick="return rmline(0);">удалить</td>
  12.     </tr>
  13. </table>
  14. </span>
  15. <script>
  16. var c=0;
  17. function rmline(q)
  18. {
  19.         s=document.getElementById('table').innerHTML;
  20.         s=s.replace(/[\r\n]/g,'');
  21.         re=new RegExp('<tr id="?newline"? nomer="?\\['+q+'.*?<\\/tr>','gi');
  22.         s=s.replace(re,'');
  23.         document.getElementById('table').innerHTML=s;
  24.         return false;
  25. }
  26. function addline()
  27. {
  28.         c++;
  29.         s=document.getElementById('table').innerHTML;
  30.         s=s.replace(/[\r\n]/g,'');
  31.         re=/(.*)(<tr id=.*>)(<\/table>)/gi;
  32.         re2=/\[\d+\]/gi;
  33.         s1=s.replace(re,'$2');
  34.         s2=s1.replace(re2,'['+c+']');
  35.         s2=s2.replace(/(rmline\()(\d+\))/gi,'$1'+c+')');
  36.         s=s.replace(re,'$1$2'+s2+'$3');
  37.         document.getElementById('table').innerHTML=s;
  38.         return false;
  39. }
  40. </script>
  41.  
  42. Страна:
  43.                 <?php
  44.                 include ("../include/db.php");
  45.        $result = mysql_query("SELECT id_country,name FROM country");
  46.        $myrow = mysql_fetch_array ($result);
  47.      
  48.        do
  49.        {
  50.        printf ("
  51.        
  52.        <div style='width:252px; float:left;'>
  53.            <input name='id_country' type='radio' value='%s'><label> %s</label>
  54.        </div>
  55.        
  56.        ",$myrow["id_country"],$myrow["name"]);
  57.        }
  58.        
  59.        while ($myrow = mysql_fetch_array($result));
  60.        
  61.        ?>
  62.  
  63. <input name="submit" type="submit" value="Загрузить">
  64.    
  65.  
  66. </form>
  67.  


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

демо: http://www[dot]raztour[dot]ru/admin/4/

(Отредактировано автором: 02 Июля, 2010 - 21:47:59)

 
 Top
Uchkuma
Отправлено: 02 Июля, 2010 - 21:42:48
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Добавляется не форма, а поле с именем file - и это массив. Т.е. после отправки в скрипте вы сможете обработать массив $_FILES['file']. По умолчанию первое поле file[0], потом почему-то добавляются file[11], file[12] и т.д. Т.е. в скрипте соответственно достаете $_FILES['file'][0], $_FILES['file'][11], $_FILES['file'][12] и т.д. Но индексы элементов этого массива впринципе знать необязательно. Можно сделать обход массива foreach().
 
 Top
Kubert
Отправлено: 02 Июля, 2010 - 21:58:26
Post Id



Частый гость


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


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




По поводу 0, 11, 12... Это моя ошибка) С эксперементами случайно забыл вернуть обратно. исправл) var c=10; а надо var c=0;

Сейчас у меня в start.php

CODE (htmlphp):
скопировать код в буфер обмена
  1. <head>
  2. <script type="text/javascript" src="script.js"></script>
  3.  
  4. <script type="text/javascript"><!--
  5. window.onload = function() {
  6.         dynamicSelect("Country", "City");
  7. }
  8. //--></script>
  9. <META HTTP-EQUIV="Refresh" Content="2, URL=http://www.raztour.ru/admin/4/">
  10.  
  11. <style type="text/css">
  12. #center_div_true {
  13.  position:absolute;
  14.  text-align:center;
  15.  top:48%;
  16.  left:50%;
  17.  width:400px;
  18.  height:100px;
  19.  background:#bbd406;
  20.  margin-left:-200px;
  21.  margin-top:-50px;
  22.  border:5px solid #4fa800;
  23.  color:#fff;
  24.  font-family:Tahoma, Geneva, sans-serif;
  25.  font-size:24px;
  26.  font-weight:bold;
  27. }
  28. #center_div_false {
  29.  position:absolute;
  30.  text-align:center;
  31.  top:48%;
  32.  left:50%;
  33.  width:400px;
  34.  height:100px;
  35.  background:#d80834;
  36.  margin-left:-200px;
  37.  margin-top:-50px;
  38.  border:5px solid #8d0220;
  39.  color:#fff;
  40.  font-family:Tahoma, Geneva, sans-serif;
  41.  font-size:24px;
  42.  font-weight:bold;
  43. }
  44. </style>
  45.  
  46.  
  47. </head>
  48. <body>
  49.  
  50.  
  51.  
  52. <?
  53. $file = $_FILES['file']['tmp_name']; //Переменная переданного файла - мой комент
  54. $filename = $_FILES['file']['name']; //Имя файла как я предпологаю - мой комент
  55.  
  56.  $size = filesize ($_FILES['file']['tmp_name']);
  57.  $type = strtolower(substr($filename, 1+strrpos($filename,".")));
  58.  $new_name = time().'.'.$type;
  59.  $new_name_small = time().'.small'.'.'.$type;
  60.  $new_name_trumb = time().'.trumb'.'.'.$type;
  61.  
  62.    if (copy($file, "img/".$new_name))
  63.             chmod("../../img/id_country/6/".$new_name, 0666);
  64.      echo "";
  65.  
  66. require ('imgresize.php');
  67.  if (img_resize('img/'.$new_name, 'img/'.$new_name_small, 300, 200))
  68.      echo "";
  69.  else
  70.    echo '';
  71.  
  72.  if (img_resize('img/'.$new_name, 'img/'.$new_name_trumb, 100, 100))
  73.      echo "";
  74.  else
  75.    echo '';
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82. include ("../include/db.php");
  83.  
  84. if (isset ($_POST['new_name']))  {$new_name = $_POST['new_name']; if ($new_name == ''){unset($new_name);} }
  85. if (isset ($_POST['new_name_small']))  {$new_name_small = $_POST['new_name_small']; if ($new_name_small == ''){unset($new_name_small);} }
  86. if (isset ($_POST['new_name_trumb']))  {$new_name_trumb = $_POST['new_name_trumb']; if ($new_name_trumb == ''){unset($new_name_trumb);} }
  87. if (isset ($_POST['id_country']))  {$id_country = $_POST['id_country']; if ($id_country == ''){unset($id_country);} }
  88.  
  89.  
  90. if  (isset($new_name, $new_name_small, $new_name_trumb, $id_country))
  91.  
  92. {
  93. /* Заношу в базу */
  94. $result = mysql_query ("INSERT INTO img (new_name, new_name_small, new_name_trumb, id_country) VALUES ('/img/country/$new_name','/img/country/$new_name_small','/img/country/$new_name_trumb','$id_country')");
  95.  
  96. if ($result == 'true') {echo "<div id='center_div_true'><div style='padding-top:33px;'>Фотография добавлена</div></div>";}
  97. else {echo "<div id='center_div_false'><div style='padding-top:33px;'>Фотография не добавлена</div></div>";}
  98.  
  99. }
  100.  
  101. else
  102.  
  103. {
  104. echo "<div id='center_div_false'><div style='padding-top:33px;'>Введена не вся информация</div></div>";
  105. }
  106.  
  107.  
  108.  
  109. ?>
  110.  
  111. </body>


У меня несколько другое, я буду оьбрабатывать каждую картинку отдельно, и грузить в бд. Вообще это правильно...? Или есть более кототкий код?
 
 Top
Uchkuma
Отправлено: 02 Июля, 2010 - 22:29:39
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




Лень разбирать код.
В общем надо делать ваши операции в цикле:
PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['file'] as $fil){
  2. $file = $fil['tmp_name'];
  3. $filename = $fil['name'];
  4. // и далее...
  5.  
  6. }

Добавление записи в базу можно сделать в этом же цикле, а можно этим циклом сформировать строку запроса, а потом одним запросом занести все в базу. Последний вариант рациональнее.
 
 Top
JustUserR
Отправлено: 03 Июля, 2010 - 01:59:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




Kubert пишет:
Идея в том что когда добавляешь новую форму для закачки файла, то ему присваивается новое имя, которое необходимо передать в экшен файл(start.php), там уже его обработать и добавить... Только вот не могу понять какое имя у формы по дефолту, и какие имена будут добавляться?
Использование одних и тех же JS-функций возможно сразу для обработки нескольких различных объектов - если организовать передачу идентификатора объекта с которым будут совершаться определенные действия В вашем случае динамически добавляемые поля для загрузки файлов находятся внутри формы - и вы можете передавать в вызываемых функциях ссылку на текущую форму как this.form то есть конструкция вызова будет иметь вид к примеру addline(this.form) - и в этом случае вообще не придется использовать явное или неявное именование ваших форм Далее в самой JS-функции нужно убрать привязку к имени таблицы внутри формы - и индексировать ее как дочерний элемент с помощью DOM-модели И вообще ваши JS-функции можно упоростить при использовании DOM-модели - ведь вы сможете добавлять и удалять элементы с помощью фукнции appendChild и removeChild соответственно - и не надо будет использовать регулярные выражения с кавычками и уровнями экранирования в них


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB