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

Форум PHP

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

 

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

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

тема: Как обработать огромную форму? Подскажите пожалуйсто решение...
 
 автор: nek-v   (01.09.2008 в 11:11)   письмо автору
 
 

Доброго времени суток граждане...
В PHP я новичек но проблема серьезнач встала.
Суть такова: Есть огромная форма (150 полей ввода), можно миновать ручной прописки ВСЕХ 150 полей ввода? (соответстванно в обработчике формы 150 POST переменных).
То есть можно ли как то автоматически генерировать форму?
Может как то через массивы? Подскажите кто что может?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 11:26)   письмо автору
 
   для: nek-v   (01.09.2008 в 11:11)
 

не совсем понятно, что нужно - генерировать форму или обрабатывать ее значения?

  Ответить  
 
 автор: amigo62   (01.09.2008 в 11:37)   письмо автору
 
   для: Balamut182   (01.09.2008 в 11:26)
 

Если поля однотипные - через цикл for

  Ответить  
 
 автор: nek-v   (01.09.2008 в 11:41)   письмо автору
 
   для: amigo62   (01.09.2008 в 11:37)
 

В форме 2 <textarea></textarea> и все остальное <input type="text"/>
нужно чтоб name полей ввода был уникальным

  Ответить  
 
 автор: nek-v   (01.09.2008 в 11:45)   письмо автору
 
   для: nek-v   (01.09.2008 в 11:41)
 

Выглядеть должна так http://nek-v.org.ru/in/form.php

  Ответить  
 
 автор: nek-v   (01.09.2008 в 11:39)   письмо автору
 
   для: Balamut182   (01.09.2008 в 11:26)
 

для начала ее нужно сгенерировать уж затем обработать...
Очень не хочется вписывать в обработчик 150 POST переменных...
Так же как и писать вручную всю форму...
Есть ли какое решение данного вопроса?

  Ответить  
 
 автор: Trianon   (01.09.2008 в 11:46)   письмо автору
 
   для: nek-v   (01.09.2008 в 11:11)
 

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

  Ответить  
 
 автор: Axxil   (01.09.2008 в 11:55)   письмо автору
 
   для: Trianon   (01.09.2008 в 11:46)
 

Это точно.
Я бы даже пытаться не стал.
В таком случае, обычно, разбивают форму на несколько страниц и делают мастер.
Тогда пользователь не видит весь объём работы и гораздо веселее заполняет поля :)

  Ответить  
 
 автор: nek-v   (01.09.2008 в 12:06)   письмо автору
 
   для: Axxil   (01.09.2008 в 11:55)
 

На правильность заполнения мне в принципе пофиг,тек как сей скрипт для внутренних нужд фирмы и заполняющий форму человек очень педантичен.
А код можете привести? Если не трудно?
Данные в с формы пишутся в БД.
Имена полей это индексы массива? Так?

  Ответить  
 
 автор: Trianon   (01.09.2008 в 12:10)   письмо автору
 
   для: nek-v   (01.09.2008 в 12:06)
 

если Вам пофиг на правильность заполнения, то нам стало быть пофиг на правильность ответа...

  Ответить  
 
 автор: nek-v   (01.09.2008 в 12:16)   письмо автору
 
   для: Trianon   (01.09.2008 в 12:10)
 

ну ну ну....
Не жадничайте ))))
Со временем и проверку ввода сделаю.
просто нужно срочно а писать по 150 полей и переменных это очень долго...
Цикл вывода формы примерно ваглядет так
<form method="post"> 
<?php 
for($i=0;$i<=150;$i++) 

print 
'<input type="text" name="yourname[]" /><br />'."\n"

?> 
<input type="submit" value="send" /> 
</form>

А как выглядет цикл обработки и записи в БД?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 12:30)   письмо автору
 
   для: nek-v   (01.09.2008 в 12:16)
 


<?php 
$sql 
"INSERT INTO `db_name` SET ";
foreach(
$_POST['yourname'] as $key=>$value)

$sql .= " `".$key."` = '".$value."',";

$sql substr($sql0strlen($sql)-1);
mysql_query($sql);
?> 

  Ответить  
 
 автор: nek-v   (01.09.2008 в 12:45)   письмо автору
 
   для: Balamut182   (01.09.2008 в 12:30)
 

