我有一个customerDetails.php页面,它使用类似
的网址显示客户数据 localhost/customermanager/customerdetail.php?customerID=2 url.
您可以想象,我使用$_GET['customerID']
php代码获取customerID。现在,我有两个可以拒绝或批准客户的按钮。这些按钮位于同一页面上。所以我想要做的就是确定点击了哪个按钮并相应地执行更新查询。更新查询位于同一页面上,因此表单的操作设置为#或self。
问题是,当我单击按钮时,表单会提交,但是网址会更改为其他内容并删除customerID=2
部分。由于页面加载了客户的详细信息,因此无法在URL上找到customerID=2
部分,因此会产生错误。
那么有没有办法在一个表单上有两个按钮,并检测单击哪一个,然后在同一个表单上执行插入语句。
如果有更好的方法,我愿意尝试。
谢谢
答案 0 :(得分:0)
您可以在表单中包含customerID值作为附加(隐藏)输入字段:
<input type="hidden" name="customerID" value="2" />
这样,可以轻松地在页面之间传递值而不会丢失。您也可以使用会话变量。这两种方法都有利有弊。上述方法最简单。
有时,在脚本初始化时以集中但灵活的方式选择运行时参数会使事情变得更容易:
if ( FALSE=== ($customerID = ( isset($_POST['customerID'])
&& is_numeric($_POST['customerID']) )
? (int)$_POST['customerID']
: ( isset($_GET['customerID'])
&& is_numeric($_GET['customerID']) )
? (int)$_GET['customerID']
: NULL) )
throw Exception('No numeric customerID value specified at runtime');
此外,我经常实现一个客户异常类,它接受一些额外的细节,并在引发自定义日志文件时将其自身记录。这会将此类错误处理代码推送到单独的文件中,并使主代码保持干净和紧凑。
答案 1 :(得分:0)
我认为在按下第二个按钮时删除customerID是故意的。 在这种情况下,最简单的解决方案是做一个
if ( isset( $_GET['customer_id' ) ) {
/* process customer id part */
}
else
{
/* Second button part */
}
答案 2 :(得分:0)
始终使用isset()
例如:
if (isset($_GET['customerID'])) {
// do something.
}
当然,您希望代码整洁。所以你可以创建一个包装函数,如下所示:
function get($item) {
return (isset($_GET[$item]))? $_GET[$item] : false;
}
我认为您的问题是您在点击按钮时重新加载页面。因此,改为将输入类型设为submit
,而是使用button
。此外,当用户按下approve
或unapprove
时,使用隐藏的输入来存储您的值。
从那里,您可以将按钮绑定到事件处理程序(我们将使用click()):
HTML按钮和隐藏的输入:
<input type="button" id="approve" value="Approve" />
<input type="button" id="unapprove" value="Unapprove" />
<input type="hidden" id="selected" value="false" />
JavaScript处理程序:
document.getElementById('approve').onclick = function() {
document.getElementById('selected').value= true;
};
document.getElementById('unapprove').onclick = function() {
document.getElementById('selected').value= false;
};
现在您不需要重新加载页面(这可以节省服务器带宽和加载时间)。