请温柔地对待我,我对PHP和MySQL都很陌生 我正在尝试使用PDO插入和检索MySQL的数据。 这是HTML表单,它使用POST
将数据发送到我的PHP<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>
我根据Stackoverflow的这篇文章做了修改: 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列现在只显示数组
我使用以下代码检索数据
$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 :(得分:1)
PHP试图将$ _POST [“cms”]数组转换为字符串,这基本上是不可能的。所以PHP输出字符串“Array”
如果你想将数组保存到dbs中,我建议你做什么,JSON使用json_encode函数对它们进行编码。
所以:cms的bindParam应该是这样的:
$stmt->bindParam(':cms', json_encode($_POST['cms']));
要在获取时恢复数组,只需在字符串上使用json_decode函数。
度过美好的一天。
答案 1 :(得分: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,您可以设置&#34; cms&#34;列到JSON类型并以JSON格式存储值
2)您可以将值存储为文本,并在读取值后进行操作。 (不推荐)。
$stmt->bindParam(':cms', json_encode($_POST['cms']));
3)您可以创建一个新的一对多表,其中包含update_num和cms。对于每个选定的值,在该表中创建一个新插入