我正忙于开发一个包含博客的网站。现在我想添加一个dev_mode检查。如果我正在编辑文章页面,则检查应返回"true",以便我可以发布类似"此页面当前正在编辑"之类的消息。请稍后再来。我只想要所有页面的一个功能,但它没有给我运气。
我目前的职能:
function development_mode($mysqli, $dev_blog=false, $dev_article=false, $dev_cv=false, $dev_contact=false, $dev_bio=false, $dev_cpanel=false, $get_development_status=false) {
$get_development_status = mysqli_query($mysqli,"SELECT * FROM global_settings") or die (mysqli_error($mysqli));
$status = mysqli_fetch_array($get_development_status);
$dev_blog = $status['dev_blog'];
$dev_article = $status['dev_article'];
$dev_cv = $status['dev_cv'];
$dev_contact = $status['dev_contact'];
$dev_bio = $status['dev_bio'];
$dev_cpanel = $status['dev_cpanel'];
if ($dev_blog == 'yes') {
return true;
} else {
return false;
}
if ($dev_article == 'yes') {
return true;
} else {
return false;
}
if ($dev_cv == 'yes') {
return true;
} else {
return false;
}
if ($dev_contact == 'yes') {
return true;
} else {
return false;
}
if ($dev_bio == 'yes') {
return true;
} else {
return false;
}
if ($dev_cpanel == 'yes') {
return true;
} else {
return false;
}
}
这就是我想在编辑文章页面时向访问者显示"稍后再来"消息的方式
if (development_mode($mysqli, $dev_article) == true) {
echo "This page is being edited. Come back later!";
die();
} else {
//Content
}
谢谢:)
对于除dev_blog
之外的设置,它不会按预期工作,因为它没有考虑您作为参数传递给它的值,在您的示例中$dev_article
。
无论您尝试传递给它什么,页面都将始终执行第一个if
if ($dev_blog == 'yes') {
return true;
} else {
return false;
}
并返回true
或false
,具体取决于查询返回的设置dev_blog
列。
照原样,执行永远不会继续检查$dev_article
、$dev_contact
、$dev_bio
或$dev_cpanel
,无论它们的值是什么或你尝试传递给development_mode()
函数的参数是什么。
溶液:
正确检查的一种方法是尝试如下操作,使用列的字符串索引调用函数:
if (development_mode($mysqli, 'dev_article') == true) {
然后在您的函数中具有:
function development_mode($mysqli, $status_column) {
$get_development_status = mysqli_query($mysqli,"SELECT * FROM global_settings") or die (mysqli_error($mysqli));
$status = mysqli_fetch_array($get_development_status);
$dev_status = $status[$status_column];
if ($dev_status == 'yes') {
return true;
} else {
return false;
}
}
这可以进一步优化以仅返回所需的列,因为您只关心该列,但您可以了解两者之间的不同之处。