在PHP中使用2个下拉列表更改行数和列数

时间:2013-04-18 10:54:15

标签: php html variables html-select

首先,我想说我是PHP的新手,所以也许这是一个愚蠢的问题,但我们去了: 我有两个下拉选择标记,在html和php中包含以下代码:

     <select>
        <option value="default">---a---</option>
        <?php for($i=1; $i<+100; $i++) { ?>
                <option value="<?php $i ?>"><?php echo $i ?></option>
        <?php } ?>
     </select>

     <select>
        <option value="default">---b---</option>
        <?php for($j=1; $j<=100; $j++) { ?>
                <option value="<?php $j ?>"><?php echo $j ?></option>
        <?php } ?>
     </select>

然后我有一个有一行和一列的表(至少我必须改变一下):

    <table>
                <tr>
                    <th>Date</th>
                    <th>Temp</th>
                    <th>Nr a</th>
                    <th colspan="2">a 1</th>
                    <!--another th___nr a-->
                </tr>
                <tr>
                    <td colspan="3"> </td>
                    <th>something</th>
                    <th>else</th>
                    <!--another something else___nr a-->
                </tr>
                <tr>
                    <td>
                        <?php
                            //echo date(DATE_RFC822);
                            echo date('jS\, F\, Y');
                        ?>
                    </td>
                    <td>
                        <input type="number" name="temp" placeholder="temp" />
                    </td>
                    <th>b 1</th>
                    <td>
                        <input type="number" name="something" placeholder="something" />
                    </td>
                    <td>
                        <input type="number" name="else" placeholder="else" />
                    </td>
                    <!--another td___nr a-->
                </tr>
                <!--another tr___nr b-->
            </table>

我想要做的是用第一个下拉列表来控制一个(列)的数量,用第二个下拉列表来表示b(行)的数量。 这有可能用PHP,如果是,怎么样?

我在考虑以某种方式记住我们在下拉列表中选择的数字以及一些用于解决它的问题,但我不知道如何做到这一点,如果可能的话

非常感谢您抽出时间帮助我:)

1 个答案:

答案 0 :(得分:1)

PHP是服务器端语言,因此您必须将(a)和(b)输入发送回服务器,然后使用PHP构建可用于在页面上生成所需表的相关数据

<form action="index.php" method="post">
    <!--put your select elements here-->
    <select name="columns"></select>
    <select name="rows"></select>
    <input type="submit" />
</form>

然后在PHP文件的顶部,如

<?php
    // using terniary operator here - you can google that
    // basically ensures the vars are set to 1 if there is no post from the form
    $columns = (isset($_POST['columns'])) ? $_POST['columns'] : 1;
    $rows = (isset($_POST['rows'])) ? $_POST['rows'] : 1;
?>

然后在你的表中

<table>
    <?php foreach ($rows as $row):?>
        <tr>
            <?php foreach ($columns as $column):?>
            <td></td>
            <?php endforeach;?>
        </tr>
    <?php endforeach;?>
</table>

你可以像Dieter用Ajax建议的那样增强它,但对于纯PHP,你需要这样的东西。

它是一个非常基本的例子,除了生成一个包含X列和Y行的空HTML表格之外,还需要充实它。

编辑:这是一个应该有效的完整文件。只需将代码保存在此行下方即test.php并尝试一下。然后你可以修改它以完全满足你的需要 对不起,我也犯了一个小错误,我忘了把发布的数据转换成可以在foreach循环中使用的范围。这已在下面更正

<?php
// test.php

    // using terniary operator here - you can google that
    // basically ensures the vars are set to 1 if there is no post from the form
    $c = (isset($_POST['columns'])) ? $_POST['columns'] : 1;
    $r = (isset($_POST['rows'])) ? $_POST['rows'] : 1;

    $columns = range(1, $c);
    $rows = range(1, $r);

?>


<form action="test.php" method="post">
    <!--put your select elements here-->
    <select name="rows">
        <option value="default">---a---</option>
        <?php for($i=1; $i<+100; $i++) { ?>
                <option value="<?php echo $i ?>"><?php echo $i ?></option>
        <?php } ?>
     </select>

     <select name="columns">
        <option value="default">---b---</option>
        <?php for($j=1; $j<=100; $j++) { ?>
                <option value="<?php echo $j ?>"><?php echo $j ?></option>
        <?php } ?>
     </select>
    <input type="submit" />
</form>

<table>
    <tr>
        <?php foreach ($columns as $column):?>
        <th>Temp Head</th>
        <?php endforeach;?>
    </tr>
    <?php foreach ($rows as $row):?>
    <tr>
        <?php foreach ($columns as $column):?>
        <td>Temp Data</td>
        <?php endforeach;?>
    </tr>
    <?php endforeach;?>
</table>