也许我从一开始就做错了,如果是这样的话,我也会这样做......
我有一个菜单项,作为URL的一部分传递事件ID#.在我的特定情况下,它将用户带到该事件的信息页面.然后有一个按钮,让他们注册参加活动.点击它们并注册参加活动并返回到相同的信息页面,现在它们已经注册并让他们看到一些额外的东西.
当他们第一次点击页面时,我使用$ _GET来计算事件ID#,如果他们点击注册按钮作为隐藏输入字段,则将其传递回页面.但这次我需要使用$ _POST来计算事件ID#.所以我的查询中的代码有一个布尔部分,看起来像
SELECT stuff FROM ... WHERE eventID = ($_GET["ID"] ? $_GET["ID"] : $_POST["ID"])
Run Code Online (Sandbox Code Playgroud)
它有效,但感觉它可以做得更好......
mysql_real_escape_string()是一种快速简便的方法(或者,如果ID始终是数字,您可以使用intval()).不要像Bobby Tables那样倒下的学校.$_REQUEST包含GET和POST变量的超全局(例如:) $_REQUEST['ID'].我通常不使用$_REQUEST,因为我想清楚我的数据来自哪里,但这将是一个完美的使用它的情况.正如Nick Presta指出的,$_REQUEST还包括cookie变量,事实上,名称冲突的默认*优先顺序是$_COOKIE,$_POST然后$_GET.鉴于此,在将数据插入查询之前,您可以执行您现在正在执行的操作,也可以使用$_SERVER['REQUEST_METHOD']:
// You can use mysql_real_escape_string() instead if you want
$id = ($_SERVER['REQUEST_METHOD'] == 'POST') ? intval($_POST['id']) : intval($_GET['id']);
Run Code Online (Sandbox Code Playgroud)
此外,正如outis所指出的,请记住,您可以选择使用预准备语句而不仅仅是原始SQL查询.
* - 正如Stewart在评论中提到的那样,可以通过variables_order配置指令配置排序.