Значения динамической html-формы не сохраняются в базе данных

Я разрабатываю игровой портал, в котором профессор должен иметь возможность добавлять любые вопросы в игру. Я создал функции типа вопроса (множественный выбор или описательный) в form.php, и я вызываю их в своем основном файле. Прежде всего, в цикле я называю основной блок (простое html-окно), в котором я должен добавить вопрос. И его работа прекрасна. Теперь я должен хранить динамически измененные значения полей в базе данных. Но я не знаю, где я ошибаюсь. Ниже приведен мой form.php, в котором я создаю формы для вызова в основном файле.

<? $i=$_post['i']; $_SESSION["input_type"][$i]= $_POST["type"]; if($_SESSION["input_type"][$i]==1) { form($i); } elseif($_SESSION["input_type"][$i]==2) { form1(); } function form($i) { ?> <div class="control-group"> <div class="controls"> <textarea class="large m-wrap" placeholder=" Statement " cols="50"rows="3" name="statement<?echo $i;?>" style="text-align:center;" id="statement<?echo $i;?>"></textarea> </div> </div> <div class="name"> <input name="option<?echo $i.'1';?>" id="option<?echo $i.'1';?>" placeholder="Option 1" style="width:170px;" type="text"/> <input name="option<?echo $i.'2';?>" id="option<?echo $i.'2';?>" type="text" style="width:170px;" placeholder="Option 2"/> <input name="option<?echo $i.'3';?>" id="option<?echo $i.'3';?>" type="text" style="width:170px;" placeholder="Option 3"/> <input name="option<?echo $i.'4';?>" id="option<?echo $i.'4';?>" type="text" style="width:170px;" placeholder="Option 4"/> </div> <div class="control-group"> <div class="controls"> &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp <label class="radio"> <input type="radio" name="option<?echo $i.'1';?>_default" id="option<?echo $i.'1';?>_default" /> Option 1 </label> &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp <label class="radio"> <input type="radio" name="option<?echo $i.'2';?>_default" id="option<?echo $i.'2';?>_default" checked /> Option 2 </label> &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp <label class="radio"> <input type="radio" name="option<?echo $i.'3';?>_default" id="option<?echo $i.'3'?>_default" /> Option 3 </label> &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp <label class="radio"> <input type="radio" name="option<?echo $i.'4';?>_default" id="option<?echo $i.'4';?>_default" /> Option 4 </label> </div> </div> <?php } //end ?> <?php function form1() { ?> <div class="control-group" id ="field" name="field"> <label class="control- label">Answer</label> <div class="controls"> <input type="text" placeholder="Answer" id ="ans" name="ans" class="m-wrap small" /> </div> </div> <? } ?> 

