2014-11-01 3 views
0

Я занят разработкой веб-сайта, на котором включен блог. Теперь я хотел бы добавить проверку dev_mode. Если я редактирую страницу статьи, проверка должна возвращать «true», поэтому я могу опубликовать сообщение типа «Эта страница в настоящее время редактируется. Пожалуйста, вернитесь позже'. Я хочу, чтобы только одна функции для всех страниц, но это никогда дает мне не повезло ..глобальные настройки php function

Моей текущая функция:

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 
} 

Спасибо :)

+0

Извините, мы не можем _guess_ логику, которую вы хотите реализовать. Вы должны добавить дополнительные сведения к своему вопросу. Но что поражает на первый взгляд: код после первого оператора if/else будет выполняться _never_, так как функция _always_ возвращается внутри этого оператора. Либо предоставление истины, либо ложь, но оно никогда не будет продолжать действовать дальше. – arkascha

ответ

1

Он не будет работать так, как ожидалось, для настроек, кроме 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; 
    } 
} 

thi s может быть еще больше оптимизирован, чтобы вернуть только нужный столбец, так как вы заботитесь только об этом, но вы понимаете, что отличает их.

+0

Я этого не знал .. Кажется, мне нужно создать для каждой страницы функцию, не так ли? Спасибо за ваш ответ и объяснение. Оценил! – user3723069

+0

Не беспокойтесь, я обновил ответ с помощью быстрого примера того, как вы могли бы реализовать это решение. – Kypros

+1

Удивительно, получилось! Спасибо! – user3723069

Смежные вопросы