我有一个表单,用于询问用户他想要查看的列表类型。当按下提交按钮时,我希望能够在地址中显示值列表类型,以便我可以使用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
未定义。我该如何解决这个问题?
答案 0 :(得分:2)
$_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">