将动态生成的单选按钮的值存储在mysql中

时间:2015-11-07 17:51:24

标签: php mysql

我正在动态创建单选按钮。我需要将发布的数据写入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>';

        }

2 个答案:

答案 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