0

私はPHPが初めてで、次の問題に遭遇しました。複数の入力フィールドを受け取り、他のページを渡してそれらの値を複数行で出力する単純なフォームを作成したいと考えています。たとえば、次のスクリーン ショットを参照してください。私の質問は、ループを使用したいので、すべての変数名と複数行を記述する必要はありません.ループを使用して次の解決策を達成するにはどうすればよいですか?

ここに画像の説明を入力

これは送信後の出力です。

ここに画像の説明を入力

これがindex.phpのコードです

<html>
<body>

<form action="welcome.php" method="post">
Build File: <input type="text" name="1bname">
WAR File: <input type="text" name="1wname">
Study: <input type="text" name="1study">
Bug: <input type="text" name="1bug">

<br>
Build File: <input type="text" name="2bname">
WAR File: <input type="text" name="2wname">
Study: <input type="text" name="2study">
Bug: <input type="text" name="2bug">

<input type="submit">
</form>

</body>
</html>

ここにwelcome.phpがあります

<html>
<body>

<pre>{ ignore(FAILURE) { build( "Deploy",  BUILDFILE: "<?php echo $_POST["1bname"]; ?>", WARFILE: "<?php echo $_POST["2wname"]; ?>", STUDY: "<?php echo $_POST["1study"]; ?>", BUG: "<?php echo $_POST["1bug"]; ?>" )}},


<pre>{ ignore(FAILURE) { build( "Deploy",  BUILDFILE: "<?php echo $_POST["2bname"]; ?>", WARFILE: "<?php echo $_POST["2wname"]; ?>", STUDY: "<?php echo $_POST["2study"]; ?>", BUG: "<?php echo $_POST["2bug"]; ?>" )}},

</body>
</html>
4

6 に答える 6

8

あなたの最善の選択肢は、次のように配列を使用することです。

<input type="text" name="bname[]" />
<input type="text" name="wname[]" />
<input type="text" name="study[]" />
<input type="text" name="bug[]" />

次に、単純なループでそれらすべてを処理できます。

<?php $count = count($_POST['bname']);
for ($i = 0; $i < $count; $i++) { ?>
  <pre>{ ignore(FAILURE) { build( "Deploy",  BUILDFILE: "<?php echo $_POST["bname"][$i]; ?>", WARFILE: "<?php echo $_POST["wname"][$i]; ?>", STUDY: "<?php echo $_POST["study"][$i]; ?>", BUG: "<?php echo $_POST["bug"][$i]; ?>" )}}
<?php } ?>
于 2013-05-17T14:30:57.920 に答える
1

入力の配列を定義して、welcome.php でforeachループを使用しました。

<html>
<head>
    <script language="javascript">
        fields = 0;
        function addInput() {
            var con = document.getElementById('text');
            if(fields != 10)
            {
                con.insertAdjacentHTML('beforeend', "Build File: <input type=\"text\" name=\"bname[]\">WAR File: <input type=\"text\" name=\"wname[]\">Study: <input type=\"text\" name=\"study[]\">Bug: <input type=\"text\" name=\"bug[]\"><br />");
                fields += 1;
            }
            else
            {
                con.insertAdjacentHTML('beforeend', "<br />Only 10 instances allowed.");
                document.form.add.disabled=true;
            }
        }
    </script>
</head>
<body>

<form action="welcome.php" method="post" name="form">
    Build File: <input type="text" name="bname[]">
    WAR File: <input type="text" name="wname[]">
    Study: <input type="text" name="study[]">
    Bug: <input type="text" name="bug[]">

    <br />
    Build File: <input type="text" name="bname[]">
    WAR File: <input type="text" name="wname[]">
    Study: <input type="text" name="study[]">
    Bug: <input type="text" name="bug[]">
    <br />
    <div id="text">
</div>
<input type="submit" value="Submit">
<input type="button" onclick="addInput()" name="add" value="Add more inputs" />
</form>

</body>
</html>

そして、welcome.php で:

<html>
<body>
<?php foreach($_POST['bname'] as $id => $value) { ?>
<pre>{ ignore(FAILURE) { build( "Deploy",  BUILDFILE: "<?php echo $_POST["bname"][$id]; ?>", WARFILE: "<?php echo $_POST["wname"][$id]; ?>", STUDY: "<?php echo $_POST["study"][$id]; ?>", BUG: "<?php echo $_POST["bug"][$id]; ?>" )}},</pre>
<?php } ?>
</body>
</html>
于 2013-05-17T14:39:04.400 に答える
1

billyonecan の答えは正しいですが、説明があまりないので、例をいくつか追加します。

次のような HTML フォームを想像してください。

<form method="POST">
    <input type="text" name="first_name[]" />
    <input type="text" name="first_name[]" />
    <input type="text" name="first_name[]" />
</form>

これは、これを行ったかのように、配列として php に渡されます。

$_POST['first_name'] = array("thomas", "billy", "jeoff");

したがって、この配列をループしてさまざまな値を取得できます。

foreach($_POST['first_name'] as $name){
    echo $name."<br />"; // this will print a list of names
}

明らかにこれらのプリンシパルを使用して、特定のケースに使用できます。:)

HTH

于 2013-05-17T14:36:33.107 に答える
0

すべての入力領域の前に数値IDがあることがわかりました。次のことができます。

<?php
$totalRow=2;
for($i=0, $i<$totalRow,$i++)
{
?>
<pre>{ ignore(FAILURE) { build( "Deploy",  BUILDFILE: "<?php echo $_POST[$i."bname"]; ?>", WARFILE: "<?php echo $_POST[$i."wname"]; ?>", STUDY: "<?php echo $_POST[$i."study"]; ?>", BUG: "<?php echo $_POST[$i."bug"]; ?>" )}},

<?php
}

?>
于 2013-05-17T14:36:43.263 に答える
0

おそらく、あなたが達成しようとしていることを気にするので、array() メソッドを使用する方が良いでしょうか?

于 2013-05-17T14:34:04.177 に答える
0

ビリオネカンの答えを拡張すると、サーバー側のスクリプトは次のようになります。

$bname_array = $_POST['bname'];
$wname_array = $_POST['wname'];
$study_array = $_POST['study'];
$bug_array = $_POST['bug'];

for($i=0; $i<count($bname_array); $i++){

// your code

}
于 2013-05-17T14:36:18.870 に答える