Динамическая HTML-форма и сохранение в несколько записей в БД - PullRequest
1 голос
/ 15 апреля 2019

Я пишу небольшое приложение, использующее codeigniter для отслеживания платежей и дат платежей. У меня есть форма, в которую мы вводим данные о клиенте, и среди этих полей мы вводим, сколько платежей будет использовано для того, чтобы клиент заплатил всю свою премию.

Следующая страница берет это число и генерирует такое же количество полей. Например, установка_1, дата_1; установка_2, дата_2.

<?php for($i=1; $i<=$instalments; $i++):?>
    <div class="row form-group">
        <div><label>Instalment <?php echo $i;?></label></div>
        <div>
            <input type="text" id="instalment_<?php echo $i;?>" name="instalment_<?php echo $i;?>">
    </div>
</div>

<div class="row form-group">
    <div><label>Premium Date <?php echo $i;?></label></div>
    <div>
        <input type="text" id="date_<?php echo $i;?>" name="date_<?php echo $i;?>" class="form-control">
    </div>
</div>

Идея теперь состоит в том, чтобы пройти через эту форму и сохранить каждый набор взносов и даты в 1 запись в базе данных. я смог сделать это, если у меня есть только один тип полей (например, рассрочка). но когда я добавил дату, она сохраняется, но каждая запись создается дважды.

$post = $this->input->post();   
foreach($post as $key=>$value){
            //check for the word instalment
            if(strpos($key, "instalment") == 0){
                //get the instalment number from the name of the field
                $inst_number = substr($key, -1);
                //Use $category_id and $value in this loop to build update statement
                echo "<script type='text/javascript'>alert('$inst_number');</script>";
                //$arr = "inst_".$inst_number;
                //reform the name of the field to get the values from it
                $instalment_var = "instalment_".$inst_number;
                $date_var = "date_".$inst_number;
                echo "<script type='text/javascript'>alert('$instalment_var');</script>";
                $amount = $this->input->post($instalment_var);
                $date = $this->input->post($date_var);
                echo "<script type='text/javascript'>alert('$amount');</script>";
                $arr = array(
                    'payment_amount' => $amount,
                    'payment_date' => $date,
                    'policy_name' => $policy_id,
                );
                if(!$this->Policy_model->save_payment_details($arr)){
                    redirect('ships/index');
                }
            }
        }

Как я могу сделать так, чтобы не каждая запись сохранялась дважды? и если я добавлю другое поле, оно будет сохранено 3 раза.

Я хотя бы назвал div и работал над этим, но я не получил никакого результата.

Заранее спасибо.

1 Ответ

0 голосов
/ 15 апреля 2019

Попробуйте этот код. Это решит вашу проблему.

Просмотр:

<form action="action.php" method="POST">
<?php for($i=1; $i<=$instalments; $i++){?>
    <div class="row form-group">
        <div><label>Instalment <?php echo $i;?></label></div>
        <div>
            <input type="text" id="instalment[]" name="instalment[]">
    </div>
</div>

<div class="row form-group">
    <div><label>Premium Date <?php echo $i;?></label></div>
    <div>
        <input type="text" id="date_<?php echo $i;?>" name="date[]" class="form-control">
    </div>
</div>
<?php } ?>
<input type="submit" name="submit" value="submit">
</form>

В вашем контроллере:

$post = $this->input->post();
   $i=0;
   foreach($post as $key=>$value){
       $arr = array(
                    'payment_amount' =>$post['instalment'][$i],
                    'payment_date' => $post['date'][$i],
                    'policy_name' => 1,
                );
        $i++;
   }exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...