我需要2个警告和6个通知的帮助。
注意:尝试获取非对象的属性 在第11行
注意:尝试获取非对象的属性 在第28行
注意:尝试获取非对象的属性 第29行
注意:尝试获取非对象的属性 第30行
注意:尝试获取非对象的属性 在第31行
注意:尝试获取非对象的属性 在第33行
警告:PDOStatement :: execute():SQLSTATE [23000]:完整性 约束违规:1048列'steamID'不能为空 在第34行
我一直在努力修改代码4个小时,我现在无法理解到底是怎么回事......
<?php
require_once "../config.php";
require_once "../db.php";
if(!isset($_GET['secret']) || $_GET['secret'] != $config['bot_key_add']){
die("Access denied");
return;
}
$json = json_decode(file_get_contents("php://input"), false, 512, JSON_BIGINT_AS_STRING);
if((int)$json->userID ==)
return;
$weapon = urlencode($json->weapon);
$link = "http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=".$weapon;
$steam_price = file_get_contents($link);
$item_price = json_decode($steam_price, false, 512, JSON_BIGINT_AS_STRING);
if(empty($item_price) || $item_price->success == false || empty($item_price->median_price))
{
$price = 400;
}
else
{
$price = $item_price->median_price;
$price = str_replace("$" , "", $price);
$price = str_replace("$" , "", $price);
$price = round(str_replace(",",".",$price), 2);
}
$saveWeapon = $pdo->prepare("INSERT INTO `{$config['db_prefix']}users_items` (`steamID`, `classid`, `assetid`, `weapon_name`, `price`, `float`) VALUES (:steamId , :classid , :assetid , :weaponName , :price, :float)");
$saveWeapon->execute([ ":steamId" => $json->userID,
":classid" => $json->classid,
":assetid" => $json->assetid,
":weaponName" => $json->weapon,
":price" => $price,
":float" => $json->color
]);
?>
答案 0 :(得分:2)
看起来您的json解码失败了。您获取通知的行是您尝试将$ json视为对象的地方。
Per http://php.net/manual/en/function.json-decode.php,当json解码失败时,它返回null,你不能把它当作一个对象。
我建议在json解码后使用http://php.net/manual/en/function.json-last-error-msg.php
进行一些错误检查Key.getEncoded()
请注意,如果您使用5.5.0之前的php,则需要定义该函数(来自该函数引用)
if($json === null) {
throw new Exception(json_last_error_msg());
}
答案 1 :(得分:0)
尝试使用file_get_contents():
时,会收到400 Bad Request$link = "http://steamcommunity.com/market/priceoverview/?currency=1&appid=730&market_hash_name=".$weapon;
$steam_price = file_get_contents($link);
然后你尝试json_decode这个响应,你的$ item_price将为null。 第二个警告,因为您的INSERT尝试添加所有空字段的行,但steamID不能为空
答案 2 :(得分:0)
基本上你的file_get_contents(&#34; php:// input&#34;)不会返回文件对象,因此由于缺少文件对象而导致休息失败(所有警告)。所以&#34; file_get_contents&#34;无法打开正确的文件,蒸汽正在回答错误。休息是一个跟进错误。
您可以通过检查并清理脚本输入来避免这种情况,并在检查失败时中止。