Php 如何使用PDO将表单中的复选框值插入数据库。I';我试过做点什么,但没有成功;行不通

Php 如何使用PDO将表单中的复选框值插入数据库。I';我试过做点什么,但没有成功;行不通,php,mysql,pdo,Php,Mysql,Pdo,嘿,伙计们,我想把表单中复选框的值插入数据库。但是我试过的不起作用。我完全不知道怎么做。任何帮助都将不胜感激 HTML部分: <div id="reg-data"></div> <input type="text" name="username" required="required" placeholder="Enter your name" id="username" /> <div id="username_availability_result"

嘿,伙计们,我想把表单中复选框的值插入数据库。但是我试过的不起作用。我完全不知道怎么做。任何帮助都将不胜感激

HTML部分:

<div id="reg-data"></div>
<input type="text" name="username" required="required" placeholder="Enter your name" id="username" />
<div id="username_availability_result"></div>
<input type="password" name="password" required="required" placeholder="Enter your password" id="password" />
<label for="gender">Gender </label>
<input type="radio" name="gender" required="required" id="gender" value="Male" />Male
<input type="radio" name="gender" required="required" id="gender" value="Female"/>Female
<br/><br/>
<label for="qualification">Qualification</label>
<select name="qualification" value="Qualification" id="qualification">
<option value="SSLC">SSLC</option>
<option value="HSC">HSC</option>
<option value="UG">UG</option>
<option value="PG">PG</option>
</select><br/><br/>
<label for="hobbies">Hobbies </label>
<input type="checkbox" name="hobbies[]" id="hobbies" value="Cricket" />Cricket
<input type="checkbox" name="hobbies[]" id="hobbies" value="Music" />Music
<input type="checkbox" name="hobbies[]" id="hobbies" value="Swimming" />Swimming
<input type="text" name="location" placeholder="Please give your location" id="location" />
<input type="text" name="company" placeholder="Where do you work?" id="company" />
<input type="text" name="designation" placeholder="Provide your designation" id="designation" />

<div class="submit"><input type="submit" name="register" value="Register" id="reg" disabled="disabled" /></div>
<div class="clear"></div>

性别
男性的
女的


资格 SSLC HSC UG PG

业余爱好 板球 音乐 游泳
PHP部分:

<?php
$servername = 'localhost';
$username = 'root';
$password = '';

try
{
$conn = new PDO("mysql:host=$servername;dbname=test", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$username = $_POST['username'];
$password = $_POST['password'];
$gender = $_POST['gender'];
$qualification = $_POST['qualification'];
$hobb = array('cricket', 'music', 'swimming');
$hobbies = $_POST['hobbies'];
$sql = "Insert into lousers (Username, Password, Gender, Qualification, Location, Company, Designation) 
        values ('".$_POST["username"]."', '".$_POST["password"]."', '".$_POST["gender"]."', '".$_POST["qualification"]."', '".$_POST["location"]."', '".$_POST["company"]."', '".$_POST["designation"]."')";
$conn->exec($sql);
$id = $sql_insert_id;
$values = array();
foreach($hobb as $selection) {
    if(in_array($selection, $hobbies)) {
        $values[ $selection ] = 1;
    } else {
        $values[ $selection ] = 0;
    }
}
$s2 = "UPDATE 'lousers'.'join'
        SET
        'cricket' = '".$values['cricket']."',
        'music' = '".$values['music']."',
        'swimming' = '".$values['swimming']."'
        WHERE
        'join'.'id' = ".$id."";
  $conn->exec($s2);
   echo "<br>";
   echo 'Thank you for registering. Login to access your profile';
 ?>

您真的应该切换到prepared语句,以摆脱现在的sql注入漏洞

您当前的问题似乎是使用了错误的报价:

$s2 = "UPDATE 'lousers'.'join'
    SET
    'cricket' = '".$values['cricket']."',
    'music' = '".$values['music']."',
    'swimming' = '".$values['swimming']."'
    WHERE
    'join'.'id' = ".$id."";
单引号或双引号用于字符串值。对于表名和列名,您需要使用倒勾(`)。仅当名称为保留字、以数字开头、包含空格等时,才需要此选项。有关详细信息,请参阅

因此,它看起来像(使用准备好的语句占位符,尽管在第一条sql语句中这更为紧迫):


还要注意,html ID值必须是唯一的,但这与您当前的问题无关。

您应该使用prepared语句来防止sql注入。这真的是一个简单的示例吗?更具体地说,“不起作用”。(错误信息是什么…)是的,我会的。我想知道如何插入这些多个值。我试过其他方法。但是力不起作用。谢谢我不确定这是否是您的完整代码,但除了使用准备好的语句外,您还应该在尝试将用户输入插入数据库之前先验证用户输入。@brett Yes。这不是我的完整代码。我刚把不起作用的部分贴上。剩下的一切都很好。我已经改变了你上面说的一切。我得到了这个错误。“注意:未定义变量:第19行E:\xampp\htdocs\Log\register.php中的sql\u insert\id警告:第22行E:\xampp\htdocs\Log\register.php中给出的字符串,第22行E:\xampp\htdocs\Log\register.php中给出的字符串,警告:第22行E:\xampp\htdocs\Log\register.php中给出的字符串,以及此错误。”。警告:在_array()中,参数2应为数组,第22行E:\xampp\htdocs\Log\register.php中给出的字符串填写所有字段SqlState[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解可在以下位置使用的正确语法:cricket,
music
=:music,
swiming
=:swiming WHERE
在第3行加入
'
$s2 = "UPDATE `lousers`.`join`
    SET
    `cricket` = :cricket,
    `music` = :music,
    `swimming` = :swimming
    WHERE
    `join`.`id` = :id;