PHP:获得2警告& 6通知

时间:2016-03-01 19:39:01

标签: php mysql json

我需要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("&#36;" , "", $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
]);
?>

3 个答案:

答案 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;无法打开正确的文件,蒸汽正在回答错误。休息是一个跟进错误。

您可以通过检查并清理脚本输入来避免这种情况,并在检查失败时中止。