2010-03-23 103 views
0

我使用PHP如果数据库在我的表中的条目被设置为只读,以“是”或“否”,自动检查所对应的单选按钮:为什么PHP不允许比较?

<?php include 'file.php'; 
$query = "SELECT * FROM TABLE"; 
$runquery = odbc_exec($connect,$query); 
$status= odbc_result($runquery,"status"); 
odbc_close($file); 
?> 
<form> 
<div class="formContainer"> 
    <fieldset> 
    <legend>Campus Alert<span class="tooltip">Turn campus alert on and off.</span></legend> 
     <?php echo $status; ?> 
     Yes <input type="radio" name="alertStatus" id="alertStatus" value="yes" <?php if($status== "yes") echo "checked";?>> 
     No <input type="radio" name="alertStatus" id="alertStatus" value="no" <?php if($status== "no") echo "checked";?>> 
    </fieldset> 
</div> 

<?php echo $status; ?>用于调试等等我可以确定数据库说什么,表单的反应是正确的。它打印“是”(不含引号)。但是,if语句不会回应。任何想法为什么这样做?

+0

你确定$ status =“yes”吗?你应该在第一行(在第一个单选按钮之前)看到“是的是”(没有引号)...... – 2010-03-23 15:14:38

+0

这正是我所看到的。这就是为什么它扔我。我可以看到$ status是回复“yes”,所以我知道我从数据库返回正确的东西,但if语句不喜欢它。 – dcp3450 2010-03-23 15:16:56

+0

尝试回显$状态==“是” – 2010-03-23 15:18:57

回答

3

您是否尝试过改变你的if语句像

<?php if(strtolower(trim($status)) == "yes") echo "checked";?> 
+0

修剪()做到了。 – dcp3450 2010-03-23 15:33:47

+1

“trim”这个事实意味着数据库字段中存在前导空白或尾随空白。可能值得研究这是从哪里来的。 – mikej 2010-03-23 16:14:04

+0

这就是为什么你必须用var_dump()而不是echo来调试 – 2010-03-23 16:35:27

0

哇,这真的很奇怪......问题不在于你的PHP。首先,您应该从这些字段中删除id属性。但真正的问题是,当Firefox名称为alertStatus时,似乎并不想检查第二个字段。如果你把名字改成别的东西,它似乎在起作用。我不确定这是为什么。

这里是我的测试代码:

<?php //include 'file.php'; 
//$query = "SELECT * FROM TABLE"; 
//$runquery = odbc_exec($connect,$query); 
//$status= odbc_result($runquery,"status"); 
//odbc_close($file); 
$status='no'; 
?> 
<form> 
<div class="formContainer"> 
    <fieldset> 
    <legend>Campus Alert<span class="tooltip">Turn campus alert on and off.</span></legend> 
     <?php echo $status; ?> 
     Yes <input type="radio" name="alertStatu" value="yes" <?php if($status== "yes") echo "checked";?>> 
     No <input type="radio" name="alertStatu" value="no" <?php if($status== "no") echo "checked";?>> 
    </fieldset> 
</div> 
+0

如果我通过执行$ status =“yes”或$ status =“no”将$ status设置为特定值,如yes或no,当我通过拉出数据库来设置值时,它只会中断。我进入了我的代码,除此之外没有任何改变,它可以工作。 – dcp3450 2010-03-23 15:29:33

+0

这不与该领域的具体名称有关,例如“alertStatus”。刷新页面时,Firefox会记住表单域中的以前的数据,并将表单恢复到此状态,覆盖HTML源代码中的“已检查”。您需要完全刷新(Ctrl + F5)。这就是为什么重命名该字段似乎有所帮助,因为Firefox没有为新名称记住的价值。 – mikej 2010-03-23 16:13:07

+0

哦...呃我想我失败了那一个XD。不过很高兴知道,因为这没有任何意义。感谢您指出> _ < – Chibu 2010-03-23 19:07:24

0

如果你看一下页面的源代码,你会看到check实际上是有。但是,您有一个重复的ID并且浏览器越来越困惑。替换:

Yes <input type="radio" name="alertStatus" id="alertStatus" ....> 
No <input type="radio" name="alertStatus" id="alertStatus" .....> 

Yes <input type="radio" name="alertStatus" id="alertStatus:yes" ....> 
No <input type="radio" name="alertStatus" id="alertStatus:no" .....> 

,它会解决。

1

对您的$status使用“是/否”不是很好的做法,您最好使用intboolean值。