2017-08-01 158 views
0

我有些业余php程序员,并且正在寻找if语句的帮助,而这个语句并不像我打算的那样工作。PHP - 在if语句中设置变量时返回NULL

<?php 

var_dump($_GET['name']); 
var_dump($_GET['id']); 
var_dump($search); 
var_dump($param); 
var_dump($raw); 
var_dump($json); 

// for debugging 
error_reporting(E_ALL); 
ini_set('display_errors', 'on'); 

// choose between either the name or id parameter 
if(isset($_GET['name'])) { 
    $search = $_GET['name']; 
} 
elseif(isset($_GET['id'])) { 
    $search = $_GET['id']; 
} 

// build parameters for either name OR id 
if (isset($_GET['name'])) { 
    $param = http_build_query(array(
     'name' => $_GET['name'], 
     'getMembers' => 'yes', 
     'rand' => rand(), 
    )); 
} 
elseif (isset($_GET['id'])) { 
    $param = http_build_query(array(
     'id' => $_GET['id'], 
     'getMembers' => 'yes', 
     'rand' => rand(), 
    )); 
} 

// get raw json from server 
$raw = file_get_contents("https://example.com/file.php?".$param); 

// decode the raw json response 
$json = json_decode($raw); 

... ?> 

请注意,为了调试目的,我已经在第三行放弃了变量。 $search,$param,$raw$json每次都返回NULL。我认为这与if语句有关,但我无法弄清楚我的生活。帮助将不胜感激。干杯!

编辑:

好吧!我们正在某个地方!我进一步移动var_dump($json);这个页面,得到了这个混乱的结果:

object(stdClass)#2 (2) { ["guild"]=> object(stdClass)#1 (11) { ["guild_id"]=> string(3) "182" ["guild_name"]=> string(7) "Jiggmin" ["creation_date"]=> string(19) "2013-05-07 10:32:02" ["active_date"]=> string(19) "2013-05-07 10:32:02" ["member_count"]=> string(1) "1" ["emblem"]=> string(18) "default-emblem.jpg" ["gp_total"]=> string(1) "0" ["gp_today"]=> string(1) "0" ["owner_id"]=> string(7) "1939717" ["note"]=> string(13) "Hehe, trolls." ["active_count"]=> string(1) "0" } ["members"]=> array(1) { [0]=> object(stdClass)#3 (6) { ["user_id"]=> string(7) "1939717" ["name"]=> string(11) "snuppaper97" ["power"]=> string(1) "1" ["rank"]=> string(2) "23" ["gp_today"]=> NULL ["gp_total"]=> NULL } } } 

我又试图在58行做echo $json;和得到这个怪物:

**Recoverable fatal error:** Object of class std class could not be converted to string in /Path/To/File.php on line 58

+0

GET的输出是什么? var_dump it –

+0

把'var_dump($ search); var_dump($ param); var_dump($ raw); var_dump($ json);'在执行所有操作并检查后的最后一行。 –

+0

他们在哪里定义? –

回答

0

他们是在顶部的脚本,所以这些变量还没有被定义!

var_dump($search); 
var_dump($param); 
var_dump($raw); 
var_dump($json); 

他们总是会为空,直到你将它们设置为某物! Vars应该从哪里来?移动下面的var_dumps,你可能会开始看到的东西:-)

编辑:现在你有一个stdClass的对象。要对json进行编码,我们必须将其转换为数组!

所有的
$array = (array) $object; 
$json = json_encode($array); 
+0

谢谢!正在取得进展!请参阅我的编辑。 – bls1999

+0

查看我更新的答案! – delboy1978uk

0
  • 首先,不使用全局变量,它们在PHP编码的一个很旧,坏的方式:因为它是那么容易。
  • 而不是isset($_GET['name'])使用array_key_exists('name', $_GET)作为isset($_GET['name'])如果它被设置为NULL,如果你不想要null,或者明确地加上null !== $_GET['name'],那么它返回false,这样你就知道代码是在做什么。

似乎有没有默认的参数,例如,如果他们都不曾设定,将不会有新的参数字符串建立

你能为我们提供一个样本网址和代码,其中你建立的网址?或者你使用的地方$param

+0

所以我接受了其他人的建议,将'var_dump($ json);'父亲放在php脚本中,并得到了php无法处理的东西。如果你能提供帮助,请参阅我的编辑和lmk。谢谢! – bls1999