2017-02-15 234 views
0

請對我溫柔,我對PHP和MySQL很陌生。
我試圖插入和檢索使用PDO的MySQL數據。 這裏是HTML形式將數據發送到使用POST使用PHP插入和檢索數組數據到MySQL pdo

<FORM ACTION="index.php" METHOD=POST> 

Update# : 
<INPUT TYPE=TEXT NAME="update_num" align="left" LENGTH=2 required > 
<P> 

<P> 
ETO  : 
<INPUT TYPE=TEXT NAME="eto" LENGTH=30 > 
</P>  

<P> 
CAD# : 
<INPUT TYPE=TEXT NAME="cad" LENGTH=30 > 
</P>  

<p> 
CMS: 
</p> 
<h6>Hold Down control(CTRL) key to select multiple CMSs</h6> 
<SELECT NAME = "cms[]" multiple> 
<option></option>> 
<option>#1</option>> 
<option>#2</option>> 
<option>#3</option>> 
<option>#4</option>> 
</SELECT> 
</p> 
<INPUT TYPE=SUBMIT VALUE="Submit Form" align="center"> 

</FORM> 
</INPUT> 

我根據這個帖子從#1所作的修改我的PHP: Getting All $_POST From Multiple Select Value

我的PHP代碼如下所示:

$sql = "INSERT INTO dutypage (update_num, eto, cad, cms) VALUES (:update_num, :eto, :cad, :cms)"; 
$stmt = $conn->prepare($sql); 

$stmt->bindParam(':update_num', $_POST['update_num']); 
$stmt->bindParam(':eto', $_POST['eto']); 
$stmt->bindParam(':cad', $_POST['cad']); 
$stmt->bindParam(':cms', $_POST['cms']); 

$stmt->execute(); 

我的數據成功插入,但cms列現在只顯示陣列

MYSQL screenshot

我用下面的代碼來檢索數據

$query="SELECT cms FROM dutypage ORDER BY dateOf DESC"; 
$data=$conn->query($query); 
$result = $data->fetchAll(PDO::FETCH_ASSOC); 
var_dump($result); 
foreach ($result as $output) { 
    echo $output['cms']; 
    echo "<br>"; 
} 

,我只得到這樣的:

array(1) { [0]=> array(1) { ["cms"]=> string(5) "Array" } } Array 

的形式爲我選擇的選項實際上被傳遞到陣列中的MySQL的?

+0

請儘量避免爲實際文本內容放置大的,臃腫的屏幕截圖。我們無法以這種格式剪切和粘貼代碼,這在嘗試重現問題時通常很有幫助。 – tadman

回答

1

由於已設置的CMS作爲多個選擇形式

<SELECT NAME = "cms[]" multiple> 
<option></option> 
<option>#1</option> 
<option>#2</option> 
<option>#3</option> 
<option>#4</option> 
</SELECT> 

$_POST['cms']的值將是包含所選擇的值的數組。

你可以這樣做:

1)根據MySQL中,你正在運行,您可以設置的「CMS」列JSON類型和存儲JSON格式的值

2)可以存儲值作爲文本,並在讀取值後進行操作。 (不建議)。

$stmt->bindParam(':cms', json_encode($_POST['cms'])); 

3)您可以爲許多表創建一個新表,其中將包含update_num和cms。對於每個選定的值,請在該表格中插入一個新的插入文件

1

PHP在這裏嘗試將$ _POST [「cms」]數組轉換爲字符串,這基本上是不可能的。所以PHP輸出字符串「Array」。
如果你想將數組保存到dbs中,我建議你要做的是,JSON使用json_encode函數對它們進行編碼。
所以bindParam的:CMS應該是這樣的:
$stmt->bindParam(':cms', json_encode($_POST['cms']));
而讓你的陣列回來取時,只需使用json_decode函數的字符串。

祝您有美好的一天。