【问题标题】:Having trouble getting the values from HTML Form check boxes to insert into a MySQL database column无法从 HTML 表单复选框中获取值以插入 MySQL 数据库列
【发布时间】:2016-08-05 14:15:48
【问题描述】:

我是这个网站的新手,只想提前对您提供任何帮助表示感谢。所以,我有一个链接到一个单独的 PHP 脚本的表单,除了复选框之外,表单上的所有其他内容都可以很好地插入数据库。我在下面收到的当前代码收到了“未定义索引:”错误,并且我尝试了许多教程,但这是迄今为止我所得到的。

这是我的复选框的 HTML 代码:

<input type="checkbox" name="problem_list[]" value="Handle Bars">Handle Bars<br>
        <input type="checkbox" name="problem_list[]" value="Frame">Frame<br>
        <input type="checkbox" name="problem_list[]" value="Pedals">Pedals<br>
        <input type="checkbox" name="problem_list[]" value="Chain">Chain<br>
        <input type="checkbox" name="problem_list[]" value="Brakes">Brakes<br>
        <input type="checkbox" name="problem_list[]" value="Gears">Gears<br>
        <input type="checkbox" name="problem_list[]" value="Tires">Tires<br>

这是我与复选框相关的 PHP 代码:

$problem_list = ""; // declare problem_list
if (isset($_POST["problem_list"])) 
{$problem_list = implode(" ,",$_POST['problem_list']);
}
$sql = "INSERT INTO bike_repairs (employee_id, date, first_name, last_name, phone, email, make, model, color, overall_problem_area, specific_issue) 
VALUES ('$value16', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '".$problem_list."', '$value14')";

回顾一下,表单工作,数据库连接建立,所有其他表单元素都在变量中占了,插入就好了。所以这是我需要弄清楚的最后一件事。再次感谢您的帮助!

【问题讨论】:

  • 你的overall_problem_area字段的数据类型是什么?
  • 危险:你很容易受到SQL injection attacks的影响,你需要defend你自己。
  • 不要将 CSV 数据放入数据库列,你有一个关系数据库,use its relations

标签: php html mysql arrays checkbox


【解决方案1】:

在 if 条件之前声明 $problem_list

 $problem_list="";
  if (isset($_POST["problem_list"])) 
    {
       $problem_list = implode(" ,",$_POST['problem_list']);
    }
    $sql = "INSERT INTO bike_repairs (employee_id, date, first_name, last_name, phone, email, make, model, color, overall_problem_area, specific_issue) 
    VALUES ('$value16', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '".$problem_list."', '$value14')";

【讨论】:

    【解决方案2】:

    如果你这样编辑,你得到了什么?

    if ( !empty($_POST["problem_list"]) ) 
    {
        $problem_list = implode(" ,",$_POST['problem_list']);
        $sql = "INSERT INTO bike_repairs (employee_id, date, first_name, last_name, phone, email, make, model, color, overall_problem_area, specific_issue) 
        VALUES ('$value16', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '".$problem_list."', '$value14')";
    }
    else echo 'problem_list is empty';
    

    【讨论】:

    • 效果很好,非常感谢我的朋友!
    【解决方案3】:

    您将 issue_list chackboxes 声明为数组 (name='problem_list[]')。所以,只要检查它是否是一个数组并内爆它。

    $problem_list = $_POST["problem_list"];
    if(is_array($problem_list)) {
    $selected_problems = implode(" ,",$problem_list);
    } else {
    $selected_problems = "No problems!";
    }
    
    $problem_list = implode(" ,",$_POST['problem_list']);
    
    $problem_list = mysql_real_escape_string($problem_list , $connection); // IMPORTANT
    
    $sql = "INSERT INTO bike_repairs (employee_id, date, first_name, last_name, phone, email, make, model, color, overall_problem_area, specific_issue) 
    VALUES ('$value16', '$value5', '$value6', '$value7', '$value8', '$value9', '$value10', '$value11', '$value12', '".$problem_list."', '$value14')";
    

    永远不要忘记在执行查询之前对字符串值进行转义,以防止 sql 注入攻击。

    看看:

    http://php.net/manual/pt_BR/function.mysql-real-escape-string.php

    【讨论】:

    • 感谢您的输入,将查看并相应更新代码。
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多