PHP - получить количество полей ввода для ввода базы данных - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть форма, которая выглядит следующим образом:

<form method='POST' name='form2' action='./index.php' class='form-horizontal'>
<input type='hidden' name='savedata' value='true'>

    <div class='row'>
        $numOfCols = 4;
        $rowCount = 0;
        $bootstrapColWidth = 12 / $numOfCols;
        $i=1;
        for ($x=1;$x<=8;$x++) {

            <div class='col-md-".$bootstrapColWidth ." col-xs-12 margin-bottom-30'>
                <strong><p>".$i.". Data</p></strong>
                <div class='col-sm-12'>
                    <div class='form-group' id='form_firstname_".$i."'>
                        <label for='name'>Firstname:<span class='red'>*</span></label>
                        <input class='form-control' id='firstname_".$i."' name='firstname_".$i."' type='text'>
                    </div>
                </div>

                <div class='col-sm-12'>
                    <div class='form-group'>
                        <label for='name'>Lastname:<span class='red'>*</span></label>
                        <input class='form-control' id='lastname_".$i."' name='lastname_".$i."' type='text'>
                    </div>
                </div>


                <div class='col-sm-12'>";
                    <div class='form-group' id='form_praefix_".$i."'>
                        <label for='name'>Field A:<span class='red'>*</span></label>
                        <input class='form-control' id='field_a_".$i."' name='field_a_".$i."' type='text'>
                    </div>
                </div>

                <div class='col-sm-12' id='form_postfix_".$i."'>
                    <div class='form-group'>";
                        <label for='name'>Field B:<span class='red'>*</span></label>
                        <input class='form-control' id='field_b_".$i."' name='field_b_".$i."' type='text'>
                    </div>
                </div>
            </div>

            $rowCount++;
            $i++;
            if($rowCount % $numOfCols == 0) {

            </div> <div class='row'>
            }

        }

    </div>

<input type='submit' id='btn_submit' class='btn btn-primary' value='Save data'>
<form>

Итак, как вы можете видеть, у меня есть for-loop, который показывает в 8 раз те же поля.Пользователь может ввести только одного человека или до восьми человек.

Форма будет отправлена ​​следующим образом:

if ($savedata=="true") {

    /* create db connection */
    $link = mysqli_connect("localhost", "USER", "PASSWORD", "DATABASE");

    // check connection
    if($link === false){
        $error_db_connection=1;
    }

    // insert entries into database
    for ($run=1;$run<=8;$run++) {

        $var_firstname="firstname_".$run;
        $var_lastname="lastname_".$run;
        $var_field_a="field_a_".$run;
        $var_field_b="field_b_".$run;

        $sql = "INSERT INTO TABLENAME (firstname, lastname, praefix_title, postfix_title) VALUES ('".$$var_firstname."', '".$$var_lastname."', '".$$var_field_a."', '".$$var_field_b."')";
        if(mysqli_query($link, $sql)){
            $success=1;
        } else{
            $error=1;
        }
    }

    // close connection
    mysqli_close($link); 

}

Я снова использую цикл for, гдеобщее количество циклов прямо сейчас закодировано (8).Что мне нужно сделать, так это то, что общее количество циклов в жестком коде является динамическим.Таким образом, если пользователь заполняет 3 раза поля (имя, фамилия, field_a, field_b), то в мою базу данных должны быть вставлены только 3 записи.Если пользователь заполняет все 8 полей, в мою базу данных должно быть вставлено 8 записей.

Сейчас я всегда получаю 8 записей в своей базе данных, даже если пользователь заполняет только одну запись.Можете ли вы помочь мне, как я могу достичь того, что мне нужно?

Каждое поле формы имеет свои уникальные name и id из-за $i, который я считаю.Может быть, мне нужно отправить скрытое поле с общим количеством заполненных полей?Если да, то как мне это сделать?Или любой другой подход?

1 Ответ

0 голосов
/ 17 февраля 2019

Перед оператором вставки sql вставьте что-то вроде

if ( empty( $$var_firstname ) ) {
    break;
}

Это проверяет, установлено ли значение и, если нет, выходит из цикла for.Возможно, вы захотите сделать больше проверочных проверок, таких как проверка имени, фамилии, a и b, чтобы убедиться, что все они пусты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...