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
  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);
}

dbに新しい値を挿入します...

于 2012-06-06T09:55:17.907 に答える
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 に答える
1

入力が名前を共有する場合、その名前が文字で終わらない限り、PHP は 1 つを除いてすべてを破棄します[]

生のフォーム データに変更しますname="articletags[]"(またはバイパス$_POSTして、生のフォーム データにアクセスします)。

articletags が定義されているかどうかを確認するだけでなく、配列内の値をループするように、SQL を構築するためのロジックを変更する必要もあります。

于 2012-06-06T09:29:52.397 に答える
0

両方のチェックボックスに同じ名前があります。変更して、id と同じ名前を付けて、php で区別できるようにしてください。

このようなもの :

<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 に答える