为什么php'if语句'没有给出预期的结果?

时间:2015-10-31 12:13:46

标签: php ajax

我正在使用AJAX和PHP设计一个php应用程序。 但我的php文件中的if语句出乎意料。 请求方法是'POST'; Ajax代码是

        function fetchData(){
            var recipename = document.getElementById("recipe").value;
            var calorie = false;
            createRequestObject();
            //window.alert(calorie);
            var url = "reciepinfo.php"; 
            xmlHttp.open("POST",url,true);
            xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            window.alert(calorie);
            xmlHttp.send("recipe="+recipename+"&calorie="+calorie);
            xmlHttp.onreadystatechange = function(){
                if(xmlHttp.readyState===4 && xmlHttp.status===200){                       
                    document.getElementById("target").innerHTML = xmlHttp.responseText;                                          
                }
            }
        } 

php代码是:

  <?php
 $_SESSION['flag']=false;
if($_SESSION['flag']==false){
    session_start(); 
    $_SESSION['flag']=true;
}
$recipename = $_REQUEST['recipe'];
$calorie = $_REQUEST['calorie'];  
 echo $calorie;
 $calorietemp = 0;
 //echo $recipename;
 $database = "nutrition";
 $link = mysqli_connect('localhost','root','',$database);
 $query = "select * from recipestb where name='$recipename'";
 //$result = mysqli_query($link,$query);
 //$obj = mysqli_fetch_object($result);;
 if($link){
    $result = mysqli_query($link,$query);
    $obj = mysqli_fetch_object($result);
    //$arr = mysqli_fetch_array($result);
   //$names = "";
    if(is_object($obj)){
            echo "<i/>";
            echo "<font size='5'>";
            echo "Recipe name: ".$obj->name;
            echo '<br/>';
            echo "Carbohydrates : ".$obj->carbs." grams";
            echo '<br/>';
            echo "Proteins: ".$obj->protein." grams";
            echo '<br/>';
            echo "Fat: ".$obj->fat." grams";
            echo '<br/>';
            echo "Calories: ".$obj->calorie." cal";
            $calorietemp = $obj->calorie;
            echo '<br/>';    

    }else{
        echo "non object";
    }

 }else{
     echo "Connection failed";
 }
if($calorie==true){
     echo $calorie;
     $_SESSION['caloriecount'] = $_SESSION['caloriecount'] + $calorietemp;           
     echo "Total calorie in diet :".$_SESSION['caloriecount'];          
}

我的会话处理很奇怪我接受,但忽略了这一点,即使变量卡路里显式设置为false,if块也会执行.echo $ calorie语句也会执行,它会将$ calorie显示为false。 我并没有完全弄清楚出了什么问题。 对此几乎感到恼火。 有人可以帮忙吗?

EDIT1: php代码很好...... Ajax代码有一些问题...... 当我在PHP代码中将$ calorie设置为false时.. 它表现得很好..

2 个答案:

答案 0 :(得分:2)

将会话处理放在一边,$卡路里问题...... 您通过AJAX将数据作为字符串传递。

$calorie = 'false';
var_dump((true == $calorie));

您将永远得到bool(true)。使用上面的AJAX示例,请尝试使用此代码段(并使用POST而不是REQUEST):

$calorie = ('true' == $_POST['calorie']);
var_dump($calorie);
// produces `bool(false)`

答案 1 :(得分:0)

作为初学者,我不知道值为false的java脚本变量是作为字符串传递的,而#34; false&#34;到像PHP这样的服务器端脚本。

如果我们使用boolval(),在PHP中可以解决此问题。 PHP boolval()

根据我的需要,我将java脚本中的$ calorie设置为0或1。 当我想将false值发送到PHP脚本时,我将java-script中的$ calorie设置为0,相应的PHP脚本中的boolval()将其评估为false。 所以问题就解决了。