正在从表单操作中的输入插入变量


Inserting variable from input in form action

我有一个表单,它向用户查询他想要查看的列表类型。当按下提交按钮时,我希望能够在地址中显示值listtype,这样我就可以使用GET方法访问它,例如更改正在显示的列表的页面。在这个表单中,我尝试了以下代码:

<?php
    echo '<form method=post action="index.php?operacao=checkList&number=1&pagesize=10&listtype=', $_GET['listtype'] ,'" name="listForm">
    <ol>
        <li><label for="listtype">Type:</label>
        <select name="listtype">
        <option value="default">Select</option>
        <option value="doctor">Doctor</option>
        <option value="nurse">Nurse</option>
        <option value="patient">Patient</option>
        </select></li>
        <div id="form-button">
            <li><input type="submit" value="Submit" onclick="javapopup();"></li>
        </div>
    </ol>
    </form>';
?>

尽管,当我打开表单时,我收到一个错误,说变量listtype没有定义。我该如何解决这个问题?

$_GET['listtype']不会在您第一次加载此页面时设置,这就是您出现此错误的原因。在使用它之前,您需要检查它是否已设置,如果没有,则在这种情况下不要使用它。在您的情况下,因为表单设置为POST,它将永远不会填充$_GET超全局,这将导致此错误永远不会消失。

echo '<form method=post action="index.php?operacao=checkList&number=1&pagesize=10&listtype=', $_GET['listtype'] ,'" name="listForm">

可能应该类似于这样的东西:

$listype = (isset($_POST['listtype'])) ? $_POST['listtype'] : '';
echo '<form method=post action="index.php?operacao=checkList&number=1&pagesize=10&listtype=', $listype ,'" name="listForm">

仅供参考,在代码中使用原始$_GET$_POST变量的方式会使您极易受到跨站点脚本攻击。所以无论如何都应该清除这个变量。

$listype = (isset($_POST['listtype'])) ? htmlspecialchars($_POST['listtype']) : '';
echo '<form method=post action="index.php?operacao=checkList&number=1&pagesize=10&listtype=', $listype ,'" name="listForm">