如何在php循环创建的表单中分配变量或使用数字?

时间:2015-12-03 09:38:49

标签: javascript php jquery html ajax

我正在开发一个非常简单的php页面。用户选择他们想要添加的数字,然后在新页面上输入数字,单击按钮,然后显示总和。

我无法弄清楚如何将数字加起来,因为我不能仅因为循环而为每个数字分配变量。我试过这个不使用循环,为每个循环分配变量,只是让按钮添加这些变量,但这需要多次输入代码,我希望这可以使用循环,以防我需要整合选择数百个数字或东西。如果php不是最好的,请告诉我什么会更好,但无论如何......如何将用户输入的数字加起来?

索引页:

<p>How many number would you like to add?</p>
<a href="calculator.php?inputs=2">2</a><br>
<a href="calculator.php?inputs=3">3</a><br>
<a href="calculator.php?inputs=4">4</a><br>
<a href="calculator.php?inputs=5">5</a><br>

计算器页面:

<?php

$inputs = $_GET['inputs'];

?>

<div>Enter the numbers<br>
        <?php
            for ($x=0; $x < $inputs; $x++) {
                echo '<input type="number"><br>';
            }
        ?>
</div>


<form action='' method='post'><input type='submit' value='Find value' name='findvalue'></form>

<?php 

if (isset($_POST['findvalue'])) {

}

?>

4 个答案:

答案 0 :(得分:0)

        for ($x=0; $x < $inputs; $x++) {
            echo '<input type="number"><br>';
        }

您无法使用任何名称的输入。您可以使用动态名称,例如:

    for ($x=0; $x < $inputs; $x++) {
        echo '<input type="number" name="number_'.$x.'"><br>';
    }

使用数组名称的更好方法:

    for ($x=0; $x < $inputs; $x++) {
        echo '<input type="number" name="number[]"><br>';
    }

之后,var_dump你的$ _POST变量。

但是,创建动态字段的最佳方法是创建一个并使用javascript克隆它,当用户想要添加下一个值时。 jQuery示例:

<div class="myInputs"><input type="number" name="numbers[]"></div>
<a href="#" id="Add">Add input</a>
<script>
$('#Add').click(function(){
    $('.myInputs input:first').clone().appendTo(".myInputs");
    return false;
});

答案 1 :(得分:0)

您的网页上目前没有JavaScript。要与客户端进行交互,JavaScript是最佳选择,因为除非您需要在与用户交互之前保存数字,否则无需转到后端来创建输入字段

&#13;
&#13;
angular.module("Progress", [])
.controller("progress-controller", ['$scope', function($scope) {
    
    $scope.lists = ["fruits" , "eggs" , "grocery"];
}])
.directive('progressbar', [function() {
    return {
        restrict: 'A',
        scope: {
            'progress': '=progressbar'
        },
        controller: function($scope, $element, $attrs) {
            $element.progressbar({
                lists: $scope.progress
            })

            $scope.$watch(function() {
                $element.progressbar({lists: $scope.progress})
            })
        }
    }
}])
&#13;
window.onload = function() {
  document.getElementById("nums").onchange = function() {
    var fields = document.getElementById("fields"),
      numberOfField = parseInt(this.value, 10),
      inputs = [];
    for (var i = 0; i < numberOfField; i++) {
      inputs.push('<input type="text" class="calcField" name="number' + i + '" />');
    }
    fields.innerHTML = inputs.length > 0 ? inputs.join("<br/>") : "";
  }
  document.getElementById("calc").onsubmit = function() {
    var total = 0,
      fields = document.querySelectorAll(".calcField");
    for (var i = 0; i < fields.length; i++) {
      var val = parseInt(fields[i].value, 10);
      total += isNaN(val) ? 0 : val;
    }
    document.getElementById("total").value=total;
    return false; // stop submission - remove to submit the form
  }
}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

试试这个:

<?php

$inputs = $_GET['inputs'];

?>
<form action='' method='post'>
<div>Enter the numbers<br>
        <?php
            for ($x=0; $x < $inputs; $x++) {
                echo '<input name="numbers[]" type="number"><br>';
            }
        ?>
</div>


<input type='submit' value='Find value' name='findvalue'>
</form>    

<?php 

if (isset($_POST['findvalue'])) {
   print_r($_POST["numbers"]);
}

?>

答案 3 :(得分:0)

尝试为输入数量添加隐藏字段,然后使用它来循环

<?php

$inputs = $_GET['inputs'];

?>
<form action='' method='post'><input type='submit' value='Find value' name='findvalue'>

<div>Enter the numbers<br>
<input type="hidden" name="numberofinputs" value="<?php echo $inputs;?>"/>
        <?php
            for ($x=0; $x < $inputs; $x++) {
                //Please note the $x
                echo '<input type="number'.$x.'"><br>';
            }
        ?>
</div>


</form>

<?php 

if (isset($_POST['findvalue'])) {
     $numberOfinputs = $_POST['numberofinputs'];
     for($i=0; $i<numberOfinputs; $i++){
        //You can access it here
        echo $_POST['number'.$i];
     }
}

?>