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
Форумы портала PHP.SU :: Версия для печати :: доработка обработчика веб форм
Форумы портала PHP.SU » » Вопросы новичков » доработка обработчика веб форм

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

1. Алтенрион - 03 Октября, 2012 - 03:05:23 - перейти к сообщению
Собственно, постараюсь понятно и доходчиво объяснить суть проблемы.

Имеется 15 веб форм. Они методом POST передают обработчику данные. В обработчике требуется проверить на существование информации в этих переменных и в случае обнаружения таковой внести все данные построчно в базу.

Более подробно:

Имеются 15 checkbox -ов, пользователь может из них выбрать любые и в любом кол-ве. При подтверждении заполнения форм, все данные передаются скрипту обработчика.

В нем реализуется такая проверка :

PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['a'])) { $a= $_POST['a'];
  2.         if ($a== '') { unset($a);} }  
  3. if (isset($_POST['b'])) { $a= $_POST['b'];
  4.         if ($b== '') { unset($b);} }  
  5. if (isset($_POST['c'])) { $a= $_POST['c'];
  6.         if ($c== '') { unset($c);} }  
  7. if (isset($_POST['d'])) { $a= $_POST['d'];
  8.         if ($d== '') { unset($d);} }  
  9. if (isset($_POST['e'])) { $a= $_POST['e'];
  10.         if ($e== '') { unset($e);} }  
  11.  
  12.             ---- || -----
  13.  
  14. if (isset($_POST['z'])) { $a= $_POST['z'];
  15.         if ($z== '') { unset($z);} }  
  16.  




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

Далее все данные надо занести в 1 переменную с разделением на строки :

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $gt = $a.'\n'.$b.'\n'.$c.'\n'.$d.'\n'.$e. ... .$z;
  4.  
  5.  



Собственно Это очень сырое написание. Убедительная просьба помочь сократить код, или помочь разобраться , возможно ли здесь применение цикла foreach.
2. tato - 03 Октября, 2012 - 03:47:50 - перейти к сообщению
В форме:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. ...
  3.  
  4. <input type="checkbox" name="mydata[checkbox_id]" />
  5.  
  6. ...
  7.  


Обрати внимание на name фактически мы создаем таким образом массив mydata, где
ключом является checkbox_id.

далее

PHP:
скопировать код в буфер обмена
  1.  
  2. if( isset( $_POST['mydata'] ) )
  3. {
  4.      // если массив существует
  5.  
  6.      // перебираем
  7.     foreach( $_POST['mydata'] as $checkbox_id=>$value )
  8.     {
  9.         echo "$checkbox_id was checked!<br>";
  10.     }
  11. }
  12.  


Отмечу, что $value всегда будет true (в данном примере), т.к. если чек бокс не выделен, он и не попадет в массив mydata.
3. Алтенрион - 03 Октября, 2012 - 04:04:02 - перейти к сообщению
Честно говоря не очень уверен в применении такого варианта.

--- name у каждого чек бокса свой. так вместо checkbox_id надо будет 15 раз написать разный идентификатор id?

PHP:
скопировать код в буфер обмена
  1. $_POST['mydata']
появляется даже при 1 отмеченном чек боксе...

PHP:
скопировать код в буфер обмена
  1. $gt = $a.'\n'.$b.'\n'.$c.'\n'.$d.'\n'.$e. ... .$z;
-- этот вариант записи применим для записи в бд построчно ?
В случае отсутствия переменной или ее идентичности пустоте, она будет записываться как пробел, или будет вызывать ошибку?



.
4. Okula - 03 Октября, 2012 - 07:04:40 - перейти к сообщению
Алтенрион пишет:
--- name у каждого чек бокса свой. так вместо checkbox_id надо будет 15 раз написать разный идентификатор id?

Ну ты же писал для каждого чекбокса свой name, вот и подправь его. В чём проблема?
5. AlexAnder - 03 Октября, 2012 - 09:20:26 - перейти к сообщению
Спойлер (Отобразить)
6. Алтенрион - 03 Октября, 2012 - 14:30:35 - перейти к сообщению
Okula пишет:
Алтенрион пишет:
--- name у каждого чек бокса свой. так вместо checkbox_id надо будет 15 раз написать разный идентификатор id?

