PHP改进了我的显示消息功能

PHP改进了我的显示消息功能,php,get,user-defined-functions,Php,Get,User Defined Functions,如果可能的话,我想要一些帮助 我创建了两个函数,以便在重定向后设置$\u 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($_G

如果可能的话,我想要一些帮助

我创建了两个函数,以便在重定向后设置$\u 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;
}
函数显示(){
如果(isset($\u GET['cnf\u upd'])&&&$\u GET['cnf\u upd']='1'){
$value=“更新成功!”;
$type=“确认”;
构造div($value,$type);
}
如果(isset($\u-GET['err\u-upd'])&&&$\u-GET['err\u-upd']='1'){
$value=“更新失败。”;
$type=“error”;
构造div($value,$type);
}
如果(isset($\u GET['cnf\u del'])&&&$\u GET['cnf\u del']='1'){
$value=“已完全删除。”;
$type=“确认”;
构造div($value,$type);
}
如果(isset($\u GET['err\u del'])&&&$\u GET['err\u del']='1'){
$value=“无法删除。”;
$type=“error”;
构造div($value,$type);
}
}
函数构造\u div($value,$type){
//创建div以显示消息结果
$div=“\n”;
$div.=“{$value}

\n”; $div.=“\n”; echo$div; }
我想做的是尝试改进显示功能,因为它越来越长,所以如果可能的话,最多只有一个(或两个)if语句。因此GET的值将动态地在if条件中,如果它有preffix“cnf_uu”,它将是一个“confirmsg”,如果它有preffix“err_u”,它将是一个“errorMsg”


有可能做出这样的东西吗

我将提出一个不同的解决方案。与其在
$\u GET
中根据要发送的消息设置不同的参数,不如设置一个参数并解析其值

// Start by setting integer constants:
define(CNF_UPD, 1);
define(ERR_UPD, 2);
define(CNF_DEL, 3);
define(ERR_DEL, 4);
然后,当您设置值un
$\u GET
时,使用常数:

// Build the URL with a deletion error...
header("Location: http://example.com/script.php?msg=" . ERR_DEL);
最后,使用
开关来解析它们

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
模式,则可以通过取
$\u 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");

该方法不正确,似乎一次只能出现一条消息(不能同时出现“完全删除”和“无法删除”)。 试着这样构造参数:?msg=upd&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']));
}
还有很多地方需要改进,但对于start来说,这更干净、更安全。

函数显示(){
$messages=数组(
“cnf_upd”=>“更新成功!”,
'cnf_err'=>'更新失败。!',
// ...
//添加所有错误并确认
// ...
);
foreach($\u获取为$key=>$value){
if(strpos($key,'cnf')==0){
$type='confirm';
$value=isset($messages[$key])
?$messages[$key]
:$key;
构造div($value,$type);
}
if(strpos($key,'err_')==0){
$type='error';
$value=isset($messages[$key])
?$messages[$key]
:$key;
构造div($value,$type);
}
}
}

除非您可以基于$\u 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']);
    }
}

我不喜欢在获取参数时显示消息的方法。如果在url中键入,即使没有任何操作,也会显示消息。最好将消息保存在会话中,并在有消息时显示。因此,您还可以为每个操作保存自定义错误消息。谢谢!我已经测试过了,效果非常好!我认为这种方式更灵活,因此如果需要,您可以添加更多消息