当我从网络浏览器访问它时,它只返回echo文本以外的内容,我知道这与我发布的另一个问题类似,但我无法理解它?
<?php
include('config.php');
include('database.php');
class conversion{
public $amnt;
public $cc_from;
public $cc_to;
public function __construct (){
$this->amnt = htmlspecialchars($_GET["amnt"]);
$this->cc_from = htmlspecialchars($_GET["from"]);
$this->cc_to = htmlspecialchars($_GET["to"]);
}
function convert($this->amnt,$this->cc_from,$this-cc_to,$decimals=2){
$db_rate_from = mysql_query("SELECT * FROM _currency WHERE country_code='$this- >cc_from'") or die(mysql_error());;
$query_row_from = mysql_fetch_array($db_rate_from);
$rate_from = ($query_row_from['rate']);
echo $rate_from;
echo "</br>rate to</br>";
$db_rate_to = mysql_query("SELECT * FROM _currency WHERE country_code='$this->cc_to'") or die(mysql_error());;
$query_row_to = mysql_fetch_array($db_rate_to);
$rate_to = ($query_row_to['rate']);
echo $rate_to;
echo "</br>conversion</>";
$conversion = (number_format(($amnt/$rate_from)*$rate_to,$decimals));
echo $conversion;
} }
$var = new conversion();
$var->convert($amnt,$cc_from,$cc_to);
?>
答案 0 :(得分:3)
鉴于此:
$db_rate_from = mysql_query("SELECT * FROM $db_tbprefix WHERE country_code='$this->cc_from'");
$db_tbprefix
定义在哪里?无处,导致您的查询为SELECT * FROM WHERE ...
。如果您有正确的SQL错误处理代码,那么您就已经清楚了。在绝对最低限度,你应该有类似的东西:
$result = mysql_query("...") or die(mysql_error());
会在查询失败时中止脚本并告诉您查询失败的确切原因。
同样,htmlspecialchars不适用于数据库操作。它绝对没有阻止SQL注入。为此,您必须使用mysql_real_escape_string()
。
答案 1 :(得分:2)
我注意到的一件事是你没有参数调用你的方法。
$var->convert();
然而,它宣布采取三个强制性参数。
function convert($amnt,$cc_from,$cc_to,$decimals=2)
顺便说一下,不要使用$ query_row_to [rate]。使用$ query_row_to ['rate']或$ query_row_to [$ rate]。
编辑:
这样的事情怎么样?使用全局$ db_tbprefix并跳过面向对象。
<?php
include('config.php');
include('database.php');
function convert($amnt,$cc_from,$cc_to,$decimals=2) {
global $db_tbprefix;
$db_rate_from = mysql_query("SELECT rate FROM $db_tbprefix WHERE country_code='$cc_from'") or die mysql_error();
$query_row_from = mysql_fetch_assoc($db_rate_from);
$rate_from = $query_row_from['rate'];
$db_rate_to = mysql_query("SELECT rate FROM $db_tbprefix WHERE country_code='$cc_to'") or die mysql_error();
$query_row_to = mysql_fetch_assoc($db_rate_to);
$rate_to = $query_row_to['rate'];
return number_format(($amnt/$rate_from)*$rate_to,$decimals);
}
echo convert(floatval($_GET["amnt"]), mysql_real_escape_string($_GET["from"]), mysql_real_escape_string($_GET["to"]));
?>
编辑2:仅选择您需要的内容,在这种情况下为费率。并使用mysql_fetch_assoc而不是mysql_fetch_array,这将使你的内存消耗加倍并减慢你的代码。
答案 2 :(得分:1)
避免'测试了它...但我可以找到的可能性是你在定义它时在函数转换中传递参数所以你需要在调用它时传递相同的参数...或者如果变量是来自的参考预定义的,然后像这样使用它们
function convert($this->amnt,$this->cc_from,$this->cc_to,$decimals=2){
}