То есть таблица создасться сама?
Или нужно ручками создавать?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 12:54)   письмо автору
 
   для: nek-v   (01.09.2008 в 12:45)
 

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

  Ответить  
 
 автор: nek-v   (01.09.2008 в 12:56)   письмо автору
 
   для: Balamut182   (01.09.2008 в 12:54)
 

ага =)
Или создать руками ее с полями по номерам индесов массива?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 13:35)   письмо автору
 
   для: nek-v   (01.09.2008 в 12:56)
 

в чем проблема? так же циклом создайте таблицу, только поменяйте запрос

$sql = "CREATE TABLE  `table_name` (
  `row_id` int(11) NOT NULL auto_increment,";
for($i = 0; $i < 150; $i++)
{
$sql .= "`col_".$i."` text, ";
}
$sql .=  "PRIMARY KEY  (`row_id`))";
mysql_query($sql);

  Ответить  
 
 автор: nek-v   (01.09.2008 в 14:03)   письмо автору
 
   для: Balamut182   (01.09.2008 в 13:35)
 

СПАСИБО!!!!!

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

  Ответить  
 
 автор: Axxil   (01.09.2008 в 14:10)   письмо автору
 
   для: nek-v   (01.09.2008 в 14:03)
 

Если не секрет, зачем понадобилось 150 полей одной формы? Для какой задачи?

  Ответить  
 
 автор: nek-v   (01.09.2008 в 14:13)   письмо автору
 
   для: Axxil   (01.09.2008 в 14:10)
 

http://nek-v.org.ru/in/form.php вот для этого.
Так оно должно выглядеть...

  Ответить  
 
 автор: nek-v   (01.09.2008 в 14:12)   письмо автору
 
   для: Balamut182   (01.09.2008 в 13:35)
 

Блин вот еще вопрос
<form method="post">  
<?php  
for($i=0;$i<=150;$i++)  
{  
print 
'<input type="text" name="yourname[]" /><br />'."\n";  
}  
?>  
<input type="submit" value="send" />  
</form> 

выводит их все по одной на строку
<input><br/>

а надо <tr> <td><input></td><td><input></td><td><input></td><td><input></td><td><input></td></tr>
вобщем их все но по 7 ячеек на одну сторочку html таблицы...
Как? о_О

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 14:24)   письмо автору
 
   для: nek-v   (01.09.2008 в 14:12)
 

что-нибудь в этом роде

<form method="post">  
<?php  
$num_on_row 
7;
$num 150;
$iter $num + ($num_on_row - ($num $num_on_row));
print 
'<table>';
for(
$i=1;$i<=$iter;$i++)  
{  
if(
$i $num_on_row ==1) print '<tr>';
print 
'<td>'.(($i <= $num)  ? '<input type="text" name="yourname[]" />' '').'</td>';  
if(
$i $num_on_row ==0) print '</tr>\n';
}  
print 
'</table>';
?>  
<input type="submit" value="send" />  
</form> 

  Ответить  
 
 автор: nek-v   (01.09.2008 в 14:38)   письмо автору
 
   для: Balamut182   (01.09.2008 в 14:24)
 

Ух!
Да вы асы ребятки....
А можно ли еще так чтоб при выводе первое поле в строке бало просто поле ввода
а последующие с атрибутом size="6"?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 14:45)   письмо автору
 
   для: nek-v   (01.09.2008 в 14:38)
 

<form method="post">  
<?php  
$num_on_row 
7;
$num 150;
$iter $num + ($num_on_row - ($num $num_on_row));
print 
'<table>';
for(
$i=1;$i<=$iter;$i++)  
{  
if(
$i $num_on_row ==1) print '<tr>';
print 
'<td>'.(($i <= $num)  ? '<input '.(($i 1) ? 'size="6" ' '').'type="text" name="yourname[]" />' '').'</td>';  
if(
$i $num_on_row ==0) print '</tr>\n';
}  
print 
'</table>';
?>  
<input type="submit" value="send" />  
</form>  

  Ответить  
 
 автор: nek-v   (01.09.2008 в 14:54)   письмо автору
 
   для: Balamut182   (01.09.2008 в 14:45)
 

то что нужно но не до конца.
Первое поле КАЖДОЙ строчки ,не только самой первой.

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 14:56)   письмо автору
 
   для: nek-v   (01.09.2008 в 14:54)
 

