我正在动态创建单选按钮。我需要将发布的数据写入MySQL表。单选按钮名称将按钮的数量改变。
例如,如果创建了四个单选按钮,则每个按钮的名称都是变量$ proposed_id(数字),值为yes或no。
我希望将所有发布的数据放在一个表字段中。我尝试使用数组(" props_yes []")但当然每个新数组都会覆盖前一个按钮。
感谢您的帮助。
$sql = "SELECT * FROM table WHERE ballot_name = '$ballot_id' ";
$sql_result = mysql_query($sql,$link);
while ($row = mysql_fetch_array($sql_result))
{
$proposed_id = $row['submission_id'];
echo '<input name="' . $proposed_id . '" id="' . $proposed_id . '_yes"type="radio" value="Yes" required > ';
echo '<label for="' . $proposed_id . '_yes">' . 'YES' . '</label> ';
echo '<input name="' . $proposed_id . '" id="' . $proposed_id . '_no" type="radio" value="No" required > ';
echo '<label for="' . $proposed_id . '_no">' . 'NO' . '</label><br>';
}
答案 0 :(得分:0)
虽然我同意@trincot的观点,但一般来说,在单个数据库字段中存储多个不同类型的值是不好的做法,有时它会被调用甚至是必要的,例如,当你的数据库使用EAV pattern和Wordpress等一些流行的系统一样。如果这是存储在数据库中的主要数据,您可能需要为此项目考虑NoSQL database。
话虽这么说,以下是处理和检索数据的方法。首先,我会在name
输入的radio
字段中添加一些关键字,例如: name="ballot_'.$proposed_id.'"
这样你就不会得到一堆数字作为名字的字段,这样你就有办法在服务器端过滤结果。在服务器端,您可以执行类似的操作(假设表单是使用POST
提交的):
// create an associative array of values from your radio buttons
$ballot_values = array();
foreach ($_POST as $index => $value) {
if (false !== strpos($index, 'ballot_')) {
$id = substr($index, 7); // get the numeric part of the name
$ballot_values[$id] = $value;
}
}
执行此操作后,$ballot_values
将包含ID和是/否值的关联数组。为了将其保存在单个数据库字段中,您需要serialize
数组,即
$serialized_ballot_values = serialize($ballot_values);
这会将数组存储为单个字符串,然后您可以将其存储在数据库字段中。从数据库中检索值时,您必须先unserialize
才能使用它。
同样,如果你能避免这样做,我会的。不幸的是,我们并不总是能控制数据库的结构,所以可能你别无选择。
答案 1 :(得分:0)
在单选按钮名称中使用带有键的数组。 PHP会将提交的值解释为数组。
$sql = "SELECT * FROM table WHERE ballot_name = '$ballot_id' ";
$sql_result = mysql_query($sql,$link);
while ($row = mysql_fetch_array($sql_result))
{
$proposed_id = $row['submission_id'];
echo '<input name="props_yes[' . $proposed_id . ']" id="' . $proposed_id . '_yes"type="radio" value="Yes" required > ';
echo '<label for="' . $proposed_id . '_yes">' . 'YES' . '</label> ';
echo '<input name="props_yes[' . $proposed_id . ']" id="' . $proposed_id . '_no" type="radio" value="No" required > ';
echo '<label for="' . $proposed_id . '_no">' . 'NO' . '</label><br>';
}
在帖子之后,$_POST['props_yes']
的值将包含一系列选定的答案。数组中的键将来自$proposed_id