2013-01-21 86 views
1

我正在尋找一種將多個複選框選擇插入單個數據庫列的簡單解決方案。用戶選擇框1,4和6 - 因此數據庫會反映「1,4,6」..逗號會很好,但不是必需的。如果選中了一個複選框,信息將按照它應該插入。如果選擇了多個,則只有最後一個將被插入到數據庫中。其他一切工作正常,但這些沉重的複選框。我試圖用將多個複選框值插入到單個SQL數據庫列中

<?php 
if(isset($_POST['mode'])) { 
    $mode = implode(",", $_POST['mode']); 
} else { 
    $mode = ""; 
} 
?> 

<?php 

由另一有人問同樣的問題表明,雖然這種方法給我留下了「陣列」之列,而不是任何數字裏面無論選擇什麼。

我試圖發佈一些圖片來更好地解釋,但它不會允許我。我不是SQL或PHP專業人員,只是儘量學習儘可能多地獲取這個數據庫的速度。如果有解決這個問題,請賜教。

這裏是我使用的動作腳本提交代碼:

<?php 
if(isset($_POST['mode'])) { 
$mode = implode(",", $_POST['mode']); 
} else { 
$mode = ""; 
} 
?> 

<?php 

// Connect to server and select database. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Get values from form 
$gamename=$_POST['gamename']; 
$region=$_POST['region']; 
$mode=$_POST['mode']; 
$notes=$_POST['notes']; 

// Insert data into mysql 
$sql="INSERT INTO $tbl_name(gamename, region, mode, notes)VALUES('$gamename', '$region', '$mode', '$notes')"; 
$result=mysql_query($sql); 

// if successfully insert data into database, displays message "Successful". 
if($result){ 
echo "Successful"; 
echo "<BR>"; 
echo "<a href='insert.php'>Back to main page</a>"; 
} 

else { 
echo "ERROR"; 
} 
?> 

<?php 
// close connection 
mysql_close(); 
?> 

這裏是我的複選框代碼:

<td><input type="checkbox" name="mode[]" id="mode" value="1" /> 
mode 1<br /> 
<input type="checkbox" name="mode[]" id="mode" value="2" /> 
    mode 2<br /> 
<input type="checkbox" name="mode[]" id="mode" value="3" /> 
    mode 3<br /> 
<input type="checkbox" name="mode[]" id="mode" value="4" /> 
    mode 4 <br /> 
<input type="checkbox" name="mode[]" id="mode" value="5" /> 
    mode 5 <br /> 
<input type="checkbox" name="mode[]" id="mode" value="6" /> 
    mode 6 <br /> 
<input type="checkbox" name="mode[]" id="mode" value="7" /> 
    mode 7<br /> 
<input type="checkbox" name="mode[]" id="mode" value="8" /> 
    mode 8 
    </td> 

作爲一個側面說明,什麼步驟應該我採取確保我的數據庫和網站不容易受到簡單的利用。我計劃讓這些表單被公衆用來公開地向數據庫提交信息。

+0

請不要使用mysql_ *函數,它棄用(見[*紅box *](http://php.net/manual/en/function.mysql-query.php)),並且容易受到sql注入的影響。使用[* PDO *](http://php.net/manual/en/book.pdo.php)或[* MySQLi *](http://php.net/manual/en/book.mysqli.php) – alfasin

+0

您能否詳細介紹一下SQL的新手?到底漏洞在哪裏,我可以在保持現有功能的同時替換易受攻擊的代碼? –

+0

如果您會閱讀我在我的評論中發佈的鏈接 – alfasin

回答

3

您覆蓋正確的$mode變量,這就是爲什麼您在表格數據中看到Array

$mode=$_POST['mode']; 

和對弱勢:

從代碼中刪除這條線,你應該逃避字符串是這樣的:

$gamename = mysql_escape_string($_POST['gamename']); 
$region = mysql_escape_string($_POST['region']); 
$notes = mysql_escape_string($_POST['notes']); 
+0

謝謝你的信息,我會嘗試沒有這條線,看看它給了我什麼。 –

+0

刪除該行代碼已解決該問題。多選的複選框現在可以在我的數據庫的單個列中正確顯示。 –

+0

我很高興幫助你的朋友 – dimaninc

-1

您可以使用以下代碼將複選框轉換爲字符串,其中所選框由逗號分隔。

function checkboxToString($check){ 
    while (list ($key,$val) = @each ($check)) { 
     $string .= $val.","; 
    }  
    return $string; 
} 

例如:當框1,3和4被選中時,它將返回1,3,4 ,.是的,最後加上一個逗號。你可以使用一行簡單的代碼去除最後一個逗號(也許不是最好的)。只需在最後加上:

$string = substr($string,0,strlen($string)-1); 

這將刪除字符串的最後一個字符。

+0

多數民衆贊成在一個不好的方法,數組將加入()後更好 – dimaninc

相關問題