Ну ты же писал для каждого чекбокса свой name, вот и подправь его. В чём проблема?



Я не говорю что это проблема, я уточняю как именно подправить... Закатив глазки
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <p id="not_rec" ><input type="checkbox"  name="a" value="r" /> ***********************************************</p>
  4. <p id="rec"><input type="checkbox"  name="b" value="r" />  ***********************************************</p>
  5. <p id="rec"><input type="checkbox"  name="c" value="r" />  ***********************************************</p>
  6. <p id="not_rec" ><input type="checkbox"  name="d" value="r" />  ***********************************************</p>
  7. <p id="not_rec" ><input type="checkbox"  name="e" value="r" />  *********************************************** </p>
  8. <p id="not_rec" ><input type="checkbox"  name="f" value="r" /> ***********************************************</p>
  9. <p id="rec"><input type="checkbox"  name="g" value="r" />  ***********************************************</p>
  10. <p id="not_rec" ><input type="checkbox"  name="k" value="r" />  *********************************************** </p>
  11. <p id="not_rec" ><input type="checkbox"  name="r" value="r" />  *********************************************** </p>



Заменить на :


PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <p id="not_rec" ><input type="checkbox"  name="mydata[a]" value="r" /> ***********************************************</p>
  4. <p id="rec"><input type="checkbox"  name="mydata[b]" value="r" />  ***********************************************</p>
  5. <p id="rec"><input type="checkbox"  name="mydata[c]" value="r" />  ***********************************************</p>
  6. <p id="not_rec" ><input type="checkbox"  name="mydata[d]" value="r" />  ***********************************************</p>
  7. <p id="not_rec" ><input type="checkbox"  name="mydata[e]" value="r" />  *********************************************** </p>
  8. <p id="not_rec" ><input type="checkbox"  name="mydata[f]" value="r" /> ***********************************************</p>
  9. <p id="rec"><input type="checkbox"  name="mydata[g]" value="r" />  ***********************************************</p>
  10. <p id="not_rec" ><input type="checkbox"  name="mydata[k]" value="r" />  *********************************************** </p>
  11. <p id="not_rec" ><input type="checkbox"  name="mydata[r]" value="r" />  *********************************************** </p>
  12.  
  13.  






И что именно выполнит значение Value в строке

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. foreach( $_POST['mydata'] as $checkbox_id=>$value )
  4.  
  5.  


Растерялся

/
7. AlexAnder - 03 Октября, 2012 - 14:39:46 - перейти к сообщению

http://www.php[dot]su/learnphp/cs/?cycles#foreach


Спойлер (Отобразить)

повторение id - not good
8. Алтенрион - 03 Октября, 2012 - 19:24:14 - перейти к сообщению
Цитата:
повторение id - not good


Так где же повторение?... переменная меняется..
9. Мелкий - 03 Октября, 2012 - 21:21:19 - перейти к сообщению
Алтенрион пишет:
Так где же повторение?...

Речь о HTML. <p id=
id не должен повторяться на странице. На то он и id
10. sKaa - 03 Октября, 2012 - 21:24:44 - перейти к сообщению
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="text[]" />
  2. <input type="text" name="text[]" />
  3. <input type="text" name="text[]" />
  4. <input type="text" name="text[]" />


PHP:
скопировать код в буфер обмена
  1. var_dump($_POST);


Нет?
11. Алтенрион - 04 Октября, 2012 - 00:03:34 - перейти к сообщению
Мелкий пишет:


Речь о HTML. <p id=
id не должен повторяться на странице. На то он и id




Насчет этого ,да, согласен. Вспомнил разницу между id и class и исправил. Просто писал первичный код будучи ну очень сонным, а потом и внимания не обращал.

Далее.



sKaa пишет:


CODE (html):
скопировать код в буфер обмена
  1.  
  2. скопировать код в буфер обмена
  3. <input type="text" name="text[]" />
  4. <input type="text" name="text[]" />
  5. <input type="text" name="text[]" />
  6. <input type="text" name="text[]" />





Нет?




