2015-08-28 138 views
1

我有一个html表单,带有多个复选框(主题) 当用户(学生)选择主题时,StudentID存储在MySQL表中,并且在单独的列中进行选择,但在同一个表中。如何根据复选框值将数据存储到多个MySQL表中?

我的问题是:如果复选框值“等于”某事,我如何将学生ID存储在新表中?

例如

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"/> 
+0

我想你忘记了用复选框,它只会被发送到脚本**,如果它被选中**。因此,在你的'$ _GET ['ckb']'你只会得到那些被选中的复选框的值 – RiggsFolly

+0

另外:以逗号分隔的列表存储数据是一个坏主意**。这意味着每次你想看这些数据时,你都必须编写代码来重新打开它,这样做会导致错误。而**更重要的是**它使得数据**更加难以处理**即你将如何编写一个查询来让你所有参加课程251000-1的学生都回来? – RiggsFolly

+0

@RiggsFolly,这就是我想要达到的目标,并且我想到的想法是根据复选框的选择区分学生ID,例如,如果复选框包含251000,将学生ID插入到CourseA表中至于251000-1和251000-2,我在考虑如果对数据ASCending或DESCending进行排序,我可以更舒适地浏览,但我现在想要的是根据他们选择的课程将学生ID存储在不同的表中希望这是明确的。 – Azizi

回答

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之类的保留字。这个固定和上面的代码添加解决了这个问题。

+0

@RiggsFolly ^^^ – Azizi

0

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

extract($_POST); 

$CKBsize=sizeof($ckb); 
for($i=0;$i<$CKBsize;$i++) 
{ 
    $CourseName=$ckb[$i]; 
    mysql_query("INSERT INTO newtable SET studentid='$studentid', ckb='$CourseName'"); 
} 
+0

它也会在foreach循环中做同样的事情。请阅读[The foreach manual page](http://php.net/manual/en/control-structures.foreach.php) – RiggsFolly

+0

**不要使用'extract()'**,除了特定的情况,在函数范围内编码,而不是在全局范围内编码。 – RiggsFolly

+0

嘿@RiggsFolly。今天你正在评论我的每一个答案。哈哈 。这真好。我仍然处于学习阶段。感谢您给予evrytime建议。 –

3

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

而不是创建逗号分隔列表并将其放入新表中使用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; 
     } 
    } 
?> 
+0

这当然有帮助,但事实证明,我有这段代码丢失,它解决了使用strpos的整个问题,请检查我自己的答案,谢谢。 @RiggsFolly – Azizi

相关问题