<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
代码正确的选项
答案 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。您可以使用isset
或array_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 !== '') {
但我建议: