PHP IF ELSE - 如果似乎被忽略了?

时间:2011-04-04 19:42:45

标签: php mysql html

我是一个PHP菜鸟,所以很抱歉,如果这是一个愚蠢的问题,但我不能自己解决这个问题,所以任何帮助将不胜感激!

我正在尝试为事件Web应用程序创建修改页面。它似乎工作,除非我尝试验证最终的if / else语句。 此语句返回$ row [0]的值并检查其== NULL。如果为NULL,它应该向用户返回一个echo'this event not exists',如果有一个值,它会向用户显示一个文本框矩阵,他们可以更改数据。

目前,当找到数据时,它适用于else语句,但如果没有数据,则无法识别原始语句。再加上这一点,页面底部的页脚消失了!

这是代码的主体,我突出了问题区域。我知道可能有一种更有效,更有效的方法,但请保持简单,因为我还在学习。再次感谢。丹

<div class="round">
<div id="main" class="round">

<span class="bold">MODIFY EVENT</span><br /><br />
On this page you can modify or delete the events that are stored on the database.<br />
Be aware that you cannot undo the DELETE function.<br />
<br />
Find Event:<br />
<table>
<form name="form1" id="form1" method="post" action="
<?php echo $_SERVER["PHP_SELF"]; ?>" >
<tr><th>By Date:</td><td><input type="text" name="modifyDate" 
id="modifyDate" value="dd/mm/yy" /></td></tr>
<tr><th>By Name:</td><td><input type="text" name="modifyName" id="modifyName" 
value="" /></td></tr>
<tr><th>Find All:</th><td><input type="checkbox" name="modifyAll" 
id="modifyAll" /><td></tr>
<tr><td></td><td><input type="submit" name="submit" value="Search" /></td></tr>
</form>
</table>

<?PHP


if(!isset($_POST['modify'])){

    if(isset($_POST['submit'])){

    $moddate = $_POST['modifyDate'];

            If($moddate == "dd/mm/yy"){
        $date = "";
    }
    else{
        $newDate = str_replace("/",".",$moddate);
        $wholeDate = $newDate;
        $dateArray = explode('.', $wholeDate);
        $date = mktime(0,0,0,$dateArray[1],$dateArray[0],$dateArray[2]);
    }

    $name = $_POST['modifyName'];
    $all  = $_POST['modifyAll'];

    $host = "localhost";
    $user = "user";
    $password = "password";
    $db = "database";

    $con = mysql_connect($host,$user,$password) or die('Could not connect to Server');
    $dbc = mysql_select_db($db, $con) or die('Could not connect to Database');

    if($all != 'on'){
        $q = "SELECT * FROM events WHERE date = '$date' || title = '$name' ";
    }
    else{
        $q = "SELECT * FROM events";
    }

    $result = mysql_query($q);
    $row = mysql_fetch_array($result) or die(mysql_error());    

//这就是问题!!!!

    if($row[0]==NULL){ 
        echo 'This event does not exist';
    }
    else{
        ?>

        <form name="form1" id="form1" method="post" action="
                    <?phpecho $_SERVER['PHP_SELF']; ?>" >
    <?PHP               

        $result = mysql_query($q) or die(mysql_error());

        while ($row = mysql_fetch_array($result)){

            $initialDate = date('d/m/y', $row['date']);
            $ID = $row['ID'];

            echo '<input type="text" name="inputEmail" id="inputEmail"  value="'.$initialDate.'" />';

            echo '<input type="checkbox" value=$ID name="toModify[]" style = "visibility: hidden;" /><br /><br />';

        }
        echo '<input type="submit" name="modify" value="Modify" />
                            <br /><br />';
    }
}
}
else{
    //modify database and return echo to user
}
?>


</div>
<div id="clear"></div>
</div>


</div>
</div>
<div id="footer" class="round shadow"></div>

</body>
</html>

3 个答案:

答案 0 :(得分:4)

如果没有行,

mysql_fetch_array($result)会返回false,因此即使结果中没有任何内容,它仍然可以返回false而您的if($row[0] == null)是评估为假,也是。

换句话说,您应该对查询的返回结果进行更强大的测试,以捕获边缘情况。

正如其他人提到或暗示的那样,以下是您可以/应该做的一些事情:

  • 测试返回的行,而不是行中的值
  • 测试是否存在变量,而不是变量的内容
  • 检查数据库是否返回错误

答案 1 :(得分:0)

表中的字段是否将$ row [0]从set设置为NOT NULL?如果是,它将永远不会是空值。尝试改为(如果为空($ row [0]))

答案 2 :(得分:0)

您可以检查结果行数以查看是否有任何事件:

$result = mysql_query($q);
$numrows = mysql_num_rows ($result);
if($numrows === 0){
...