如果可能的话,我想要一些帮助。
我创建了两个函数,以便在重定向后设置$ _GET时显示一些消息。这是代码:
function display(){
if(isset($_GET['cnf_upd']) && $_GET['cnf_upd'] == '1'){
$value = "The update was successful!";
$type = "confirm";
construct_the_div($value, $type);
}
if(isset($_GET['err_upd']) && $_GET['err_upd'] == '1'){
$value = "The Update failed.";
$type = "error";
construct_the_div($value, $type);
}
if(isset($_GET['cnf_del']) && $_GET['cnf_del'] == '1'){
$value = "Deleted completely.";
$type = "confirm";
construct_the_div($value, $type);
}
if(isset($_GET['err_del']) && $_GET['err_del'] == '1'){
$value = "Unable to delete.";
$type = "error";
construct_the_div($value, $type);
}
}
function construct_the_div($value, $type){
// creating a div to display the message results
$div = "<div class=\"{$type}Msg\">\n";
$div .= "<p>{$value}</p>\n";
$div .= "</div><!-- end of {$type}Msg -->\n";
echo $div;
}
我想做的是尝试改进显示功能,因为它变得越来越长,如果可能的话,只有一个(或最多两个)if语句。因此,GET的值将动态地位于if条件内,如果它具有前缀'cnf_',它将是'confirmMsg',如果它具有前缀'err_',它将是'errorMsg'。
是否可以制作这样的东西?
答案 0 :(得分:1)
function display() {
$messages = array(
'cnf_upd' => 'The update was successful!',
'cnf_err' => 'The Update failed.!',
// ...
// add all error and confirm there
// ...
);
foreach($_GET as $key => $value) {
if(strpos($key, 'cnf_')===0) {
$type = 'confirm';
$value = isset($messages[$key])
? $messages[$key]
: $key;
construct_the_div($value, $type);
}
if(strpos($key, 'err_')===0) {
$type = 'error';
$value = isset($messages[$key])
? $messages[$key]
: $key;
construct_the_div($value, $type);
}
}
}
答案 1 :(得分:0)
我打算提出一个不同的解决方案。不是根据要发送的消息在$_GET
中设置不同的参数,而是设置一个参数并解析其值。
// Start by setting integer constants:
define(CNF_UPD, 1);
define(ERR_UPD, 2);
define(CNF_DEL, 3);
define(ERR_DEL, 4);
然后,当您设置值un $_GET
时,请使用常量:
// Build the URL with a deletion error...
header("Location: http://example.com/script.php?msg=" . ERR_DEL);
最后,使用switch
解析它们
if (isset($_GET['msg'])) {
switch ($_GET['msg']) {
case CNF_UPD:
// Updated...
break;
case ERR_UPD:
// failed...
break;
// etc...
default:
// invalid code.
}
}
如果对整数常量使用confirm/error/confirm/error
模式,则可以通过$_GET['msg'] % 2
确定它是什么。奇数是确认,平均是错误。当然还有许多其他方法可以解决这个问题,我恰好按照您使用的交替顺序输入了它们。例如,您也可以为确认和误差做正整数。
$type = $_GET['msg'] % 2 == 1 ? $confirm : $error;
这很容易扩展为使用多条消息。由于它们是整数值,因此您可以安全地构建逗号分隔列表,并在收到它们时explode()
。
$messages = implode(array(ERR_DEL,CNF_UPD));
header("Location: http://example.com/script.php?msg=$messages");
答案 2 :(得分:0)
方法不正确,似乎一次只能发生一条消息(不能一次“完全删除”和“无法删除”)。 尝试以这种方式构造参数:?msg = upd&amp; msgType = cnf
function display(){
if (isset($_GET['msg']) && isset($_GET['msgType']))
{
$messages = array('cnf_upd'=>'The update was successful!',
'err_upd'=>'The update failed!',
'cnf_del'=>'The deletion was successful!',
'cnf_upd'=>'The deletion failed!',
);
if (isset($messages[$_GET['msgType'].'_'.$_GET['msg']))
construct_the_div($messages[$_GET['msgType'].'_'.$_GET['msg']], htmlspecialchars($_GET['msgType']));
}
还有很多需要改进的地方,但一开始这个更清洁,更安全。
答案 3 :(得分:0)
除非你能以某种方式根据$ _GET参数生成$ value和$ type(我不知道你会怎么做),你可以这样做:
$messages = array();
$messages[] = array('id' => 'cnf_upd', 'value' => 'The update was successful!', 'type' => 'Confirm');
$messages[] = array('id' => 'err_upd', 'value' => 'The Update failed.', 'type' => 'error');
...
foreach ($messages as $message) {
if(isset($_GET[$message['id']]) && $_GET[$message['id']] == '1'){
construct_the_div($message['value'], $message['type']);
}
}