2015-08-28 134 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

相關問題