在PHP中计算具有相同名称的输入字段数量?

时间:2015-06-22 14:48:34

标签: php input count

我想用名称" termin" + number +" _von"来计算输入字段的数量。因此,如果有一个名为" termin1_von"的输入字段,则使用名称" termin2_von"第三个是名字" termin3_von"代码应该打印" 123"。因为有3个输入。我想要的是我可以通过单击按钮创建输入字段,所有输入提交将自动保存在我的MySQL数据库中(每个提交都应该有一个自己的列)。

我尝试的是以下内容:

<?php
    $termin_counter = 1;
    $termin_von = 'termin'.$termin_counter.'_von';

    echo $termin_counter;

    while(isset($_POST[$termin_von])){
        $termin_counter++;

        echo $termin_counter;
    }  
?>

这是表格

<form>
      <fieldset>
                <legend>Behandlungstremin</legend>
                <table id="table_output">
                <tr>
                    <th>Termin</th>
                    <th>von</th><th>bis</th>
                    <th>Datum</th>
                </tr>
                <tr>
                    <td>1.</td>
                    <td><input type="time" name="termin1_von" required=""></td>
                    <td><input type="time" name="termin1_bis" required=""></td>
                    <td><input type="date" name="termin1_date" required=""></td>
                </tr>
                </table>
                <span onclick="add_termin()" name="add_termin" id="add_termin"><img src="bilder/add.png"></span>
                <span onclick="remove_termin()" name="remove_termin" id="remove_termin"><img src="bilder/close.png"></span>
            </fieldset>
            <br>
            <input type="submit" class="submit" value="Rechnug erstellen" name="submit" id="submit">
                    </div>
            <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
            <script type="text/javascript">
            var termin_angabe = 1;

            function add_termin() {
                termin_angabe++;
                var table = document.getElementById("table_output");
                var row = table.insertRow(-1);

                var cell1 = row.insertCell(0);
                var cell2 = row.insertCell(1);
                var cell3 = row.insertCell(2);
                var cell4 = row.insertCell(3);

                cell1.innerHTML = termin_angabe + ".";
                cell2.innerHTML = '<input type="time" name="termin'+ termin_angabe+'_von" id="termin'+ termin_angabe+'_von">';
                cell3.innerHTML = '<input type="time" name="termin'+ termin_angabe+'_bis" id="termin'+ termin_angabe+'_bis">';
                cell4.innerHTML = '<input type="date" name="termin'+ termin_angabe+'_date" id="termin'+ termin_angabe+'_date">';
            }   
            function remove_termin() {
                if (termin_angabe > 1) {
                termin_angabe--;
                document.getElementById("table_output").deleteRow(-1);
                }
            }
            </script>
</form>

但是,如果我运行它,我会得到无数的数字。我犯了错误还是有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

在循环之前只设置$ termin_von一次。

  $termin_counter = 1;
    while(true) {
      $termin_von = 'termin'.$termin_counter.'_von';
      if(!isset($_POST[$termin_von])) break;
      echo $termin_counter++;
    }  

答案 1 :(得分:0)

此处while循环:

while(isset($_POST[$termin_von])){
    $termin_counter++;
    echo $termin_counter;
}  

...肯定会永远运行,因为$_POST[$termin_von]永远不会被设置,因为$termin_von永远不会改变。在循环之前定义它时:

$termin_von = 'termin'.$termin_counter.'_von';

它会保持原样,连续的字符串读取termin1_von。如果稍后增加变量$termin_counter,它将不会增加。您需要在循环的每次迭代中使用当前计数器编号定义$termin_von。将它移到while循环中。