使用" 0"搜索php被认为是空的

时间:2015-06-27 11:12:35

标签: php mysql ajax select pdo

<div class="input-group input-group-lg col-md-6 col-xs-offset-3">
                <span class="input-group-addon">Username</span>
                <asp:TextBox runat="server" ID="txtUserId" 
CssClass="form-control" aria-describedby="sizing-addon1"></asp:TextBox>
            </div>
            <br />

 <div class="input-group input-group-lg col-md-6 col-xs-offset-3">
                <span class="input-group-addon">Password</span>
                <asp:TextBox runat="server" ID="txtPassword" 
CssClass="form-control" aria-describedby="sizing-addon1" TextMode="Password"></asp:TextBox>
            </div>
            <br />

<asp:Button ID="btnLogin" runat="server" CssClass="btn btn-danger btn-lg
 col-md-2 col-xs-offset-5" Text="Login" OnClick="btnLogin_Click" />

这是我的选择html,我得到像

这样的值
<select id="casenature" name="" class="InputBox">
  <option></option>
  <option value="0">Criminal</option>
  <option value="1">Civil</option>
</select>

我通过ajax发送到php。我在php中收到它

var casenature = $("#casenatureoption:selected").val();

当我试图回应价值时,他们没事。我得到$casenature = $_POST['casenature']; 1,具体取决于所选的选项

0

我的问题是,当我选择if (!empty($casenature)) { $q .= "t1.case_nature LIKE :casenature"; $stmt = $dbh->prepare($q); $stmt->bindValue(':casenature', "%" . $casenature . "%", PDO::PARAM_STR); }else{ echo "Empty"; } 的选项时,为什么我会变空?如果我选择value 0代码正确的选项

4 个答案:

答案 0 :(得分:0)

使用isset而不是!empty然后告诉我发生了什么

if (isset($casenature)) {
     $q .= "t1.case_nature LIKE :casenature";
     $stmt = $dbh->prepare($q);
     $stmt->bindValue(':casenature', "%" . $casenature . "%", PDO::PARAM_STR);
}else{
      echo "Empty";
}

更新: 以下内容被认为是空的:

"" (an empty string)

0 (0 as an integer)

"0" (0 as a string)

NULL

FALSE

array() (an empty array)

var $var; (a variable declared, but without a value in a class)
来自manual的示例编号1的

将清楚地告知if (isset($var)) {将被使用

UPDATE

使用@jeroen解释我建议使用以下条件。

$casenature === '0' || $casenature === '1'

答案 1 :(得分:0)

这是空的正确行为,请参阅the manual page。您可以使用issetarray_key_exists来检查是否存在值。

因为总是设置$casenature,所以你可能会有更多的运气:

if ($casenature || $casenature === '0') {
     $q .= "t1.case_nature LIKE :casenature";
     $stmt = $dbh->prepare($q);
     $stmt->bindValue(':casenature', "%" . $casenature . "%", PDO::PARAM_STR);
} else {
      echo "Empty";
}

在PHP(和JavaScript)中使用tripple equals ===意味着“完全等于”。这将检查类型及其松散值。因此,例如'1' !== 1,字符串'1'并不完全等于整数1,即使它们是松散相等的,因为一个是字符串,一个是整数。 PHP和JavaScript都是松散类型的语言,因为这在互联网上更有价值,因为通常你收到的所有东西都缺少类型信息,因此被认为是字符串。

我从未发现empty在实际应用程序中有用,因为它与将表达式计算为false几乎完全相同。

答案 2 :(得分:0)

您需要避免自动类型转换问题(0 == false == '' == null等),因此您需要检查以下两项内容:

  • 查看是否设置了$_POST['casenature'] /提交的表单是否包含变量;
  • 如果是,$_POST['casenature']将是一个字符串,因此您可以使用strlen()来查看字符串的长度是否大于0

您当然也可以确保您商品的ID从1开始,而不是0,如果ID来自的话可能就是这种情况数据库。

答案 3 :(得分:0)

$string = '0';
var_dump(empty($string)); // boolean true

替换

if (!empty($casenature)) {

if ($casenature !== '') {

但我建议:

  1. 查看http://php.net/manual/en/types.comparisons.php
  2. 使用序列1,2,3 ...而不是0,1,2 ...