PHP条件语句?

时间:2018-06-13 03:17:28

标签: php forms if-statement

首先,我想说我不是最优秀的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 :(得分:1)

我建议在这里使用isset

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

因此,如果没有收到字母和性别参数,您就不会有任何PHP错误;)

详细了解ternay运营商here

答案 1 :(得分:1)

最好避免直接使用GLOBAL变量,而是获取临时变量。

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

使用PHP 7,您可以使用operator ??,无需检查未定义的索引:

$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. 为什么在if语句中添加trim()?
  2.   

如果用户只输入空格怎么办?您的代码将允许它,并且会破坏验证过程。

  
      
  1. 如果只选择一个字段,内爆函数最后不会添加+,怎么办?是因为它是一个阵列吗?
  2.   

是的,implode()将加入/连接两个或多个数组元素。

答案 2 :(得分:1)

首先,使用PHP编写HTML内容不是一个好习惯。尝试在HTML表单中将HTML与PHP分开,如下所示。

<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;
}