我的代码应该显示每个问题($ _POST [questionText])。对于每个问题,它显示它的SessionId,QuestionId,QuestionContent和OptionId。但相反,它只显示1个问题。为什么它只显示1个问题,如何让它显示所有问题?
我使用echo使用INSERT VALUES对输出进行文本处理。
foreach($_POST['questionText'] as $i => $question)
{
$insertquestion = array();
$options[] = $_POST['gridValues'];
switch ($options[$i]){
case "3":
$selected_option = "A-C";
break;
case "4":
$selected_option = "A-D";
break;
default:
$selected_option = "";
break;
}
$optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '". mysql_real_escape_string($selected_option)."')";
$optionrs = mysql_query($optionquery);
$optionrecord = mysql_fetch_array($optionrs);
$optionid = $optionrecord['OptionId'];
$insertquestion[] = "'". mysql_real_escape_string($_SESSION['id'] ) . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". mysql_real_escape_string( $_POST['num_questions'] ) ."','". mysql_real_escape_string( $question ) ."','". mysql_real_escape_string( $optionid ) ."'";
$questionsql = "INSERT INTO Question (SessionId, QuestionId, QuestionContent, OptionId)
VALUES (" . implode('), (', $insertquestion) . ")";
$i++;
}
echo($questionsql);
以下是javascript代码和表单代码。工作原理是用户在textarea ('name='questionText')
中键入问题并在选项(name='gridValues')
中键入,然后将它们两个追加到表格行中(id='qandatbl'
形式的表格) 。这是问题1.然后他们对第二个问题再做同样的事情,然后是第三个等等。请仔细看看,这很容易理解。
<script>
function insertQuestion(form) {
var context = $('#optionAndAnswer');
var $tbody = $('#qandatbl > tbody');
var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
var $question = $("<td class='question'></td>");
var $options = $("<td class='option'></td>");
var $questionType = '';
$('#questionTextArea').each( function() {
var $this = $(this);
var $questionText = $("<textarea class='textAreaQuestion'></textarea>").attr('name',$this.attr('name')+"[]")
.attr('value',$this.val())
$question.append($questionText);
});
$('.gridTxt', context).each( function() {
var $this = $(this);
var $optionsText = $("<input type='text' class='gridTxtRow maxRow' />").attr('name',$this.attr('name'))
.attr('value',$this.val())
$options.append($optionsText);
$questionType = $this.val();
});
$tr.append($question);
$tr.append($options);
$tbody.append($tr);
}
</script>
<form id="QandA" action="insertQuestion.php" method="post" >
<h1>SESSION (<?php echo $_SESSION['id'] ?>)</h1>
<table>
<tr>
<td rowspan="3">Question:</td>
<td rowspan="3">
<textarea id="questionTextArea" rows="5" cols="40" name="questionText"></textarea>
</td>
</tr>
</table>
<table id="optionAndAnswer" class="optionAndAnswer">
<tr class="option">
<td>Option Type:</td>
<td>
<div>
<input type="text" name="gridValues" class="gridTxt maxRow" readonly="readonly" />
</div>
</td>
</tr>
</table>
<table id="qandatbl" align="center">
<thead>
<tr>
<th class="question">Question</th>
<th class="option">Option Type</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</form>
答案 0 :(得分:2)
第一。你可以把你的javascript更改为:
var $optionsText = $("<input type='text' class='gridTxtRow maxRow' />").attr('name',$this.attr('name')+"[]")
.attr('value',$this.val())
然后你的PHP代码:
更新
$i = 0;
$c = count($_POST['gridValues']);
print_r($_POST['questionText']);
print_r( $_POST['gridValues'] );
$insertquestion = array();
for($i = 0; $i < $c; $i++ ){
switch ($_POST['gridValues'][$i]){
case "3":
$selected_option = "A-C";
break;
case "4":
$selected_option = "A-D";
break;
default:
$selected_option = "";
break;
}
$optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '". mysql_real_escape_string($selected_option)."')";
$optionrs = mysql_query($optionquery);
$optionrecord = mysql_fetch_array($optionrs);
$optionid = $optionrecord['OptionId'];
$insertquestion[] = "'". mysql_real_escape_string($_SESSION['id'] ) .
($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'".
mysql_real_escape_string( $_POST['num_questions'] ) ."','".
mysql_real_escape_string( $_POST['questionText'][$i] ) ."','".
mysql_real_escape_string( $optionid ) ."'";
}
$questionsql = "INSERT INTO Question (SessionId, QuestionId, QuestionContent, OptionId)
VALUES (" . implode('), (', $insertquestion) . ")";
echo($questionsql);
答案 1 :(得分:2)
据我所知,你的代码就是这样做的......
foreach($_POST['questionText'] as $i => $question)
{
// insert the row
$questionsql = '...';
$i++;
}
echo($questionsql);
所以$questionsql
在循环结束时输出,此时它将包含仅来自最后一次迭代的数据。
如果你想为每个插入的行输出$questionsql
,它需要进入循环。
答案 2 :(得分:0)
$('#questionTextArea').each( function() {
...
}
这部分功能只会导致函数的一次迭代发生。您使用id选择器(唯一)和组合的每个功能。因此,您选择一个元素,然后使用每个函数迭代一个对象。