Динамически добавлены поля формы - pdo php msql - PullRequest
0 голосов
/ 16 мая 2018

Я сделал с помощью 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]

            ));


        }
    }

}

1 Ответ

0 голосов
/ 16 мая 2018

Если у вас есть несколько элементов управления формы с такими атрибутами имени (независимо от того, были ли они добавлены динамически или нет):

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