如何提交多个表单输入作为序列化数据集?

时间:2012-05-04 20:04:56

标签: php serialization

$serialize_me = array(
    array(
      'Name' => 'English',
      'Apprev' => 'en',
      'default' => true,
    ),
    array(
      'Name' => 'عربي',
      'Apprev' => 'ar',
      'default' => false,
    ),
); 
$serialized = serialize($serialize_me); 

使用这个数组,我能够序列化数据并将其插入数据库。但是如何使用表单构建这样的数组呢? 我正在尝试构建一个允许我序列化数据并将其插入数据库的表单。

4 个答案:

答案 0 :(得分:3)

HTML端的

(称为whatever.php):

<form action="action.php" method="post">
<?php
  $num_languages = 2; // Set this to the number of languages you want.
  for($x = 0; $x < $num_languages; $x++) {
?>
<input type="text" name="name[<?php echo $x; ?>]" />
<input type="text" name="apprev[<?php echo $x; ?>]" />
<input type="checkbox" name="default[<?php echo $x; ?>]" />
<?php } ?>
</form>

然后在PHP端(在本例中是一个名为action.php的文件):

<?php
  $array_serialize = array();
  foreach ($_POST['name'] as $key => $value) {
    $array_serialize[$key]['Name'] = $value;
    $array_serialize[$key]['Apprev'] = $_POST['apprev'][$key];
    $array_serialize[$key]['default'] = ($_POST['default'][$key] == 'on')?true:false;
  }
  $serialized = serialize($array_serialize); 
?>

答案 1 :(得分:1)

将name属性设置为数组。像这样:

<?php 

if($_POST)
{
    var_dump($_POST);
}

?>

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form method="post">
        <input name="in[0][name]" value="English" />
        <input name="in[0][apprev]" value="en" />
        <input name="in[0][default]" value="true" />

        <input name="in[1][name]" value="Other" />
        <input name="in[1][apprev]" value="ar" />
        <input name="in[1][default]" value="false" />
        <input type="submit" />
    </form>
</body>
</html>

答案 2 :(得分:0)

当您发送表单时,您可以使用数组$_POST$_GET中的所有已发送字段,具体取决于您使用的方法。

您可以序列化该数组并将其存储在数据库中,但我绝对不会建议这样做,因为它会使数据检索和操作变得不必要。

查看您的示例我将拥有一个包含(至少...)3个字段的数据库表,NameApprevdefault,您的示例将添加两行表

答案 3 :(得分:0)

此代码在PHP代码中提供更多可移植性,您可以动态设置数据名称而无需更改PHP代码。

<!doctype html>
<html>
<head>
    <title>My Form</title>
</head>
<body>
    <?php
        if (isset($_POST['submit'])) {
            $name = $_POST['name'];
            for ($i=0; $i<count($name); $i++) {
                foreach ($name[$i] as $k => $v) {
                    $serialize[$i][$k] = (($v=="1") ? TRUE : (($v=="0") ? FALSE : $v));
                }
            }
            $serialized = serialize($serialize);
        }
    ?>
    <form name="myform" method="POST">
        <!-- English Language -->
        <?php
            $max = 2;
            for ($i=0; $i<$max; $i++) {
        ?>
        <input type="text" name="name[<?php echo $i; ?>][Name]" value="English">
        <input type="text" name="name[<?php echo $i; ?>][Apprev]" value="en">
        <input type="text" name="name[<?php echo $i; ?>][default]" value="0">
        <?php
            }
        ?>
        <input type="submit" name="submit" value="submit">
    </form>
</body>
</html>