【问题标题】:Dynamicaly added form fields - pdo php msql动态添加表单字段 - pdo php mysql
【发布时间】:2018-05-16 06:58:17
【问题描述】:

我使用 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]

            ));


        }
    }

}

【问题讨论】:

  • "只有 pdo 和prepared statements,没有mysqli!" ????

标签: php html mysql pdo prepared-statement


【解决方案1】:

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

<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
        ]);
    }
}

【讨论】:

  • 不错的答案,像往常一样。注意最初的if,我想他们错过了count(),对吧?
  • 谢谢,Syscall。是的,根据后续代码,我认为这是意图,即使实际计数缺失。
猜你喜欢
  • 2012-08-17
  • 2010-10-30
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2019-04-19
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多