вот так?
<form method="post">  
<?php  
$num_on_row 
7;
$num 150;
$iter $num + ($num_on_row - ($num $num_on_row));
print 
'<table>';
for(
$i=1;$i<=$iter;$i++)  
{  
$ost $i $num_on_row;
if(
$ost ==1) print '<tr>';
print 
'<td>'.(($i <= $num)  ? '<input '.(($ost ==1) ? '' 'size="6" ').'type="text" name="yourname[]" />' '').'</td>';  
if(
$ost ==0) print '</tr>\n';
}  
print 
'</table>';
?>  
<input type="submit" value="send" />  
</form> 

  Ответить  
 
 автор: nek-v   (01.09.2008 в 14:59)   письмо автору
 
   для: Balamut182   (01.09.2008 в 14:56)
 

*DANSE*
Да так!!!!!
Блин вы супер!!!

  Ответить  
 
 автор: nek-v   (01.09.2008 в 15:00)   письмо автору
 
   для: Balamut182   (01.09.2008 в 14:56)
 

А с выводом из базы не поможете?
Так же в цикле?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 15:05)   письмо автору
 
   для: nek-v   (01.09.2008 в 15:00)
 

хм....
слабо представляю себе вашу таблицу. там будет только одна запись?
в принципе тоже самое.
делаете запрос на выборку и в инпут в цикле добавляете value

  Ответить  
 
 автор: nek-v   (01.09.2008 в 15:12)   письмо автору
 
   для: Balamut182   (01.09.2008 в 15:05)
 

записей там будет тысячи.
Ибо то с чем мы тут бьемся это сборник технологических карт - рецептов для ресторана.
А рецептов тысячи.
Я их буду выдергивать по id. то есть переходя по ссылке типа viev.php?act=viev&id=$id дуду выдергивать нужную запись.
Надо вывод такой же как и форма с небольшими добавками статического текста.
только выводить не в инпуты а в простые ячейки таблицы

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 15:28)   письмо автору
 
   для: nek-v   (01.09.2008 в 15:12)
 

<table>
<?php  
$num_on_row 
7;
$num 150;
$iter $num + ($num_on_row - ($num $num_on_row));
$sql "SELECT * FROM `table_name` WHERE `id_row` = '".$_GET['id']."'";
$query_id mysql_query($sql);
$row mysql_fetch_array($query_id);
for(
$i=1;$i<=$iter;$i++)  
{  
$ost $i $num_on_row;
if(
$ost ==1) print '<tr>';
print 
'<td>'.(($i <= $num)  ? row['col_'.$i] : '').'</td>';  
if(
$ost ==0) print '</tr>\n';
}  
?>  
</table>
 

подразумевается, что имена столбцов таблицы у вас называются col_1, col_2 и т.д.
первичный ключ - id_row

  Ответить  
 
 автор: nek-v   (01.09.2008 в 16:33)   письмо автору
 
   для: Balamut182   (01.09.2008 в 15:28)
 

я понимаю что я уже обнаглел сос воими вопросами,
но попытка записи выдала вот это:
Unknown column '0' in 'field list'

Что это значит?

  Ответить  
 
 автор: sim5   (01.09.2008 в 16:36)   письмо автору
 
   для: nek-v   (01.09.2008 в 16:33)
 

Нет колонки с таким именем в таблице базы данных.

  Ответить  
 
 автор: nek-v   (01.09.2008 в 16:37)   письмо автору
 
   для: sim5   (01.09.2008 в 16:36)
 

но она есть!

  Ответить  
 
 автор: sim5   (01.09.2008 в 16:44)   письмо автору
 
   для: nek-v   (01.09.2008 в 16:37)
 

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

  Ответить  
 
 автор: nek-v   (01.09.2008 в 16:46)   письмо автору
 
   для: sim5   (01.09.2008 в 16:44)
 

разумнее...
но мозгов у меня маловато...
Может покажете как?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 16:54)   письмо автору
 
   для: nek-v   (01.09.2008 в 16:46)
 

пишите в аську

  Ответить  
 
 автор: sim5   (01.09.2008 в 18:47)   письмо автору
 
   для: nek-v   (01.09.2008 в 16:46)
 

