【问题标题】:PHP: Saving multiple checkbox values in SQLPHP:在 SQL 中保存多个复选框值
【发布时间】:2013-03-27 09:05:42
【问题描述】:

我正在尝试制作一个表单,该表单可以在单个 SQL 记录中写入 多个复选框值 到目前为止我有一些代码,但我不知道我做错了什么。

这是我所拥有的:(包含复选框的表格)

<table> 
  <tr>
    <td><input id="vlaams-brabant" type="checkbox" name="Regio[]" value="Vlaams-Brabant"/> Vlaams-Brabant</td>
    <td><input id="waals-brabant" type="checkbox" name="Regio[]" value="Waals-Brabant"/> Waals-Brabant </td>
  </tr>
  <tr>    
    <td><input id="oost-vlaanderen" type="checkbox" name="Regio[]" value="Oost-Vlaanderen"/> Oost-Vlaanderen </td>
    <td><input id="west-vlaanderen" type="checkbox" name="Regio[]" value="West-Vlaanderen"/> West-Vlaanderen </td>
  </tr>
  <tr>
    <td><input id="Limburg" type="checkbox" name="Regio[]" value="Limburg"/> Limburg </td>
    <td><input id="Antwerpen" type="checkbox" name="Regio[]" value="Antwerpen"/> Antwerpen</td>
  </tr>
  <tr>
    <td><input id="Luik" type="checkbox" name="Regio[]" value="Luik"/> Luik </td>
    <td><input id="Henegouwen" type="checkbox" name="Regio[]" value="Henegouwen"/> Henegouwen </td>
  </tr>
  <tr>
    <td><input id="Luxemburg" type="checkbox" name="Regio[]" value="Luxemburg"/> Luxemburg </td>
    <td><input id="Namen" type="checkbox" name="Regio[]" value="Namen"/> Namen </td>
  </tr>
  <tr>
    <td><input id="België" type="checkbox" name="Regio[]" value="Heel België"/> Heel België </td>
    <td><input id="Internationaal" type="checkbox" name="Regio[]" value="Internationaal"/> Internationaal </td>
  </tr>
  <tr>
    <td><input id="Brussel" type="checkbox" name="Regio[]" value="Brussel Hoofdstedelijk Gewest"/> Brussel Hoofdstedelijk Gewest </td>
  </tr>
</table>

这是我的 PHP 代码(请记住,这只是更大代码的一部分,我还有其他文本字段等。)

$adds['nameCom'] = $conn->real_escape_string($_POST['nameCom']);
    $adds['name'] = $conn->real_escape_string($_POST['name']);
    $adds['number'] = $conn->real_escape_string($_POST['number']);
    $adds['email'] = $conn->real_escape_string($_POST['email']);
    $adds['activiteit'] = $conn->real_escape_string($_POST['activiteit']);
    $adds['Regio'] = $conn->real_escape_string($_POST['Regio']);

    // query voor INSERT INTO
    $sql = "INSERT INTO `data` (`nameCom`, `name`, `number`, `email`, `activiteit`, `Regio`) 
    VALUES ('". $adds['nameCom']. "', '". $adds['name']. "', '". $adds['number']. "', '". $adds['email']. "', '". $adds['activiteit']. "', '" . implode(',', $adds['Regio']) ."')"; 

    // Performs the $sql query on the server to insert the values
    if ($conn->query($sql) === TRUE) {
      echo 'Uw gegevens werden opgeslagen, bedankt!';

内爆给出以下错误: 警告:implode() [function.implode]:第 38 行 C:\xampplite\htdocs\LPtest\insert.php 中传递的参数无效

如果有人可以帮助我了解我在这里做错了什么,我们将不胜感激! 提前谢谢!

【问题讨论】:

  • real_escape_string over Regio 数组的结果是什么?我认为,它只为字符串定义......它返回字符串,它不是一个可以内爆的数组......
  • 第38行是什么代码?

标签: php sql checkbox implode insert-into


【解决方案1】:

正如函数名所说,real_escape_string 仅适用于字符串。所以你必须为$_POST['Regio']数组的每个值调用这个函数:

$Regio = array();
$adds['Regio'] = "";

if(count($_POST['Regio']) > 0) {
  foreach($_POST['Regio'] as $key=>$value)
    $Regio[] = $conn->real_escape_string($value);
}

$adds['Regio'] = implode(',', $Regio);

这应该可行。

【讨论】:

  • 最佳做法是在循环前$adds['Regio']=array();
  • +1 您也可以在一行中完成 $adds['Regio'] =$conn-&gt;real_escape_string(implode(',', $_POST['Regio'])); 但您的代码显示了所涉及的处理
  • 我明白你在说什么,但是:如果我使用 Matei Mihai 的代码,我的代码在插入语句中应该是什么? $sql = "INSERT INTO data` (nameCom, name, number, email, activiteit, Regio) 值 ('".$adds['nameCom']. "', '". $ adds['name']. "', '". $adds['number']. "', '". $adds['email']. "', '". $adds['activiteit']. " ', '". $my_implode['Regio'] ."')"; ` 像这样?
  • 如果您使用的正是我的代码.. 您只需在插入语句中添加 $adds['Regio']
  • 我在您的 foreach 语句中仍然出现错误:警告:第 37 行 C:\xampplite\htdocs\LPtest\insert.php 中为 foreach() 提供的参数无效 不过,我非常感谢您的帮助,我的任务更进一步!
【解决方案2】:

$_POST['regio'] 是一个多维数组。您应该使用foreach 从中获取各个值。

【讨论】:

    【解决方案3】:

    你应该使用 foreach..

    HTML 代码:

    <input id="id1" type="checkbox" name="Regio[id1]"/>
    <input id="id2" type="checkbox" name="Regio[id2]"/>
    <input id="id3" type="checkbox" name="Regio[id3]"/>
    

    PHP 代码:

    $chkBoxes = $_POST['Regio'];
    foreach ($chkBoxes as $key => $val) {
         // you code here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2023-03-25
      相关资源
      最近更新 更多