首页 > 解决方案 > 动态添加表单字段 - pdo php msql

问题描述

我用 jquery 制作了一个动态添加的表单字段,并且效果很好,但无法制作数据库帖子。我使用 pdo php。它什么也没发布,但我不知道为什么。请帮助我,但只能使用 pdo 和准备好的语句,没有 mysqli!谢谢!

$number = $_POST['skill[]'];
if($number > 1)
{
    for($i=0; $i<$number; $i++)
    {
        if(trim($_POST['skill[$i]'] != ''))
        {
            $pdoQuery = "INSERT INTO skills (username, skillname) values (:username, :skill)";

            $pdoResult = $pdo->prepare($pdoQuery);

            $pdoExec = $pdoResult->execute(array(


                ":username" => $username,
                ":skill" => $number[$i]

            ));


        }
    }

}

标签: phphtmlmysqlpdoprepared-statement

解决方案


如果您有多个具有这样名称属性的表单控件(无论它们是否被动态添加):

<input type="text" name="skill[]">

这不会转化为$_POST['skill[]']您的 PHP 代码。它将只是$_POST['skill'],它将包含在输入中输入的所有具有这些名称的值的数组。


假设这是你所拥有的:

首先,准备循环前的语句。为每次执行重新准备相同的语句会失去使用准备好的语句的性能优势。

$pdoQuery = "INSERT INTO skills (username, skillname) values (:username, :skill)";
$pdoResult = $pdo->prepare($pdoQuery);

然后,只需迭代$_POST['skill']. 如果其中没有任何内容,则循环的内容将永远不会运行。

foreach ($_POST['skill'] as $skill) {
    if (trim($skill)) {  // you don't have to explicitly check for '', because '' == false
        $pdoExec = $pdoResult->execute([
            ":username" => $username,
            ":skill" => $skill
        ]);
    }
}

推荐阅读