0

我有一个非常简单的表单,其中包含一些文本字段和 2 个复选框。该表单有效,除非选中两个复选框,只有第一个复选框会添加到数据库中。

到目前为止我有这个:

<?php require_once('connectionsettings.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
. . .

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
    # ------------ edit begins here ------------ #
    if(count($articletags) > 0)
    {
        $articletags_string = implode(",", $articletags);
    }
    # ------------ edit ends here ------------ #

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
    $insertSQL = sprintf("INSERT INTO articles (articletitle, articledescription, articletags) VALUES (%s, %s, %s)",
                   GetSQLValueString($_POST['articletitle'], "text"),
                   GetSQLValueString($_POST['articledescription'], "text"),
                   GetSQLValueString($_POST['articletags[]'], "text")); # --Edited here also

 mysql_select_db($database_MySQL_CSFTDB, $MySQL_CSFTDB);
 $Result1 = mysql_query($insertSQL, $MySQL_CSFTDB) or die(mysql_error());
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
. . .
  <form action="<?php echo $editFormAction; ?>" id="form1" name="form1" method="POST">
  . . .
       <tr>
        <td align="right">&nbsp;</td>
       <td align="left"><p>
          <label> # -- added []s to article name --
          <input type="checkbox" name="articletags[]" value="checkbox" id="articletags_0" />
          Checkbox</label>
        <br />
        <label>
          <input type="checkbox" name="articletags[]" value="checkbox 2" id="articletags_1" />
          Checkbox</label>
         <br />
         <br />
        </p></td>
     </tr>
      . . .
</body>
</html>
4

5 回答 5

2

这是因为您为两个复选框使用了相同的名称。

您可以提供不同的名称或使用数组名称

<input type="checkbox" name="articletags[]" value="checkbox" id="articletags_0" />
<input type="checkbox" name="articletags[]" value="checkbox 2" id="articletags_1" />

它将作为数组发送到服务器。

$articletags=$_POST['articletags']
print_r($articletags)
于 2012-06-06T09:33:44.097 回答
2
  Use checkbox as array so it can store multiple value.

<input type="checkbox" name="articletags[]" value="checkbox" id="articletags_0" />
<input type="checkbox" name="articletags[]" value="checkbox 2" id="articletags_1" />



 $articletags = $_POST['articletags'];

在将值插入 db 之前将数组转换为字符串。

if(count($articletags) > 0)
{
 $articletags_string = implode(",", $articletags);
}

在数据库中插入新值...

于 2012-06-06T09:55:17.907 回答
1

当输入共享一个名称时,PHP 将丢弃除其中一个之外的所有输入,除非该名称以字符结尾[]

更改为name="articletags[]"(或绕过$_POST并访问原始表单数据)。

您还需要更改构建 SQL 的逻辑,以便循环遍历数组中的值,而不是仅仅检查 articletags 是否已定义。

于 2012-06-06T09:29:52.397 回答
0

您在两个复选框中具有相同的名称,尝试更改它并将名称与 id 相同,以便它们可以在 php.ini 中区分。

像这样的东西:

<label>
           <input type="checkbox" name="articletags_0" value="checkbox" id="articletags_0" />
           Checkbox</label>
          <br />
         <label>
             <input type="checkbox" name="articletags_1" value="checkbox 2" id="articletags_1" />
             Checkbox</label>
于 2012-06-06T09:30:28.833 回答
0

在复选框和单选按钮中,如果我们需要单个值,我们使用相同的名称。对于您的问题,您需要这两个值,这意味着您应该使用不同的名称或数组。

于 2012-06-06T09:36:00.210 回答