Условное заявление PHP? - PullRequest
0 голосов
/ 13 июня 2018

Во-первых, я хотел бы сказать, что я не лучший разработчик PHP.При этом я хотел бы получить некоторый вклад в мой код.Я потратил час, пытаясь заставить это работать, и я наконец получил это, но я хотел бы знать, является ли это лучшим способом сделать это.Я спрашиваю сообщество, потому что я пытаюсь стать лучшим разработчиком.

Я создаю форму поиска, которая использует метод POST для отправки значений на страницу поиска.Затем эта страница принимает значения, проверяет условные операторы и обновляет запрос на основе результатов.

Вот мой код.

Код формы поиска

echo '<form method="post" class="cat-search" action="'.esc_url( home_url( '/search' ) ).'" role="search" >
            <div class="gender-fields">
                <span class="label-wrap">
                    <input type="radio" name="gender" value="male" id="male">
                    <label for="male">Male</label>
                </span>
                <span class="label-wrap">
                    <input type="radio" name="gender" value="female" id="female">
                    <label for="female">Female</label>
                </span>
                <span class="label-wrap">
                    <input type="radio" name="gender" value="" id="both">
                    <label for="both">Both</label>
                </span>
            </div>
            <select class="cat-letters" name="letter">
             <option value="">Search by letter</option>';
            foreach ( $categories as $category ) {
                echo'<option value="'.$category->slug.'">'.$category->name.'</option>';
            }
            echo '</select>
            <input class="search-submit" value="Search" type="submit" />
        </form>';

Условный код страницы поиска

$let = esc_html($_POST["letter"]);
$gen = esc_html($_POST["gender"]);


if ( !empty($_POST["gender"]) && !empty($_POST["letter"])) {
    $cat_array = array($let,$gen);
    $cat_string = implode("+", $cat_array);
} else if ( empty($_POST["gender"] ) ) {
    $cat_string = $let;
} else {
    $cat_string = $gen;
}

Сначала я попытался использовать функцию isset() вместо empty(), но просто не смог заставить ее работать.

Этоправильный способ сделать это, или есть лучший способ достичь тех же результатов?

* У меня никогда не было проблем с формой, проблема была с условными утверждениями.

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Рекомендуется избегать непосредственного использования глобальных переменных, вместо этого получить временную переменную.

$post = $_POST;
$let = esc_html(isset($post['letter']) ? $post['letter'] : '');

В PHP 7 вы можете использовать оператор ??, не нужно проверять неопределенный индекс:

$let = esc_html($post['letter'] ?? '');

Также используйте (одинарные) '' сверх (двойные) "" кавычки, где это возможно, и проверяйте пробелы, обрезая

До PHP 7:

$post = $_POST;
$cat_array = array();
foreach(array('letter','gender') as $field){
    if(isset($post[$field]) && trim(esc_html($post[$field]))){
       array_push($cat_array,esc_html($post[$field]));
    }
}
$cat_str = implode('+',$cat_array);
  1. Почему вы добавили trim () в операторе if?

Что если пользователь вводит только пробелы?Ваш код позволит это, и это побеждает процесс проверки.

Как получается, что если выбрано только одно поле, функция разваливания не добавляет + в конце?Это потому, что это массив?

Да, implode() объединит / объединит два или более элементов массива.

0 голосов
/ 13 июня 2018

Прежде всего, не рекомендуется писать содержимое HTML с использованием PHP.Попробуйте отделить HTML-код от PHP в HTML-форме следующим образом.

<form method="post" class="cat-search" action="<?php echo esc_url(home_url( '/search' ));?>" role="search" >
            <div class="gender-fields">
                <span class="label-wrap">
                    <input type="radio" name="gender" value="male" id="male">
                    <label for="male">Male</label>
                </span>
                <span class="label-wrap">
                    <input type="radio" name="gender" value="female" id="female">
                    <label for="female">Female</label>
                </span>
                <span class="label-wrap">
                    <input type="radio" name="gender" value="" id="both">
                    <label for="both">Both</label>
                </span>
            </div>
            <select class="cat-letters" name="letter">
             <option value="">Search by letter</option>
             <?php foreach ( $categories as $category ) { ?>
                <option value="<?php echo $category->slug;?>"><?php echo $category->name;?></option>
            <?php } ?>
            </select>
            <input class="search-submit" value="Search" type="submit" />
        </form>

А затем условный код страницы поиска

$let = trim(esc_html($_POST["letter"]));
$gen = trim(esc_html($_POST["gender"]));


if ($let != "" && $gen != "") {
    $cat_array = array($let,$gen);
    $cat_string = implode("+", $cat_array);
} else if ($let != "") {
    $cat_string = $let;
} else {
    $cat_string = $gen;
}
0 голосов
/ 13 июня 2018

Я бы просто рекомендовал использовать isset здесь

$let = esc_html(isset($_POST["letter"]) ? $_POST['letter'] : '');
$gen = esc_html(isset($_POST["gender"]) ? $_POST['gender'] : '');

Таким образом, у вас нет ошибок PHP, если не получены буквенные и половые параметры;)

Подробнее об операторах ternay здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...