我有一个表单,它向用户查询他想要查看的列表类型。当按下提交按钮时,我希望能够在地址中显示值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">