Честно говоря совсем не понял (((((... <input type="text" -- это текстовое поле а не чек бокс. Но это не принципиально если речь о имени... а использование var_dump($_POST); мне не известно.




На данный момент фукционально реализован такой код:


Сами формы:

CODE (html):
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. <p class="not_rec" ><input type="checkbox"  name="a" value="АААААААААААА" /> ААААААААААААААА </p>
  5. <p class="rec"><input type="checkbox"  name="b" value="ббббббббббббббб»" /> ббббббббббб &nbsp; &nbsp; &nbsp; <font color="#C10000">(рекомендуется) </font></p>
  6. <p class="rec"><input type="checkbox"  name="c" value="ввввввввввввввв" /> ввввввввввввввввввввв &nbsp;&nbsp;&nbsp; <font color="#C10000">(рекомендуется) </font></p>
  7. <p class="not_rec" ><input type="checkbox"  name="d" value="гггггггггггггггггггггггггг" /> ггггггггггггггггггггггггггггггггггггггг </p>
  8. <p class="not_rec" ><input type="checkbox"  name="e" value="ддддддддддддддддд." />ддддддддддддддддддддддддд</p>
  9. <p class="not_rec" ><input type="checkbox"  name="f" value="ееееееееееееееееееееее" /> ееееееееееееееееееееееееее</p>
  10.  
  11.  
  12.  






Вот код обработчика для них :

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. if (isset($_POST['a'])) { $b = $_POST['a'];
  4.         if ($a == '') { unset($a);} }
  5.         if (isset($_POST['b'])) { $b = $_POST['b'];
  6.         if ($b == '') { unset($b);} }
  7.         if (isset($_POST['c'])) { $c = $_POST['c'];
  8.         if ($c == '') { unset($c);} }
  9.         if (isset($_POST['d'])) { $d = $_POST['d'];
  10.         if ($d == '') { unset($d);} }
  11.         if (isset($_POST['e'])) { $e = $_POST['e'];
  12.         if ($e == '') { unset($e);} }
  13.         if (isset($_POST['f'])) { $f = $_POST['f'];
  14.         if ($f == '') { unset($f);} }
  15.        
  16.        
  17.         $gt=$a.'<br>'.$b.'<br>'.$c.'<br>'.$d.'<br>'.$e.'<br>'.$f;
  18.  
  19.  
  20.  





Далее через запрос данные заносятся в нужную базу:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  $result2 = mysql_query ("INSERT INTO название таблицы (***,****,*****,***,***,***,****,***,***,gt) VALUES('$***','$***','$****','$***','$***','$***','$***','$***','$****','$gt')");
  4.  
  5.  
  6.  



В чем суть оставшихся проблем:




Помогите с этими вопросами, буду признателен. Однако



.
12. tato - 04 Октября, 2012 - 06:30:07 - перейти к сообщению
Накидал тебе пример.

Спойлер (Отобразить)
13. AlexAnder - 04 Октября, 2012 - 10:56:15 - перейти к сообщению

uchenikpopovadetected пишет:
Спойлер (Отобразить)
бррр

(Добавление)
Алтенрион пишет:

В чем суть оставшихся проблем:

    1)Не нравится нагромождение кода.
    2)Требуется что бы переменные $a $b $c $d $e $f сохранялись в базе построчно, и в случае отсутствия какого либо из элементов, чтобы его там не было, чтобы он не заносился в переменную $gt. Ну или хотя бы что бы в место него не было пустых строк.

.

посмотри этот пост
Спойлер (Отобразить)
14. Алтенрион - 05 Октября, 2012 - 18:43:03 - перейти к сообщению
Я не понимаю приводимую вами конструкцию. ((( Простите, видимо я настолько зелен.

Сначала по видимому идет html формы. За ними php код. В php коде объявляется условие.

если имеется что либо передаваемое методогм пост, то происходит приравнивание 3 переменных .

Что именно выполняется после знака "?" в трех строчках подряд.
Если условие выполняется, то выдаем таблицу...

Далее продолжается условие.. что оно делает не могу разобрать.(
15. Алтенрион - 05 Октября, 2012 - 21:08:38 - перейти к сообщению
грустно... Огорчение

 

Powered by ExBB FM 1.0 RC1