Можно привести и пример. Но. Сначала решите как у вас будет организована сама база этих данных. Если вы это уже решили, то как организована таблица/таблицы ее? "Номер блюда" - это обязательно должен вводить пользователь? Что означает этот параметр?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 16:38)   письмо автору
 
   для: nek-v   (01.09.2008 в 16:33)
 

это эначит, что такое поле не найдено)
вам надо определиться с именами столбцов таблицы и именами инпутов формы и вести отсчет в циклах с одной позиции, т.е. начинать цикл допустим с 1 и называть колонки соответственно col_1, col_2 и т.д. и придерживаться этих имен при создании таблицы и при добавлении в нее записи
<?php 
$sql 
"INSERT INTO `table_name` SET ";
foreach(
$_POST['yourname'] as $key=>$value)

$sql .= " `col_".$key."` = '".$value."',";

$sql substr($sql0strlen($sql)-1);
mysql_query($sql);
?>  


<?php
$sql 
"CREATE TABLE  `table_name` (
  `row_id` int(11) NOT NULL auto_increment,"
;
for(
$i 0$i 150$i++)
{
$sql .= "`col_".$i."` text, ";
}
$sql .=  "PRIMARY KEY  (`row_id`))";
mysql_query($sql); 
?>


<table>
<?php  
$num_on_row 
7;
$num 150;
$iter $num + ($num_on_row - ($num $num_on_row));
$sql "SELECT * FROM `table_name` WHERE `id_row` = '".$_GET['id']."'";
$query_id mysql_query($sql);
$row mysql_fetch_array($query_id);
for(
$i=0;$i<$iter;$i++)  
{  
$ost $i $num_on_row;
if(
$ost ==1) print '<tr>';
print 
'<td>'.(($i <= $num)  ? row['col_'.$i] : '').'</td>';  
if(
$ost ==0) print '</tr>\n';
}  
?>  
</table> 

  Ответить  
 
 автор: nek-v   (01.09.2008 в 16:56)   письмо автору
 
   для: Balamut182   (01.09.2008 в 16:38)
 

о боже...
foreach($_POST['yourname'] as $key=>$value

это чья переменная???
Кнопки отправки или полей формы?
Может в нее col_ писать надо?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 16:59)   письмо автору
 
   для: nek-v   (01.09.2008 в 16:56)
 

про это написано в предыдущем посте )
$sql .= " `col_".$key."` = '".$value."',";

  Ответить  
 
 автор: nek-v   (01.09.2008 в 17:13)   письмо автору
 
   для: Balamut182   (01.09.2008 в 16:59)
 

$_POST['yourname']
вот эта
$_POST['col_']
может так?

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 17:14)   письмо автору
 
   для: nek-v   (01.09.2008 в 17:13)
 

<?php 
$sql 
"INSERT INTO `table_name` SET ";
foreach(
$_POST['yourname'] as $key=>$value)

$sql .= " `col_".$key."` = '".$value."',";

$sql substr($sql0strlen($sql)-1);
mysql_query($sql);
?>  

  Ответить  
 
 автор: nek-v   (01.09.2008 в 17:19)   письмо автору
 
   для: Balamut182   (01.09.2008 в 17:14)
 

угу
[You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1PHP Warning: Invalid argument supplied for foreach() in G:\проекты\conf\add1.php on line 4 

  Ответить  
 
 автор: Balamut182   (01.09.2008 в 17:22)   письмо автору
 
   для: nek-v   (01.09.2008 в 17:19)
 

напишите пожалуйста в аську 463-362-568 что содержит массив $_POST

  Ответить  
 
 автор: coloboc66   (01.09.2008 в 14:28)   письмо автору
 
   для: nek-v   (01.09.2008 в 14:12)
 

---

  Ответить  
 
 автор: argo   (01.09.2008 в 18:41)   письмо автору
 
   для: coloboc66   (01.09.2008 в 14:28)
 

...по правилам русского языка принято писать жИры, а не жЫры!
(Прим см. учебник русского языка 3 класс// правила ЖИ-ШИ пиши с буквой И)

  Ответить  
 
 автор: BinLaden   (01.09.2008 в 19:43)   письмо автору
 
   для: argo   (01.09.2008 в 18:41)
 

coloboc66 вообще-то туда не ходил. Поэтому не надо его попрекать.

  Ответить  
Rambler's Top100
вверх

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