首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组条目分隔到数据库中

将数组条目分隔到数据库中
EN

Stack Overflow用户
提问于 2016-03-07 23:28:40
回答 1查看 38关注 0票数 1

我正在寻找一些帮助来解决我试图将数组中的值单独注入到MySQL表中时遇到的问题。因此,不是将整个数组放在一行中,而是放在单独的条目中。

表单如下所示:

代码语言:javascript
复制
    <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中,我现在有类似这样的东西,它可以将所有选中的框放到表中的一行中:

代码语言:javascript
复制
<?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)的复选框,我需要将其作为三个单独的条目输入数据库,而不是分组为一个条目。

我在想,在表单真正将它们输入到DB之前,我需要使用像explode()这样的东西,但我不能百分之百确定。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-03-07 23:44:54

您的版本已修复

您的修复版本,但您的应用编程接口是弃用的,并且您的方法是,而不是sql注入,保存不要使用这种方法,使用更好的方法,我在后面的回答中提到过。

替换这个

代码语言:javascript
复制
$task = implode (PHP_EOL, $_POST['task']);
$sql = "INSERT INTO completed (task) VALUES ('$task')";

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

有了这个

代码语言:javascript
复制
<?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收到您的通知。

代码语言:javascript
复制
<?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();

两个版本的输出

选择了text1和text2。

代码语言:javascript
复制
mysql> select * from completed;
+-------+
| task  |
+-------+
| text1 |
| text2 |
+-------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35847555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档