如何根据复选框值将数据存储到多个MySQL表中?

时间:2015-08-28 13:16:44

标签: php mysql checkbox

我有一个html表单,有多个复选框(主题) 当用户(学生)选择主题时,StudentID将存储在MySQL表中,并在单独的列中但在同一个表中进行选择。

我的问题是:如果复选框值“等于”某个东西,我怎样才能将学生ID存储在新表格中?strpos会这样做吗?

例如:

if (strpos($cc,'252000') !== false) {
    mysqli_query($dbcon,"INSERT INTO newtable (studentid,ckb) 
VALUES ('$studentid','$cc')");
}

完整代码:

<?php
      $host = 'localhost';
      $port = 8889;
      $username="root" ;
      $password="root" ;
      $db_name="db1" ;
      $tbl_name="courses" ;
      $tbl_name="studentinfo";
      $tbl_name="newtable";

        $dbcon = mysqli_connect("$host","$username","$password","$db_name") ;
                mysqli_set_charset($dbcon, "utf8");


        if (!$dbcon) {
        die('error connecting to database'); }


    $studentid = mysqli_real_escape_string($dbcon, $_GET['studentid']); //echo $studentid;

$name = $_GET['ckb'];
if(isset($_GET['ckb']))
{
foreach ($name as $courses){
$cc=$cc. $courses.',';
}
}

if (strpos($cc,'252000') !== false) {

    mysqli_query($dbcon,"INSERT INTO newtable (studentid,ckb) 
VALUES ('$studentid','$cc')");

    echo "$cc, trtue";
}

HTML

<form action="cdb.php" method="get">

<input name="studentid" type="text" id="studentid" maxlength="11"value="Student ID" />

<input type="checkbox" name="ckb[]" value="251000-1"/>
<input type="checkbox" name="ckb[]" value="251000-2"/>

3 个答案:

答案 0 :(得分:3)

好的,如果你绝对必须忽略所有良好的数据库设计实践,请试试这个。

不是创建逗号分隔列表并将其放入newtable,而是使用serialize()函数将$_GET['ckb']的内容放入此新行。至少通过这种方式,您可以使用unserialize()获取一个数组,这样即使更轻松地搜索数据库,也可以更轻松地操作数据。

您可以使用json_encode()json_decode()

替换序列化/反序列化

的引用:

  

序列化:http://php.net/manual/en/function.serialize.php

     

反序列化:http://php.net/manual/en/function.unserialize.php

<?php
    $host = 'localhost';
    // I assume you moved apache to port 8889. 
    // so its irrelevant to mysql connection, 
    // good job you are not actually using this variable anywhere
    $port = 8889;
    $username="root" ;
    $password="root" ;
    $db_name="db1" ;

    // fix so you have 3 variables and are not overwriting the same one
    $tbl_name1="courses" ;
    $tbl_name2="studentinfo";
    $tbl_name3="newtable";

    // remove unnecessary double quotes
    $dbcon = mysqli_connect($host,$username,$password,$db_name) ;

    // add some error checking that reports the actual error
    if ( ! $dbcon ) {
        echo 'Connect Error (' . mysqli_connect_errno() . ') '
                               . mysqli_connect_error();
        exit;
    }

    mysqli_set_charset($dbcon, "utf8");



    if(isset($_GET['ckb'])) {
        $studentid = mysqli_real_escape_string($dbcon, $_GET['studentid']);
        $cc = serialize($_GET['ckb']);
        $result = mysqli_query($dbcon,"INSERT INTO newtable 
                                       (studentid,ckb) 
                                VALUES ('$studentid','$cc')");
        if ( ! $result ) {
            echo mysqli_error($dbcon);
            exit;
        }
    }
?>

答案 1 :(得分:0)

下面,计算'ckb'复选框的总大小。然后。由于for循环,它将一直运行到总大小。 'studentid'来自文本框。它将插入到表中,直到循环条件为真。

<input type='button' name='type' id='bt1' value='Show Layer' onclick="setVisibility('subscribe_form');" />
<form action="%%GLOBAL_ShopPath%%/subscribe.php" method="post" id="subscribe_form" class="subscribe_form" name="subscribe_form" style="display:none">
  <p>subscribe form</p>
</form>

答案 2 :(得分:0)

事实证明,使用此代码确实根据新表和不同表中的复选框对数据进行排序

if (strpos($cc,'251000') !== false) {
$sql3="INSERT INTO newtable (studentid, ckb)
    VALUES ('$studentid', '$cc')";
    echo 'true';
}

然而,似乎我必须检查sql3语句

if (!mysqli_query($dbcon,$sql3)) 
       {
          die('Error: ' . mysqli_error($dbcon));
       }

我遇到的另一个错误是在其中一个sql语句中使用了诸如table之类的保留字。修复后,上面添加的代码解决了问题。