2011-08-30 53 views
0

您好,我無法讓腳本完全運行。根據表單輸入過濾數據庫查詢

我有正確的計算,但現在需要查詢燃料類型。

<?php 

include 'mysql_connect.php'; 

$query = "SELECT * FROM fuel_price WHERE FuelType='Oil'" ; 

$result = mysql_query($query); 
$price= mysql_fetch_array($result); 


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

echo "The Price Today is "; 

echo "£"; echo $_POST['qtylitres'] * $price ['Price']; 



} else { 

echo "Please select value"; 

} 

?> 

我需要檢查表單上選擇的fueltype並相應地計算總數。

例如$ query =「SELECT * FROM fuel_price WHERE FuelType ='{$ _ POST ['fueltype'];}'」;

請幫助任何有壓力的人。

感謝

+1

Yikes! 'WHERE FuelType ='{$ _ POST ['fueltype'];}'「;'閱讀:http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain – Johan

+0

你只是在那裏:$查詢=「SELECT * FROM fuel_price WHERE FuelType ='」。mysql_real_escape_string($ _ POST ['fueltype'])。「'」;是不是適用於您? – galchen

+0

[php mysql multiply database value with form selection] (http://stackoverflow.com/questions/7232428/php-mysql-multiply-database-value-with-form-selection) –

回答

1
include 'mysql_connect.php'; 

if(isset($_POST['submit'])){ 
    if($_POST['inputEmail'] == ''){ 
     echo 'Please enter an email address'; 
    } else{ 
     // show price 
     $fuelPriceQuery = sprintf("SELECT `Price` FROM fuel_price WHERE FuelType = '%s' LIMIT 1", 
        mysql_real_escape_string($_POST['fueltype'])); 

     $fuelPriceResult = mysql_query($fuelPriceQuery); 
     $price   = mysql_fetch_array($fuelPriceResult, MYSQLI_ASSOC); 
     echo 'The Price Today is £'.($_POST['qtylitres'] * $price['Price']); 

     // insert email 
     $addEmailQuery = sprintf("INSERT INTO `subscribe`(`Email`) VALUES('%s')", 
          mysql_real_escape_string($_POST['inputEmail'])); 
     $addEmailResult = mysql_query($addEmailQuery); 
     if($addEmailResult){ 
      echo 'You have successfully subscribed'; 
     } else{ 
      echo 'Sorry, we could not subscribe you at this time. Please try again.'; 
     } 
    } 
} else { 
    echo "Please select value"; 
} 

幾件事情需要注意:

  1. 始終確保使用mysql_real_escape_string逃脫用戶的輸入,如果你不使用準備好的語句,如PDO ,MySQLi等...

  2. 我將LIMIT子句添加到查詢中,所以mysql_fetch_array將工作,因爲如果它返回多於一行,那麼你將不得不在循環中處理它。

  3. 這是沒有必要使用多個echo s,實際上它是更好,如果你使用盡可能少。

+0

你忘了'order by'沒有你可能會選擇從1928年的第一個燃料價格。 – Johan

+0

@Johan:Huh?你怎麼知道表格模式?:) – Shef

+0

幸福的日子。謝謝你百萬。 我知道這有點多問,但我如何添加電子郵件地址到同一個查詢中的不同表? eg $ u =「INSERT INTO subscribe'Email' ='$ _ POST [inputEmail]'」; 謝謝 – phpnoob

1
$fueltype = mysql_real_escape_string($_POST['fueltype']); 
$query = "SELECT price 
      FROM fuel_price 
      WHERE FuelType= '$fueltype' 
      ORDER BY pricedate DESC 
      LIMIT 1 "; 

說明

  1. 務必請使用PDO或mysql_real_escape_string()
  2. 不要做SELECT *,只選擇你需要的字段。
  3. 將注入的$var放在單引號中,否則mysql_real_escape_string()將不起作用!
  4. 如果您只需要一個價格,請選擇1.使用limit 1即可獲得最新的1和order by ... DESC