如何通过 PHP 将多个单选按钮值作为所有单独的值传递给 MYSQL 数据库,但将它们分成组?
Posted
技术标签:
【中文标题】如何通过 PHP 将多个单选按钮值作为所有单独的值传递给 MYSQL 数据库,但将它们分成组?【英文标题】:How can i pass multiple radio button values to MYSQL Database via PHP as all individual values but keeping them segregated into groups? 【发布时间】:2011-06-27 20:39:42 【问题描述】:我有一份长问卷(46 个问题),每个问题都有 (3) 个可能的答案,是、有时和否,(3 个单选按钮)每个都有相应的值,分别为 10、5 和 -10。
我将问题分为 4 个标题,每个标题下有几个问题。 通过为每个数据赋予与其在数据库中的字段相对应的不同名称属性,我能够将所有数据发布到 mysql 数据库。
我遇到的问题是我不能再将单选按钮作为一组使用,也就是说,它们都是可选择的,违背了拥有它们的目的,基本上使它们成为复选框......
我需要在我的数据库中为每个单选按钮设置自己的值,并且我需要将它们分组到每个问题的 3 个可能选项中...
我将发布我的表单 html 和 php 发送脚本的示例.... 提前感谢您的任何建议...
html代码一题
<div class="questionBox">
<p>1.Have I clearly defined my companies target market?</p>
<input type="radio" name="ca1y" value="10"/>
<label for="ca1">YES</label>
<input type="radio" name="ca1s" value="5"/>
<label for="ca1">SOMEWHAT</label>
<input type="radio" name="ca1n" value="-10"/>
<label for="ca1">NO</label>
</div>
/* php 发布更新 */
$radioPost="INSERT INTO questions
( ca1y,
ca1s,
ca1n,...)
VALUES
( '$_POST[ca1y]',
'$_POST[ca1s]',
'$_POST[ca1n]',...)
我试图给每个单选按钮一个 ID 属性并使用它来更新数据库,但我似乎无法让它工作....
任何帮助将不胜感激 干杯。
【问题讨论】:
【参考方案1】:不是很好的解决方案:编写js取消选择相应的单选按钮。
更严肃的一点是,我不明白需要让所有收音机都使用不同的名称。为什么这样的解决方案不适用:在一个同名的问题中命名无线电,让我们说问题 1,然后在表单发布后查看值,然后您可以轻松地更新 db。我想您想收集每个收音机被选中的次数。因此,如果您知道 question1 有选择 1,那么您也知道 question1 没有选择 2 和 3。除非您以其他方式或出于其他目的收集数据,但我认为您需要提供更多关于这样做的目的。虽然我仍然认为你可以像我说的那样做到这一点,但这不需要复杂的处理,我说基本的编程知识就足够了。
【讨论】:
谢谢,我会扩展的。目的是让这个网页填充一个数据库......我遗漏了一个用户名和公司字段,但这将与特定用户从每个问题的 3 个选项中选择的答案一起出现。这可以被不同的组织访问,因此数据库也会增长,我需要能够区分每个使用单独的响应,因此每个无线电答案在我的数据库中都有自己的字段,大约有 146 个字段,并且被下载到电子表格,一些数学运算,我得到了我的数据......这会改变你的答案吗? 例如,我让我的 php 找到 radio name= 属性并将其与我的数据库字段对齐...我可以以某种方式使其与我的表单的 id= 字段而不是 name= 对齐?这似乎很容易解决,但它不起作用 并非如此。我可能会尝试对 db 列的问题或答案进行一些映射。或者,如果您想将其映射到 id,您可以拥有“问题无线电名称(所有 3 个问题无线电都相同)”+“值(从 3 个无线电中识别女巫)”=>“radio_id”的映射,然后使用此地图和 foreach 循环,您可以轻松获取所有选定的无线电 id,然后不选择所有不存在的 id。【参考方案2】:我不确定我是否了解您想要做的事情,但您似乎需要将个人对不同问题的答案保存到数据库中,但每个问题只能有一个假设三个可能的答案。那么,在这种情况下,您可能会考虑重新设计您的数据库,使其看起来像这样:
您将用户详细信息存储在用户表中,将问题详细信息存储在问题表中,并将不同答案存储在答案表中。用户将能够回答多个问题,但只能回答一次特定问题。然后,您将答案保存在一个名为 answer_value 的字段中。无需将答案存储在多个字段中,因为您将存储他们选择的单选按钮的 VALUE,即您将存储 10、5 或 -10,具体取决于选择的单选选项。
同样重要的是,在您的 HTML 中,您将针对特定问题的所有单选按钮命名为相同。这确保了单选选项充当单选按钮而不是复选框。您的 HTML 很可能看起来像这样:
<div class="questionBox">
<p>1.Have I clearly defined my companies target market?</p>
<input type="radio" name="q1" value="10"/>
<label for="ca1">YES</label>
<input type="radio" name="q1" value="5"/>
<label for="ca1">SOMEWHAT</label>
<input type="radio" name="q1" value="-10"/>
<label for="ca1">NO</label>
</div>
<div class="questionBox">
<p>2.Have I clearly defined my companies product?</p>
<input type="radio" name="q2" value="10"/>
<label for="ca2">YES</label>
<input type="radio" name="q2" value="5"/>
<label for="ca2">SOMEWHAT</label>
<input type="radio" name="q2" value="-10"/>
<label for="ca2">NO</label>
</div>
.....
请注意,问题 1 有 3 个单选选项,均名为“q1”,问题 2 有 3 个单选选项,均名为“q2”。对所有问题都遵循相同的约定。然后你的 PHP 变得非常简单,可能看起来像这样:
$radioPost="INSERT INTO answers (user_name, question_name, answer_value)
VALUES (('$_POST[user_name]', 'q1', '$_POST[q1]),('$_POST[user_name]', 'q2', '$_POST[q2]), ....)
如果您不确定单选按钮的名称是什么,您可以使用 foreach 循环,如下所示:
$user = $_POST[user_name];
foreach ( $_POST as $key => $val )
If ($key <> 'user_name') //you might need to check that you only reading the radio options
$radioPost="INSERT INTO answers (user_name, question_name, answer_value)
VALUES ('$user', $key, '$val')"
....
另外请注意,即使您只使用单选选项,您仍应清理输入以防止 SQL 注入等攻击。我建议您查找有关保护您的代码免受攻击的更多信息。
顺便说一句,如果您将问题放在它自己的表格中,您可以从该表格动态创建您的问卷,然后您可以随意添加或删除问题,从而使您的整个应用程序更加灵活。将您的答案保存在一个字段而不是三个字段中,将从您的表中删除所有 NULL 值,这将在您执行计算时简化您的查询。我知道 MySQL 通常会将零作为默认整数值,但最好将其保存到一个字段中。如果您想知道用户为特定问题选择了哪个选项,只需检查存储在该字段中的值即可。
【讨论】:
我有类似的问题:如果这个设计有任何问题,请告诉我?:我有 3 个表:问题、答案、用户。在“答案”表中,列是:Id, q1, q2, q3, ...,q20,userId。以上是关于如何通过 PHP 将多个单选按钮值作为所有单独的值传递给 MYSQL 数据库,但将它们分成组?的主要内容,如果未能解决你的问题,请参考以下文章