2012-07-11 47 views
0

我有一个函数,我传递一个变量作为参考到一个数组存储到。之前,它还花了第二个参考变量来存储图像url。当它使用这两个一切工作正常,我没有得到一个未定义的变量错误。现在我已经移除了图像部分,并将其包含在存储在单个引用变量中的数组中,并告诉我我传递的变量是未定义的。PHP:为什么我的变量错误作为未定义的引用传递?

这里是我的功能:

<?php 
function retrieve_t($movie_title, &$movie_data) { 
    $url = "http://www.imdbapi.com/?t=".urlencode($movie_title); 
    $content = file_get_contents($url); 
    if(substr($content, 2, 8) == "Response") 
     return false; 
    $data_array = explode("\",\"", substr($content,2,strlen($content)-4)); 
    $data_array2 = array(); 
    foreach ($data_array as $value) { 
     $temp = explode("\":\"", $value); 
     array_push($data_array2, $temp[0]); 
     array_push($data_array2, $temp[1]); 
    } 
    $movie_data = array($data_array2[0] => $data_array2[1], 
          $data_array2[2] => $data_array2[3], 
          $data_array2[4] => $data_array2[5], 
          $data_array2[8] => $data_array2[9], 
          $data_array2[10] => $data_array2[11], 
          $data_array2[12] => $data_array2[13], 
          $data_array2[14] => $data_array2[15], 
          $data_array2[16] => $data_array2[17], 
          $data_array2[18] => $data_array2[19], 
          $data_array2[22] => $data_array2[23], 
          "img_url" => $data_array2[21]); 
    return true; 
} 
?> 

而且这里是它被称为:

<?php include "imdb_search.php"; ?> 
<?php 
if(isset($_GET["add"]) && $_GET["title"]) 
    if($_GET["add"] == "yes") { 
     include "db_movie_add.php"; 
     $title = $_GET["title"]; 
     if(retrieve_t($title, $movie_data)) 
      add_movie($movie_data); 
    } 
?> 
<html> 
<head> 
    <title>First Page</title> 
</head> 
<Body> 
    <form> 
     Title: <input value="<?php if (isset($_GET["title"])) echo $_GET["title"]; ?>" type="text" name="title" /><br /> 
     <input type="submit" value="Search" /> 
    </form> 
    <?php 
     if(isset($_GET["title"])) { 
      $title = $_GET["title"]; 
      if(retrieve_t($title, $movie_data)) { 
       echo "<img src=\"{$movie_data["img_url"]}\" width=\"200\"><br \>"; 
       echo "Title: {$movie_data["Title"]}<br \>"; 
       echo "<form><input type=\"hidden\" name=\"title\" value=\"{$title}\"><input type=\"hidden\" name=\"add\" value=\"yes\"><input type=\"submit\" value=\"Add\" /></form>"; 
      } else { 
       echo "Sorry, movie was not found!"; 
      } 
     } 
    ?> 
</Body> 
</html> 
+0

这是不确定的? ('$ movie_data'我敢打赌)报告的具体错误消息和行号是什么? imdb_search.php的内容是什么? – 2012-07-11 00:54:38

+0

这到底是什么 - 'array($ data_array2 [0] => $ data_array2 [1],...''?? – 2012-07-11 01:00:04

+0

他基本上是采用奇数偶数索引并使这些键和奇数索引值 – 2012-07-11 01:01:19

回答

0

您正在使用$movie_data你定义它。

只要将它设置为null第一:

<?php include "imdb_search.php"; ?> 
<?php 
if(isset($_GET["add"]) && $_GET["title"]) 
    if($_GET["add"] == "yes") { 
     include "db_movie_add.php"; 
     $title = $_GET["title"]; 
     $movie_data = null; 
     if(retrieve_t($title, $movie_data))... 
+0

'$ movie_data'被读取为函数的参考。所以应该没有错误。或者它是一个旧的PHP版本? – 2012-07-11 02:46:58

+0

如果它是函数中的引用并不重要,但是您仍然必须首先定义它,即使它将被覆盖。在较老的版本中,当'error_reporting'不太严格时,无关紧要。 – Petah 2012-07-11 02:48:15

+0

@ ring0这正是我在想什么,特别是因为它工作时,我有两个参考变量,他们没有定义以前。 我增加了它的设置为null开始,仍然得到相同的错误。 “注意:未定义的变量:第23行的/Users/troycosentino/Sites/php_sandbox/firstpage.php中的movie_data” – 2012-07-11 02:52:29

相关问题