2013-10-31 37 views
0

我正在創建一個頁面,用戶可以計算他們的BMI,然後將其保存到他們的配置文件。首先我驗證BMI。但是,當我現在執行此計算時,它會在數據庫中插入「0.99」而不是正確的BMI值。我一直在調試,並認爲它與連接數據庫有關(嘗試將其轉移到腳本的其他區域,但它沒有改變)。PHP和SQL:使用登錄會話變量不正確地更新數據庫

的代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <title>Untitled Document</title> 
</head> 
<link rel="stylesheet" href="css.css" type="text/css" /> 
<body> 
    <?php 

    error_reporting(E_ALL &~ E_NOTICE); 

    // Start the session 
    session_start(); 


    // Make sure the browser is transmitting in UTF-8 
    header('Content-type: text/html; charset=utf-8'); 

     // Clear the error message 
    $error_msg = ""; 

    if (isset($_SESSION['user_id'])) 
     echo $_SESSION['user_id']; 

    $dbc = mysqli_connect('localhost', 'root', 'root', 'help_me_be_healthy') or die("Error " . mysqli_error($dbc)); 
    mysqli_set_charset($dbc, "utf8"); 


    if(isset($_POST['submit'])) 
    { 
     $bmi=0; 
     $kg=$_POST['kg']; 
     $mt=$_POST['mt']; 

     if(empty($kg) || empty($mt)) 
     { 
      echo "<label class='err'><center>All fields are required</center></label>"; 
      include("index.php"); 
     } 

     else if(!is_numeric($kg) && !is_numeric($mt)) 
     { 
      echo "<label class='err'>Please enter valid data.</label>"; 
      include("index.php"); 
     } 
     else 
     { 
      $bmi = $kg/($mt*$mt); 
      $bmi=round($bmi,2); 
      if ($bmi <= 18.5) 
      { 
       echo "Your BMI is " .$bmi." which means you are underweight"; 

      } 

      else if ($bmi>18.5 && $bmi <= 24.9) { 
       echo "Your BMI is ".$bmi." which means you are normal"; 
      } 

      else if ($bmi>29.9 && $bmi> 24.9) { 
       echo "Your BMI is ".$bmi." which means you are overweight"; 
      } 

      else if ($bmi >29.9 && $bmi<=39.9) { 
       echo "Your BMI is ".$bmi." which means you are obese"; 

      } 
      else 
      { 
       echo "You are morbidly obese."; 

      } 
      include("index.php"); 

      //$query = "UPDATE `users` SET `user_bmi`= '$bmi' 
      //WHERE `user_id` = ($_SESSION = ['user_id'])"; 

      //echo $_SESSION['user_id']; 



      //if (!isset($_GET['user_id'])) { 
      //$query = "SELECT * FROM 'users'"; 
      $query = "UPDATE `users` SET `user_bmi`= '$bmi' WHERE `user_id` = '" . $_SESSION['user_id'] . "'"; 
      //} 
      //else { 
      // $query = "UPDATE `users` SET `user_bmi`= '$bmi' WHERE `user_id` = '" . $_GET['user_id'] . "'"; 
      //} 

      $data = mysqli_query($dbc, $query); 
      $row = mysqli_fetch_assoc($data); 
      print "\n----\nLookup:\n"; 
      print "Num rows: " . mysqli_num_rows($data); 
      print "\n"; 
      print_r($row); 
      print '</pre>'; 
      return; 

     } 
    } 
    ?> 
</body> 
</html> 

任何幫助,將不勝感激:)

薩拉

+0

你更新前回蕩BMI? user_bmi的columntype是什麼? – demonking

+1

這不是導致你的錯誤,但我懷疑你在哪裏有$ bmi> 29.9 && $ bmi> 24.9'你可能的意思是'$ bmi <29.9 && $ bmi> 24.9' – danielpsc

+0

ahhh是的謝謝@danielpsc –

回答

0

假設正在被正確地計算BMI /顯示,並且user_bmi列是一個浮動/雙/數字/十進制,UPDATE不需要圍繞該值引號,所以SQL應該是:

$query = "UPDATE `users` SET `user_bmi`=$bmi WHERE `user_id`=". 
    $_SESSION['user_id']; 

user_id也是我並不需要進行轉義,這取決於它是否是一個數字或字符串)

而且,你不能從更新SQL命令查詢結果(FETCH_ASSOC)...如果你想要知道影響的行數使用mysqli_affected_rows

print "Num rows: ".mysqli_affected_rows($dbc); 

是什麼讓你覺得BMI被錯誤地進去,你肯定user_id是正確的,你是如何尋找到數據庫,以確定是什麼存儲?

更新的代碼打印輸出代碼:

if (!mysqli_query($dbc,$query)) { 
    echo "Failed to store"; 
} 
echo "<pre>\n----\nLookup:\nQuery:$query\n". 
    "Num rows:".mysqli_affected_rows($dbc)."\n</pre>\n"; 
+0

嗨,我呼應user_id並返回正確的值。我知道值正在更新,因爲如果我創建一個新用戶,然後計算BMI「0.99」被添加到該用戶的數據庫。 –

+0

除去sql語句周圍的引號導致沒有任何內容返回(空白頁)。 –

+0

目前我在網站上看到:36你的BMI是36.09,這意味着你肥胖36.09 ---- Lookup:Num rows: –