2015-07-20 15 views
0

我有一个网站,从蒸汽市场的价格。它正在按照商品的名称来定价。然后我的JavaScript机器人获取有关项目的信息并将其处理到MySQL(而PHP文件将其处理到另一个表)。注定与PHP字符串,任何想法?

所以问题是从它开始。有些项目的名称上有字符串。它会导致我的JavaScript机器人发生故障并崩溃。到目前为止,我有下面的代码。

有没有什么办法可以保存它的数据库,并发送信息到javascript bot的字符串?抱歉。也许我缺乏逻辑。

<?php 
$item = $_GET['item']; 
$item = str_replace("\"", "", $item); 
$item = str_replace("\'", "", $item); 
$item = str_replace(" ", "%20", $item); 
$item = str_replace("\\", "", $item); 
@include_once ("set.php"); 
$rs = mysql_query("SELECT * FROM items WHERE name='$item'"); 
if(mysql_num_rows($rs) > 0) { 
    $row = mysql_fetch_array($rs); 
    if(time()-$row["lastupdate"] < 604800) die($row["cost"]); 
} 
$link = "http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=".$item; 
$string = file_get_contents($link); 
$obj = json_decode($string); 
if($obj->{'success'} == "0") die("notfound"); 
$lowest_price = $obj->{'lowest_price'}; 
for($i = 5; $i < strlen($lowest_price); $i++) { 
    $lowest_price[$i-5] = $lowest_price[$i]; 
} 
$lowest_price[strlen($lowest_price)] = 0; 
$lowest_price = (float)($lowest_price); 
mysql_query("DELETE FROM items WHERE name='$item'"); 
mysql_query("INSERT INTO items (`name`,`cost`,`lastupdate`) VALUES ('$item','$lowest_price','".time()."')"); 
echo $lowest_price; 
?> 
+0

有强制转换它'(串)' – Daan

+4

如果可以的话,你应该[停止使用'mysql_ *'功能(http://stackoverflow.com/questions/12859942/why-shouldnt -i-使用MySQL的函数式的PHP)。他们不再被维护,并[正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。了解[准备](http://en.wikipedia.org/wiki/Prepared_statement)[声明](http://php.net/manual/en/pdo.prepared-statements.php),并考虑使用PDO ,[这真的不难](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

[你的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

回答

-1

那么它会是这样吗?

<?php 
$item = $_GET['item']; 
$item = str_replace("\"", "", $item); 
$item = str_replace("\'", "", $item); 
$item = str_replace(" ", "%20", $item); 
$item = str_replace("\\", "", $item); 
$item = (string)$item 
+1

不,只需使用准备好的语句,你就不需要这个。在你的问题上再次。你明白吗?你会做吗?为什么或者为什么不? –

+0

这是完全的,绝望的不足。正如stef77所说,在**绝对最少**使用'mysql_real_escape_string',但尽快迁移到PDO或更好的** **。如果此代码是正在进行的工作并且尚未完成,那么现在是时候了。 – tadman

1
$item = $_GET['item']; 
$item = str_replace("\"", "", $item); 
$item = str_replace("\'", "", $item); 
$item = str_replace(" ", "%20", $item); 
$item = str_replace("\\", "", $item); 
$item = str_replace("(", "%28", $item); 
$item = str_replace(")", "%29", $item); 
相关问题