从单个输入和多个复选框选择表单更新数据库

时间:2015-01-09 08:00:39

标签: php mysql forms checkbox

是否可以使用具有多个单个输入的表单更新数据库,然后从同一表单中选择多个复选框?

我有一个客户选择他的表格: 一个。地点; 湾他希望转移员工的日期; C。 CHECKBOX集团拥有多名员工(从中选择一名或多名员工); d。转移的原因。

现在,使用上面的信息,a。湾和d。必须写入每个c的数据库。选择

如果我只选择一名员工,数据会正确写入数据库,我的问题是当选择多个员工时。

如果需要,我会提供代码,但如果可行的话,应该有一种标准的方法。

代码如下:

     <?php
    session_start(); 
    $old_jc_code = $_SESSION['empl_jc_code'];
    ?>
    <?php
    $new_jc_code = "$_POST[new_jc_code]";
    $move_date = "$_POST[move_date]";
    $move_reason = "$_POST[move_reason]";
    $test = implode(',',$_POST[empl_idno]);    //this is the array from the checkbox select
    ?>
    <?php
    include("../xxx");
        $cxn = mysqli_connect($host,$user,$password,$dbname)
            or die ("Couldn't connect to server.");
        $query = "INSERT INTO `empl_movement`  
             (`empl_idno`, `empl_jc_code`, `new_jc_code`, `move_date`, `move_receipt_date`, `move_reason`)
            VALUES 
             ('$test','$old_jc_code','$new_jc_code','$move_date','$move_receipt_date','$move_reason')";
        $result = mysqli_query($cxn,$query)
            or die ("Couldn't execute query. "
                .mysqli_error($cxn));
    ?>

2 个答案:

答案 0 :(得分:1)

我编辑了上面的代码。请阅读评论。你没有要求它,但我在我的例子中使用预备语句,因为它被认为是良好的做法,并避免了SQL注入的威胁,你的代码包含(将未经验证的用户数据原始插入到数据库中)。另外我发现你使用单引号和双引号有点乱。未测试的:

<?php
session_start(); 
$old_jc_code = $_SESSION['empl_jc_code'];
?>
<?php
$new_jc_code = $_POST['new_jc_code'];
$move_date = $_POST['move_date'];
$move_reason = $_POST['move_reason'];
$move_receipt_date=$_POST['move_receipt_date']; //You seem to have forgotten this
$test = $_POST['empl_idno'];    //<- make sure that this is actually an array
?>
<?php
include("../xxx");
    $cxn = mysqli_connect($host,$user,$password,$dbname)
        or die ("Couldn't connect to server."); 
$insData['oldjccode']=$old_jc_code;
$insData['newjccode']=$new_jc_code;
$insData['movedate']=$move_date;
$insData['movereceiptdate']=$move_receipt_date;
$insData['movereceiptdate']=$move_reason;
foreach($test as $testdata){
    $insStrng[]='(?,:oldjccode,:newjccode,:movedate,:movereceiptdate,:movereason)'; //Using prepared statements decreases SQL Injection Threat
    $insData[]=$testdata;

}


$query =  "INSERT INTO `empl_movement`(`empl_idno`, `empl_jc_code`, `new_jc_code`, `move_date`, `move_receipt_date`, `move_reason`) VALUES";
$query .=implode(',',$insStrng);
$statement = $cxn->prepare($query); //preparing the statement with the placeholders
$statement->execute($insData); //inserting the actual data into the placeholders


?>

答案 1 :(得分:0)

我认为最好是确认是否有一个用户或多个用户。我不知道你的代码是怎么样的,但$ _POST [&#39; employees&#39;]可能是一个数组,如果这是多选字段

$sql = "UPDATE [your_table] SET [values you want to set] WHERE ";
if(isset($_POST['employees'][1])) // if key 0 is set and 1 is not set then it will be one employeeonly, if key 1 is set then it will be more that one employee
{
  $employees = "`".implode ("`, `", $_POST['employees'])."`";
  $sql  .= "`employee` IN ($employees)";
}
else
{
  $employees = $_POST['employees'][0];
  $sql  .= "`employee` = `$employees`";
}