Это мой основной файл, в котором я пишу функции form.php, чтобы добавить вопросы

  <!-- BEGIN PAGE --> <div class="page-content"> <form action="storeGame.php" method="POST"> <div class="control-group"> <label class="control-label">Game Name</label> <div class="controls"> <input type="text" id="game_name" name="game_name" placeholder="Enter Game Name" class="m-wrap large" /> </div> </div> <!-- BEGIN BORDERED TABLE PORTLET--> <? $q_no=5; for ($i=0;$i<$_SESSION["q_inc"]; $i++) { ?> <div class="portlet box yellow"> <div class="portlet-title"> <h4><i class="icon-coffee"></i>#<?echo $i+1;?> </h4> <div class="tools"> <a href="javascript:;" class="collapse"></a> <a href="#portlet-config" data-toggle="modal" class="config"></a> <a href="javascript:;" class="reload"></a> <a href="javascript:;" class="remove"></a> </div> </div> <div class="portlet-body"> <table class="table table-bordered table-hover"> <thead> </thead> <tbody> <form action="newGame.php" method="POST" id="input_type" name="input_type"> <div class="control-group"> <label class="control-label" > Add Input</label> <div class="controls"> <select class="medium m-wrap question_type" data-question-no="<?echo $i;?>" tabindex="1" id="type<?echo $i;?>" name="type<?echo $i;?>"> <option value="">Input Type</option> <option value="1">Multiple Choice</option> <option value="2">Input Field</option> </select> </div> <div id="answer_no_<?php echo $i ?>"></div> </div> </form> </tbody> </table> </div> </div> <script> $(document).ready(function(){ $('.question_type').change(function(){ var question_no=$(this).attr('data-question-no'); $.ajax({ url: "form.php", type:'post', data:{ type:$(this).val(), i:question_no }, success:function(data){ $('#answer_no_'+question_no).html(data); } }); }); }); </script> <? } ?> <!-- END BORDERED TABLE PORTLET--> <!-- BEGIN PAGE CONTAINER--> <div class="container-fluid"> <!-- BEGIN PAGE HEADER--> <div class="row-fluid"> <div class="span12"> <!-- BEGIN STYLE CUSTOMIZER --> <div class="color-panel hidden-phone"> <div class="color-mode-icons icon-color"></div> <div class="color-mode-icons icon-color-close"></div> <div class="color-mode"> <p>THEME COLOR</p> <ul class="inline"> <li class="color-black current color-default" data-style="default"></li> <li class="color-blue" data-style="blue"></li> <li class="color-brown" data-style="brown"></li> <li class="color-purple" data-style="purple"></li> <li class="color-white color-light" data-style="light"></li> </ul> <label class="hidden-phone"> <input type="checkbox" class="header" checked value="" /> <span class="color-mode-label">Fixed Header</span> </label> </div> </div> <!-- END BEGIN STYLE CUSTOMIZER --> <!-- BEGIN PAGE TITLE & BREADCRUMB--> <h3 class="page-title"> </h3> <!-- END PAGE TITLE & BREADCRUMB--> </div> </div> <!-- END PAGE HEADER--> <!-- BEGIN PAGE CONTENT--> <div class="row-fluid"> <div class="span12" > <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" > <input type="hidden" id="session" data="@Request.RequestContext.HttpContext.Session['questNo']" /> <!-- <a class="btn green" type="submit" ><i class="icon-plus" ></i></a> --> <button type="submit" id="add_q" name="add_q" class="btn green"><i class="icon-plus"></i></button> </form> </div> <!-- END PAGE CONTENT--> </div> <!-- END PAGE CONTAINER--> <button type="submit" class="btn yellow btn-block" id="getGames" name="getGames" class="btn green">Create Game <i &nbsp class="m-icon-big-swapright m-icon-white"></i></button> </form> </div> </div> <!-- END PAGE --> 

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

  <? session_start(); include_once("../Includes/db_connection.php"); $lecturer_id = $_SESSION["lecturer_id"]; $game_name=mysql_real_escape_string($_POST['game_name']); echo $_SESSION["lecturer_id"];; echo $game_name; mysql_query("insert into games(game_name, lecturer_id) values ('$game_name', '$lecturer_id')"); for($i=0;$i<$_SESSION["q_inc"];$i++) { $input_type = mysql_real_escape_string($_POST['type'.$i]); if($input_type=='1') { $question= $_POST['statement'.$i]; $val1= $_POST['option'.$i.'1']; $val2= $_POST['option'.$i.'2']; $val3= $_POST['option'.$i.'3']; $val4= $_POST['option'.$i.'4']; $default1= $_POST['option'.$i.'1'.'_default']; $default2= $_POST['option'.$i.'2'.'_default']; $default3= $_POST['option'.$i.'3'.'_default']; $default4= $_POST['option'.$i.'4'.'_default']; mysql_query("insert into subgames(game_id, input_id, statement, option1, option2, option3, option4, default1, default2, default3, default4) values ((SELECT id FROM games WHERE game_name = '$game_name'), '$input_type', '$question', '$val1', '$val2', '$val3', '$val4', '$default1', '$default2', '$default3', '$default4')"); $error= mysql_error(); } elseif($input_type=='2') { $question= $_POST['quest']; $answer= $_POST['ans']; // it is not implemented so leave it } } 

Пожалуйста, помогите мне, я много пробовал, но я не знаю, где я ошибаюсь. заранее спасибо

Related of "Значения динамической html-формы не сохраняются в базе данных"

Прежде всего, я хочу сказать вам, что в вашем коде есть много проблем. Я получил следующее.

1: Нет необходимости вставлять весь HTML-код верхнего и нижнего колонтитула. Это приводит к отказу от людей, которые могут дать вам ответ, они убегают, увидев много кода. т.е. ненужным.

2: Вы определили несколько тегов формы, и эти формы вложены друг в друга. каждая форма должна быть закрыта перед открытием любого другого тега формы.

3: Имя тега радиокнопки должно быть одинаковым для каждой группы опций, их значение должно отличаться от имени. например, для пола должен быть два тега радиоввода с одинаковым именем name = "gender" и с другим значением, например value = "male" и value = "female". вы получите единственное значение для переключателя с таким же именем.

4: если вы собираетесь использовать сеанс в любом месте страницы, его прежде всего следует запустить перед печатью любого вывода.

5: Вы не указали значение по умолчанию для переключателя. Таким образом, внутри этого атрибута должен быть атрибут value с различным значением

6: всякий раз, когда вы собираетесь назвать funtion, назовите его в соответствии со своей функциональностью, а не как a, b, c. Здесь я собираюсь изменить вашу форму на form_multiple () и form1 на form_input ()

7: когда вы собираетесь выбирать поле ввода для более чем одного вопроса, тогда у вас будет два поля ввода с тем же именем, что не допускается. Итак, пусть здесь также передается функция i.

====================

вот решение для вашего кода.

1: Я удалил номера по умолчанию в переключателе.


form.php

 <?php $i = $_POST['i']; $_SESSION["input_type"][$i] = $_POST["type"]; if ($_SESSION["input_type"][$i] == 1) { form_multiple($i); } elseif ($_SESSION["input_type"][$i] == 2) { form_input($i); } function form_multiple($i) { ?> <div class="control-group"> <div class="controls"> <textarea class="large m-wrap" placeholder=" Statement " cols="50" rows="3" name="statement<?php echo $i; ?>" style="text-align:center;" id="statement<?php echo $i; ?>"></textarea> </div> </div> <div class="name"> <input name="option<?php echo $i . '1'; ?>" id="option<?php echo $i . '1'; ?>" placeholder="Option 1" style="width:170px;" type="text"/> <input name="option<?php echo $i . '2'; ?>" id="option<?php echo $i . '2'; ?>" type="text" style="width:170px;" placeholder="Option 2"/> <input name="option<?php echo $i . '3'; ?>" id="option<?php echo $i . '3'; ?>" type="text" style="width:170px;" placeholder="Option 3"/> <input name="option<?php echo $i . '4'; ?>" id="option<?php echo $i . '4'; ?>" type="text" style="width:170px;" placeholder="Option 4"/> </div> <div class="control-group"> <div class="controls"> Choose Default Option <br/> <label class="radio"> <input type="radio" value="1" name="option<?php echo $i; ?>_default" id="option<?php echo $i . '1'; ?>_default"/> Option 1 </label> <br/> <label class="radio"> <input type="radio" value="2" name="option<?php echo $i; ?>_default" id="option<?php echo $i . '2'; ?>_default" checked /> Option 2 </label> <br/> <label class="radio"> <input type="radio" value="3" name="option<?php echo $i; ?>_default" id="option<?php echo $i . '3' ?>_default"/> Option 3 </label> <br/> <label class="radio"> <input type="radio" value="4" name="option<?php echo $i; ?>_default" id="option<?php echo $i . '4'; ?>_default"/> Option 4 </label> </div> </div> <?php } //end ?> <?php function form_input($i) { ?> <div class="control-group" id="field" name="field"> <label class="control- label">Answer</label> <div class="controls"> <input type="text" placeholder="Answer" id="ans" name="ans_<?php echo $i; ?>" class="m-wrap small"/> </div> </div><?php } ?> 

=====================================

На следующей странице я удалил некоторые теги, чтобы сократить ответ, и также прокомментировал теги формы, чтобы вы могли анализировать свои ошибки. Эти две формы находились внутри другого тега формы. Я не знаю, где вы $_SESSION["q_inc"] переменную $_SESSION["q_inc"] . Я предполагаю, что эта переменная будет иметь некоторое целочисленное значение внутри.


главная страница контента

  <?php session_start(); include_once("../Includes/db_connection.php"); //include_once("form.php"); if(isset($_POST['total_q'])){ $_SESSION["q_inc"]=$_POST['total_q']; } if (!isset($_SESSION["q_inc"])) { $_SESSION["q_inc"] = 2; } $_SESSION["questNo"] = $_SESSION["q_inc"]; if (!isset($_SESSION["lecturer_id"])) { header("Location:../login.php"); } //if($_SERVER['add_q'] == 'POST') //$counter=0; if (isset($_POST['add_q'])) { $_SESSION["q_inc"]++; } ?> <!DOCTYPE html> <!--[if IE 8]> <html lang="en" class="ie8"> <![endif]--> <!--[if IE 9]> <html lang="en" class="ie9"> <![endif]--> <!--[if !IE]><!--> <html lang="en"> <!--<![endif]--> <!-- BEGIN HEAD --> <head> <script type="text/javascript" src="../includes/jquery.js"></script> <meta charset="utf-8"/> <title>ClassEx</title> <meta content="width=device-width, initial-scale=1.0" name="viewport"/> <meta content="" name="description"/> <meta content="" name="author"/> <link href="../assets/bootstrap/css/bootstrap.min.css" rel="stylesheet"/> <link href="../assets/css/metro.css" rel="stylesheet"/> <link href="../assets/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet"/> <link href="../assets/font-awesome/css/font-awesome.css" rel="stylesheet"/> <link href="../assets/fullcalendar/fullcalendar/bootstrap-fullcalendar.css" rel="stylesheet"/> <link href="../assets/css/style.css" rel="stylesheet"/> <link href="../assets/css/style_responsive.css" rel="stylesheet"/> <link href="../assets/css/style_default.css" rel="stylesheet" id="style_color"/> <link rel="stylesheet" type="text/css" href="../assets/chosen-bootstrap/chosen/chosen.css"/> <link rel="stylesheet" type="text/css" href="../assets/uniform/css/uniform.default.css"/> <link rel="shortcut icon" href="../assets/img/favicon.ico"/> </head> <!-- END HEAD --> <!-- BEGIN BODY --> <body class="fixed-top"> <!-- BEGIN HEADER --> <div class="header navbar navbar-inverse navbar-fixed-top"> <!-- BEGIN TOP NAVIGATION BAR --> <div class="navbar-inner"> <div class="container-fluid"> <!-- BEGIN LOGO --> <a class="brand" href="#"> <img src="../assets/img/logoclassex.jpg" alt="logo" height="35px" width="35px""/> </a> <!-- END LOGO --> <!-- BEGIN RESPONSIVE MENU TOGGLER --> <a href="javascript:;" class="btn-navbar collapsed" data-toggle="collapse" data-target=".nav-collapse"> <img src="../assets/img/menu-toggler.png" alt=""/> </a> <!-- END RESPONSIVE MENU TOGGLER --> <!-- BEGIN TOP NAVIGATION MENU --> <ul class="nav pull-right"> <!-- BEGIN NOTIFICATION DROPDOWN --> <!-- END NOTIFICATION DROPDOWN --> <!-- BEGIN INBOX DROPDOWN --> <!-- END INBOX DROPDOWN --> <!-- BEGIN TODO DROPDOWN --> <!-- END TODO DROPDOWN --> </ul> <!-- END TOP NAVIGATION MENU --> </div> </div> <!-- END TOP NAVIGATION BAR --> </div> <!-- END HEADER --> <!-- BEGIN CONTAINER --> <div class="page-container row-fluid"> <!-- BEGIN SIDEBAR --> <div class="page-sidebar nav-collapse collapse"> <!-- BEGIN SIDEBAR MENU --> <ul> <li> <!-- BEGIN SIDEBAR TOGGLER BUTTON --> <div class="sidebar-toggler hidden-phone"></div> <!-- BEGIN SIDEBAR TOGGLER BUTTON --> </li> <li class="start "> <a href="lecturer.php"> <i class="icon-home"></i> <span class="title">Dashboard</span> </a> </li> <li class=""> <a href="../includes/logout.php"> <i class=" icon-off"></i> <span class="title">Logout</span> </a> </li> </ul> <!-- END SIDEBAR MENU --> </div> <!-- END SIDEBAR --> <!-- BEGIN PAGE --> <div class="page-content"> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST" > <input type="hidden" id="session" data="@Request.RequestContext.HttpContext.Session['questNo']" /> <!-- <a class="btn green" type="submit" ><i class="icon-plus" ></i></a> --> Enter no of question<input name="total_q" type="text" /> <input type="submit" /> <!--<button type="submit" id="add_q" name="add_q" class="btn green"><i class="icon-plus"></i></button>--> </form> <form action="storeGame.php" method="POST"> <div class="control-group"> <label class="control-label">Game Name</label> <div class="controls"> <input type="text" id="game_name" name="game_name" placeholder="Enter Game Name" class="m-wrap large"/> </div> </div> <!-- BEGIN BORDERED TABLE PORTLET--> <?php $q_no = 5; for ($i = 0; $i < $_SESSION["q_inc"]; $i++) { $temp = $i; ?> <div class="portlet box yellow"> <div class="portlet-title"> <h4><i class="icon-coffee"></i>#<?php echo ($temp + 1); ?></h4> <div class="tools"> <a href="javascript:;" class="collapse"></a> <a href="#portlet-config" data-toggle="modal" class="config"></a> <a href="javascript:;" class="reload"></a> <a href="javascript:;" class="remove"></a> </div> </div> <div class="portlet-body"> <table class="table table-bordered table-hover"> <div class="control-group"> <label class="control-label"> Add Input</label> <div class="controls"> <select class="medium m-wrap question_type" data-question-no="<?php echo $i; ?>" tabindex="1" id="type<?php echo $i; ?>" name="type<?php echo $i; ?>"> <option value="">Input Type</option> <option value="1">Multiple Choice</option> <option value="2">Input Field</option> </select> </div> <div id="answer_no_<?php echo $i; ?>"></div> </div> </tbody> </table> </div> </div> <?php } ?> <script> $(document).ready(function () { $('.question_type').change(function () { var question_no = $(this).attr('data-question-no'); $.ajax({ url: "form.php", type: 'post', data: { type: $(this).val(), i: question_no }, success: function (data) { $('#answer_no_' + question_no).html(data); } }); }); }); </script> <!-- END BORDERED TABLE PORTLET--> <!-- BEGIN PAGE CONTAINER--> <div class="container-fluid"> <!-- BEGIN PAGE CONTENT--> <div class="row-fluid"> <div class="span12"> <!-- <form action="--> <?php //echo $_SERVER['PHP_SELF']; ?><!--" method="POST" >--> <!-- <input type="hidden" id="session" data="@Request.RequestContext.HttpContext.Session['questNo']" />--> <!-- <button type="submit" id="add_q" name="add_q" class="btn green"><i class="icon-plus"></i></button>--> <!-- </form>--> </div> <!-- END PAGE CONTENT--> </div> <!-- END PAGE CONTAINER--> <button type="submit" class="btn yellow btn-block" id="getGames" name="getGames" class="btn green"> Create Game <i &nbsp class="m-icon-big-swapright m-icon-white"></i></button> </form> </div> </div> <!-- END PAGE --> </div> <!-- END CONTAINER --> <!-- BEGIN FOOTER --> <div class="footer"> University of Passau ClassEx Team <div class="span pull-right"> <span class="go-top"><i class="icon-angle-up"></i></span> </div> </div> <!-- END FOOTER --> <!-- BEGIN JAVASCRIPTS --> <!-- Load javascripts at bottom, this will reduce page load time --> <script src="../assets/js/jquery-1.8.3.min.js"></script> <script src="../assets/breakpoints/breakpoints.js"></script> <script src="../assets/jquery-slimscroll/jquery-ui-1.9.2.custom.min.js"></script> <script src="../assets/bootstrap/js/bootstrap.min.js"></script> <script src="../assets/js/jquery.blockui.js"></script> <script src="../assets/js/jquery.cookie.js"></script> <script src="../assets/fullcalendar/fullcalendar/fullcalendar.min.js"></script> <script type="text/javascript" src="../assets/uniform/jquery.uniform.min.js"></script> <script type="text/javascript" src="../assets/chosen-bootstrap/chosen/chosen.jquery.min.js"></script> <!-- ie8 fixes --> <!--[if lt IE 9]> <script src="../assets/js/excanvas.js"></script> <script src="../assets/js/respond.js"></script> <![endif]--> <script src="../assets/js/app.js"></script> <script> jQuery(document).ready(function () { // initiate layout and plugins App.setPage('calendar'); App.init(); }); </script> <!-- END JAVASCRIPTS --> </body> <!-- END BODY --> </html> 

===============================

В базе данных должно быть только одно поле по умолчанию. Здесь я удалил все эти и добавил один с именем "default_option"


storeGame.php

  <?php session_start(); include_once("../Includes/db_connection.php"); $lecturer_id = $_SESSION["lecturer_id"]; $game_name=mysql_real_escape_string($_POST['game_name']); echo $_SESSION["lecturer_id"];; echo $game_name; $sql="insert into games(game_name, lecturer_id) values ('$game_name', '$lecturer_id')"; if(!mysql_query($sql)){ echo "Error in storing into database!<br/>"; } for($i=0;$i<$_SESSION["q_inc"];$i++) { $input_type = mysql_real_escape_string($_POST['type'.$i]); if($input_type=='1') { $question= $_POST['statement'.$i]; $val1= $_POST['option'.$i.'1']; $val2= $_POST['option'.$i.'2']; $val3= $_POST['option'.$i.'3']; $val4= $_POST['option'.$i.'4']; //Here should be only one default value $default_option= $_POST['option'.$i.'_default']; /*$default1= $_POST['option'.$i.'1'.'_default']; $default2= $_POST['option'.$i.'2'.'_default']; $default3= $_POST['option'.$i.'3'.'_default']; $default4= $_POST['option'.$i.'4'.'_default'];*/ $sql=" insert into subgames( game_id, input_id, statement, option1, option2, option3, option4, default_option) values ( (SELECT id FROM games WHERE game_name = '$game_name' limit 1), '$input_type', '$question', '$val1', '$val2', '$val3', '$val4', '$default_option')"; if(!mysql_query($sql)){ echo "Error"; } else{ echo "Success"; } //$error= mysql_error(); } elseif($input_type=='2') { $question= $_POST['quest']; $answer= $_POST['ans']; // it is not implemented so leave it } }