我正在寻找一个问题的帮助,我正试图将数组中的值分别注入到一个MySQL表中。所以,不是一行的整个数组,而是单独的条目。
形式如下:
<form <form class="reg" name="main_form" action="form.php" method="post">>
<ul>
<li>
<label for="text1">
<input type="checkbox" name="task[]" value="text1" />text1
</label>
</li>
<li>
<label for="text2">
<input type="checkbox" name="task[]" value="text2" />text2
</label>
</li>
<li>
<label for="text3">
<input type="checkbox" name="task[]" value="text3" />text3
</label>
</li>
</ul>
<input type="submit" value="submit" />
</form>
在form.php中,我现在有这样的东西,它可以将所有选中的框放在表中的一行中:
<?php
require 'db/config.php';
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$link){
die('Could not connect due to: ' . mysql_error());
}
$db_selected = mysql_select_db(DB_NAME, $link);
if (!$db_selected){
die('Can\'t use: ' . DB_NAME . ': ' . mysql_error());
}
$task = implode (PHP_EOL, $_POST['task']);
$sql = "INSERT INTO completed (task) VALUES ('$task')";
if (!mysql_query($sql)){
die('Error: ' . mysql_error());
}
mysql_close();
?>
如果有人来选中这三个(text1、2和3)上的复选框,我需要将它们作为三个单独的条目输入数据库,而不是作为一个条目分组。
我想在表单实际将它们输入数据库之前,我需要使用explode()之类的东西,但我不能百分之百确定。任何帮助都将不胜感激。
最佳答案
您的版本已修复
您的固定版本,但您的api已弃用,并且您的方法不是sql injection save。别用这种方法用更好的方法,我在后面的回答中提到过。
替换这个
$task = implode (PHP_EOL, $_POST['task']);
$sql = "INSERT INTO completed (task) VALUES ('$task')";
if (!mysql_query($sql)){
die('Error: ' . mysql_error());
}
带着这个
<?php
foreach ($_POST['task'] as $task) {
$sql = "INSERT INTO completed (task) VALUES ('$task')";
if (!mysql_query($sql)){
die('Error: ' . mysql_error());
}
}
更好的方法
使用较新的Api保存版本,因为mysql_connect已被弃用,sql注入保存。所以使用新的mysqli api。为了防止SQL注入,您应该真正准备好语句,稍后将更新我的答案。别用另一种方法。因为mysql_connect不仅不推荐使用,而且在最新的php版本中从api中删除了它。谢谢@vove的通知。
<?php
require 'db/config.php';
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO completed (task) VALUES (?)");
if (!$stmt) {
echo $mysqli->error;
exit();
}
foreach ($_POST['task'] as $task) {
$stmt->bind_param("s", $task);
$stmt->execute();
}
$stmt->close();
$mysqli->close();
两个版本的输出
已选择文本1和文本2。
mysql> select * from completed;
+-------+
| task |
+-------+
| text1 |
| text2 |
+-------+
关于php - 将数组条目分离到数据库中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35847555/