我有一个jsfiddle here 。发生的情况是,如果您选择一个单选按钮并单击“添加问题”,它将添加一个表行,显示您选择的单选按钮。您可以更改行内的选择。
现在我想做的是使用 INSERT VALUES 方法在数据库中的每个单选按钮中插入选定的单选按钮。
所以我想知道的是如何正确执行此操作,以便 $_POST 每行选定的单选按钮,然后能够使用 INSERT VALUES 插入它们?
下面是我当前拥有的 php 代码:(“questionText”是“Question”列,它实际上在其中挑选出每一行,即使我没有在 jsfiddle 中包含“questionText”并且“gridValues”不在其中jsfiddle 但这是针对“选项”列中每行中的每个文本框值,因此想象一下表中还有另外两列,即“问题”和“选项”列)
$i = 0;
$c = count($_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;
}
foreach($_POST['reply'] as $reply) {
switch ($_POST['reply']){
case "Single":
$selected_reply = "Single";
break;
case "Multiple":
$selected_reply = "Multiple";
break;
default:
$selected_reply = "";
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'];
$replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')";
$replyrs = mysql_query($replyquery);
$replyrecord = mysql_fetch_array($replyrs);
$replyid = $replyrecord['ReplyId'];
$insertquestion[] = "'".
mysql_real_escape_string( $_POST['questionText'][$i] ) ."','".
mysql_real_escape_string( $optionid ) ."','".
mysql_real_escape_string( $replyid ) ."'";
}
$questionsql = "INSERT INTO Question (QuestionContent OptionId, ReplyId)
VALUES (" . implode('), (', $insertquestion) . ")";
echo($questionsql);
最佳答案
我注意到在你的jsfiddle中,每个新创建的单选框都是像reply1和reply2一样创建的。
但是在您的 php 代码中,看起来您正在循环遍历,就好像它是一个数组一样。
如果您对帖子值进行 print_r,您会得到类似的内容
Array ( [reply1] => Single [reply2] => Multiple )
所以它们不是数组格式。如果 POST 请求中的唯一值是单选按钮,那么您可以循环遍历 POST 数组值。
无论如何,这里有一个可能的解决方案供您循环处理您的帖子请求。我只是基于你在 jsfiddle 中的示例。您可能必须进行调整以适应您的实际代码。但关键是要注意单选按钮的名称类似于 reply[0]
和 reply[1]
。 PHP 知道将名为 like 的值放入数组中。
<?php
//This is what your values will look like. Notice that they are in array format now
print_r($_POST);
foreach($_POST['reply'] as $reply) {
//Now you can loop through your replies correctly.
}
?>
<!-- Quick Example of how to name the radio buttons -->
<html>
<head></head>
<body>
<form method="post">
Row 1<br />
<input type="radio" value="Single" name="reply[0]" /> Single
<input type="radio" value="Multiple" name="reply[0]" /> Multiple
<br />Row 2<br />
<input type="radio" value="Single" name="reply[1]" /> Single
<input type="radio" value="Multiple" name="reply[1]" /> Multiple
<br />
<input type="submit" value="Submit" />
</form>
</body>
<小时/>
这是您为回复而重写的上述代码。我省略了其他内容,因为我不确定数据的格式或数据的实际情况。我想知道为什么你不只使用单选框值的 id 而不是文本。这样你就不必不断查询数据库。您可以只查询所有回复类型,然后像这样与 id 进行匹配。
<?php
$insertquestion = array();
foreach($_POST['reply'] as $reply) {
switch ($reply){
case "Single":
$selected_reply = "Single";
break;
case "Multiple":
$selected_reply = "Multiple";
break;
default:
$selected_reply = "";
break;
$replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')";
$replyrs = mysql_query($replyquery);
$replyrecord = mysql_fetch_array($replyrs);
$insertquestion[] = $replyrecord['ReplyId'];
}
$questionsql = "INSERT INTO Question (ReplyId)
VALUES (" . implode('), (', $insertquestion) . ")";
echo($questionsql);
<小时/>
除了使用 for 循环之外,这里基本上是相同的事情。我猜你不熟悉 foreach 循环。但在这种情况下,for 循环可能会为您提供更好的服务。
<?php
$insertquestion = array();
for($i = 0; $i < count($_POST['reply']), $i++) {
switch ($_POST['reply'][$i]){
case "Single":
$selected_reply = "Single";
break;
case "Multiple":
$selected_reply = "Multiple";
break;
default:
$selected_reply = "";
break;
$replyquery = "SELECT ReplyId FROM Reply WHERE (ReplyType = '". mysql_real_escape_string($selected_reply)."')";
$replyrs = mysql_query($replyquery);
$replyrecord = mysql_fetch_array($replyrs);
$insertquestion[] = $replyrecord['ReplyId'];
}
$questionsql = "INSERT INTO Question (ReplyId)
VALUES (" . implode('), (', $insertquestion) . ")";
echo($questionsql);
关于php - 如何插入选定的单选按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067505/