2010-09-30 121 views
1

我有一個調查類型表單,並在一些問題中,用戶可以選擇勾選多個框。複選框插入MySql數據庫

我將這些答案存儲在mysql數據庫中,但此刻數據庫僅存儲最後一個勾選的複選框。無論如何要存儲所有的檢查值,可能由昏迷或分號分隔嗎?

這裏是我的代碼:

 $q1 = mysql_escape_string($_POST['q1']); 
     $q2 = mysql_escape_string($_POST['q2']); 
     $q3 = mysql_escape_string($_POST['q3']);    
     $q4 = mysql_escape_string($_POST['q4']); 
     $q5 = mysql_escape_string($_POST['q5']);    
     $q6 = mysql_escape_string($_POST['q6']); 
     $q7 = mysql_escape_string($_POST['q7']); 
     $q8 = mysql_escape_string($_POST['q8']); 
     $q9 = mysql_escape_string($_POST['q9']); 
     $q10 = mysql_escape_string($_POST['q10']); 
     $q11 = mysql_escape_string($_POST['q11']); 
     $q12 = mysql_escape_string($_POST['q12']); 
     $q13 = mysql_escape_string($_POST['q13']); 
     $q14 = mysql_escape_string($_POST['q14']); 
     $email = mysql_escape_string($_POST['email']); 

     require_once('connection.php'); 

     $sql="INSERT INTO survey (Question1, Question2, Question3, Question4, Question5, Question6, Question7, Question8, Question9, Question10, Question11, Question12, Question13, Question14, eMail) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6', '$q7', '$q8', '$q9', '$q10', '$q11', '$q12', '$q13', '$q14', '$email')"; 

     if (!mysql_query($sql,$conn)) 
      { 
     die('Error: ' . mysql_error()); 
      } 

      mysql_close($conn); 
+0

'mysql_escape_string'已折舊且不應使用,請在連接處於活動狀態後使用'mysql_real_escape_string'。 – RobertPitt 2010-09-30 14:29:13

+1

顯示您的HTML。 – methodin 2010-09-30 14:30:23

回答

3

首先,函數mysql_escape_string折舊 - 你應該使用mysql_real_escape_string。其次,這將允許任何惡意的人在結果中插入不同的值,例如2和3。你需要做的每一個值符合0或1。要做到這一點,我建議你轉換爲布爾然後一個int:

$q1 = (int)((bool)$_POST['q1']); 
$q2 = (int)((bool)$_POST['q2']); 
... 

爲HTML代碼,每個複選框需要「1」的價值屬性。

由於這些只是整數,所以沒有必要轉義它們。

0

如果未選中複選框,則不會將其發送到下一頁。我相信$ _POST ['email']是一個文本字段,如果它是全字段的,它將被髮送給無匹。
相反,嘗試sometring這樣的:

$sql="INSERT INTO survey (Question1, Question2, Question3, Question4, Question5, Question6, Question7, Question8, Question9, Question10, Question11, Question12, Question13, Question14, eMail) VALUES ("; 

if ($_POST['q1'] == 'On') $sql .= "1, "; else $sql .= "0, "; 

if ($_POST['q2'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q3'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q4'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q5'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q6'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q7'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q8'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q9'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q10'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q11'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q12'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q13'] == 'On') $sql .= "1, "; else $sql .= "0, "; 
if ($_POST['q14'] == 'On') $sql .= "1, "; else $sql .= "0, "; 

$sql .= mysql_escape_string($_POST['email']) . ')'; 

     require_once('connection.php'); 

     if (!mysql_query($sql,$conn)) 
      { 
     die('Error: ' . mysql_error()); 
      } 

      mysql_close($conn); 
+0

想想一些循環,呃? ;-) – 2010-09-30 14:44:30

+0

當然,循環在這種情況下是最好的。我只是遵循TaraWalsh的邏輯。 – CristiC 2010-09-30 15:53:53

0

目前,該數據庫只存儲被選中的最後複選框。

這聽起來像它可能是您的輸入字段名稱中的名稱衝突。檢查您的輸入字段是否唯一命名。

是否有無論如何存儲所有檢查值,可能由昏迷或分號分隔?

對於每個問題,您似乎都有單獨的數據庫列:您爲什麼要用逗號或分號連接它們?

0

您是否檢查過您的html複選框元素的名稱? 屬於某個問題的所有複選框元素(例如:1)應該具有如下名稱:'question1 []'。這樣,所有的值將作爲數組通過$ _POST返回。

例如,$ _POST [「question1」]現在是一個包含檢查值的數組。

edit--

確定我只注意到你對每一個問題一個複選框,所以這並不造成問題。

相關問題