|
|
|
| Всем привет!
Вопрос следующего характера, есть три таблицы:
Анкета или голосование:
CREATE TABLE IF NOT EXISTS satisfy (
id int(10) unsigned NOT NULL auto_increment,
satis tinytext ,
date_s date ,
date_e date ,
vis int(1) unsigned ,
section_id int(2) ,
PRIMARY KEY (id)
);
|
Вопрос:
CREATE TABLE IF NOT EXISTS question (
id int(10) unsigned NOT NULL auto_increment,
question tinytext ,
vis int(1) unsigned ,
pos int(2) unsigned ,
PRIMARY KEY (id)
);
|
Ответ:
CREATE TABLE IF NOT EXISTS answer (
id int(10) unsigned NOT NULL auto_increment,
answer tinytext ,
question_id int(10) unsigned ,
PRIMARY KEY (id)
);
|
Допустим у меня в анкете 3 вопроса в каждом вопросе по 3 ответа, я написал скрипт который все это дело выводит.
echo "<table bgcolor='#8EDBFF' cellpadding='0' cellspacing='0' border='0' width='750'>";
echo "<tr>";
echo "<td class='content'>";
$query = mysql_query( "
SELECT
id,
satis
FROM
satisfy
WHERE
date_s <= NOW()
AND date_e >= NOW()");
if (!$query) echo mysql_error();
echo "<form action='index.php?bk=add_total' method='post'>";
while ($row_satis = mysql_fetch_assoc($query))
{
echo "<table cellpadding='0' cellspacing='0' border='0'>";
echo "<tr>";
echo "<td>Наименование голосования/анкетирования:</td>";
echo "<td>$row_satis[id]</td>";
echo "<td>$row_satis[satis]</td>";
echo "</tr>";
echo "<tr>";
echo "<input type='text' name='id_satisfy' value='$row_satis[id]'>";
$sql = mysql_query ( "SELECT id,question,type_id FROM question WHERE sat_id='$row_satis[id]'" );
if (!$sql) mysql_error();
while ($res_question = mysql_fetch_assoc($sql))
{
echo "<input type='text' name='id_question' value='$res_question[id]'>";
echo "<td>$res_question[question]</td>";
//Вывод ответов
$ans = mysql_query ( "SELECT id,answer FROM answer WHERE question_id='$res_question[id]'" );
while ($res_answer = mysql_fetch_assoc($ans))
{
if ($res_question[type_id] == 1) $try = "checkbox";
elseif ($res_question[type_id] == 2) $try = "radio";
else $try = "text";
echo "<tr>";
echo "<td><input type='$try' id='$res_answer[id]' name='id_answer[]' value=".$res_answer["id"]." ></td>";
echo "<td><label for='$res_answer[id]'>${res_answer["answer"]}</label><td>";
echo "</tr>";
}
echo "</tr>";
echo "<tr>";
echo "<td align='right'><input class='button' type='submit' value='Отправить'></td>";
echo "</form>";
echo "</tr>";
}
echo "</tr>";
echo "</table>";
}
echo "</td>";
echo "</tr>";
echo "</table>";
|
Как сделать чтобы все вопросы были в одной форме, спасибо: | |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 14:56)
| | А в чем суть вопроса? Прописывайте все поля в одной форме, в чем проблема? | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 15:00)
| | Просто в приведенном ранее коде, она на каждый вопрос выведет кнопку submit, а вопросов может быть много. Не будет же пользователь 10 раз нажимать на разные кнопки.
А если поставить вывод submit за циклом он формирует это как одну форму, соответственно нельзя выбрать для двух вопросов 2 radio! | |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 15:04)
| | Почему нельзя? Вы можете одному вопросу сколь угодно радиокнопок повесить, так же и чекбоксов - группируйте их по именам, индексам... объявляйте их массивами... и будет у вас одна кнопка SUBMIT. | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 15:19)
| | Не могли бы вы поподробнее сказать? По индексам из БД? | |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 15:23)
| | Напишите просто код формы, которую вы ожидаете увидеть, и разбейте ее пробелами на секции, как бы, если бы вам потребовалось несколько форм. И напишите, что является проблемой - так виднее будет. | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 15:29)
| |
<FORM action=index.php?bk=add_total method=post>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD>Наименование голосования/анкетирования:</TD>
<TD>3</TD>
<TD>FORD</TD></TR>
<TR><INPUT value=3 name=id_satisfy><INPUT value=23
name=id_question>
<TD>Какой автомобиль?</TD>
<TR>
<TD><INPUT id=55 type=radio value=55 name=id_answer[]></TD>
<TD><LABEL for=55>focus</LABEL>
<TD></TD>
<TR>
<TD><INPUT id=56 type=radio value=56 name=id_answer[]></TD>
<TD><LABEL for=56>fusion</LABEL>
<TD></TD>
<TR>
<TD><INPUT id=70 type=radio value=70 name=id_answer[]></TD>
<TD><LABEL for=70>mondeo</LABEL>
<TD></TD></TR>
<TR></TR><INPUT value=29 name=id_question>
<TR>
<TD>Какой объем?</TD>
<TR>
<TD><INPUT id=71 type=radio value=71 name=id_answer[]></TD>
<TD><LABEL for=71>1,2</LABEL>
<TD></TD>
<TR>
<TD><INPUT id=72 type=radio value=72 name=id_answer[]></TD>
<TD><LABEL for=72>1,4</LABEL>
<TD></TD>
<TR>
<TD><INPUT id=73 type=radio value=73 name=id_answer[]></TD>
<TD><LABEL for=73>1,6</LABEL>
<TD></TD>
<TR>
<TD><INPUT id=74 type=radio value=74 name=id_answer[]></TD>
<TD><LABEL for=74>1,8</LABEL>
<TD></TD>
<TR>
<TD><INPUT id=75 type=radio value=75 name=id_answer[]></TD>
<TD><LABEL for=75>2,0</LABEL>
<TD></TD></TR>
<TR></TR>
<TR>
<TD align=right><INPUT class=button type=submit value=Отправить></TD></FORM>
|
проблема в том что в коде форма формируется с одинаковыми имена, а мне нужно с разными? | |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 15:40)
| | То есть у вас радиокнопки должны быть независимы? Тогда доваляйте к имени id, как я понимаю это зависит от записи в базе:
<INPUT id=55 type=radio value=55 name=id_answer_55[]>
<INPUT id=56 type=radio value=56 name=id_answer_56[]>
|
Например так. Я бы вообще убрал из имени id_ | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 15:45)
| | Тогда мне не записать результаты опроса или анкетирования! Я же формирую список checkbox в цикле! | |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 15:47)
| | Ну и формируйте. Почему не записать результатов анкетирования? Вы имеете ввиду, что не сможете получить данные от формы? | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 15:51)
| | Да, как я потом буду записывать если у меня в коде будет:
echo "<td><input type='$try' id='$res_answer[id]' name='id_answer[]._.$res_answer[id]' value=".$res_answer["id"]." ></td>";
|
Чтобы сформировать форму вида:
<INPUT id=55 type=radio value=55 name=id_answer_55[]>
А записываю я в базу вот так:
foreach($_POST['id_answer'] as $id_answer)
{
$query="INSERT INTO total (id,id_satisfy,id_question,id_answer) VALUES ('0','$id_satisfy','$id_question','$id_answer')";
if (!mysql_query($query)) echo mysql_error();
|
| |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 16:00)
| | Вы кругом $id_answer прописали, не понятно зачем. Ну и в чем проблема? Назовите свои кнопки вообще как name_1[], name_2[]... и т.д., какая разница. Вы же значение кнопок записываете, а не их имена, а значение вы получите только у нажатых радиокнопок. | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 16:12)
| |
echo "<td><input type='$try' id='$res_answer[id]' name='id_answer[]._.$res_answer[id]' value=".$res_answer["id"]." ></td>";
|
При таком коде в базу он пишет, все правильно. Но в форме я могу выделить в одной форме несколько radio - а по определению это неправильно! | |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 16:18)
| | Ну я же вас спрашивал - у вас какие кнопки должны быть независимы или зависимы? Если зависимы (то есть можно нажать только одну), то имена у таких конопок должны быть одинаковы: id_answer[]. Если в одной форме у вас должно быть несколько групп кнопок с зависимой фиксацией, то именуйте их соответственно:
'id_answer_55[]
'id_answer_55[]
'id_answer_56[]
'id_answer_56[]
Тогда вытащить все можно в цикле:
<?
foreach ($vars["_POST"] as $key => $val) {
//здесь можно получить имя кнопики принадлежащей какой либо группе и т.п.
//следовательно значение группы и пр.
{
|
| |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 16:27)
| | <?
foreach ($vars["_POST"] as $key => $val) {
//здесь можно получить имя кнопики принадлежащей какой либо группе и т.п.
//следовательно значение группы и пр.
{
Уже при записе в базу данных?
И ПРи этом должно быть
name='id_answer[]._.$res_answer[id]'
или name='id_answer[]' | |
|
|
|
|
|
|
|
для: Front
(22.10.2007 в 16:30)
| |
<?
$vars = get_defined_vars(); //массив всех определённых переменных.
foreach ($vars["_POST"] as $key => $val) {
//здесь получаете все что вам надо - это будут имена
//кнопок формы, виделить которые из массива просто
//достаточно обрезать у имени id_answer_
//и вы получите id (номер кнопки)
//здесть можете сформировать строки запроса к базе,
//а вне цикла вставить их
//можете в цикле вставлять
}
|
Как должны называться кнопки, зависит от того, какие вам нужны. Если имена радиокнопок одинаковы, то они имеют зависимую фиксацию - можно выбрать только одну из них, и соотвественно, если имена кнопок разные, можно выбрать много радио кнопок. | |
|
|
|
|
|
|
|
для: sim5
(22.10.2007 в 16:55)
| | //достаточно обрезать у имени id_answer_
А зачем их обрезать если у них имена одинаковые, они же имеют зависимую Фиксанцию.
Получил я все переменные:
$vars = get_defined_vars(); в виде двухмерного массива.
При этом код я изменил следующим образом:
echo "<td><input type='text' name='id_question[]' value='$res_question[id]'></td>";
|
У меня просто к определенному вопросу по id привязан определенный ответ, а сам вопрос привязан к номеру анкетирования или голосования!
А как мне теперь записать это все в базу данных? | |
|
|
|
|
|
|
|
для: Front
(23.10.2007 в 10:27)
| | Если у вас ВСЕ кнопки, это кнопки с зависимой фиксацией, то вам вообще ничего "резать" не надо. Это нужно было бы, если бы из групп кнопок выделить нужное. Так что $vars = get_defined_vars(); и сопутсвующее можно выбросить. Имена кнопок в этом случае роли не играют, лишь бы это был массив. У вас ID записано как значение кнопки, если это ID определяет номер записи в базе, то в чем проблема? | |
|
|
|
|
|
|
|
для: sim5
(23.10.2007 в 11:17)
| | Проблема записи в базу данных двумерного массива | |
|
|
|
|
|
|
|
для: Front
(23.10.2007 в 11:22)
| | Что-то по форме, вами представленной, не видно, что это двумерный массив. | |
|
|
|
|
|
|
|
для: sim5
(23.10.2007 в 11:25)
| | После того как я посылаю данные из формы в обработчик приходит массив:
Array ( [id_satisfy] => 3 [id_answer] => Array ( [0] => 56 [1] => 72 ) [id_question] => Array ( [0] => 23 [1] => 29 ) )
|
Разве это не двумерный массив? | |
|
|
|
|
|
|
|
для: Front
(23.10.2007 в 12:31)
| | Это многомерный. А вот как можно его разобрать:
<?
$send = Array('id_satisfy' => 3, 'id_answer' => Array(0 => 56, 1 => 72), 'id_question' => Array(0 => 23, 1 => 29));
foreach ($send as $key1 => $val1) {
if(!is_array($val1)) echo $key1.' - '.$val1.'<BR>';
else {
echo ' '.$key1.'<BR>';
foreach ($val1 as $key2 => $val2) {
echo ' '.$key2.' - '.$val2.'<BR>';
}
}
}
?>
|
Но я несколько не понимаю, если у вас форма - это элементы объедененные в группы, по id записи в базе, например, и их имена отражают этот id, то нет проблем получить его и произвести запись. Как - я раньше приводил пример, можете иначе, тем более у вас эти id кругом прописаны, в чем проблема у вас, я так и не понял. | |
|
|
|