Dynamicaly添加了表单字段--pdo php msql

时间:2018-05-15 22:39:08

标签: php html mysql pdo prepared-statement

我使用jquery创建了一个动态添加的表单字段并且工作完美,但无法进行db发布。我用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]

            ));


        }
    }

}

1 个答案:

答案 0 :(得分:2)

如果您有多个具有此类名称属性的表单控件(无论是否动态添加):

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

这不会转换为PHP代码中的$_POST['skill[]']。它只是$_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
        ]);
    }
}