2012-04-03 69 views
-2

嗨,我得到這個非常奇怪的事情與我的代碼發生......什麼? PHP無法回顯變量....?

所以我有以下代碼:

echo '<li><a href="'.$Website.$Elements[2].'/'.$Row["povezava"].'" class="leftMenuArticlesInactive"></a><li>'; 
  1. $網站包含:http://www.somesite.com/test/
  2. $元素[2]包含:sometext
  3. $行[ 「povezava」]包含:sometext2

所有變量都只有字母。

現在我的問題。 如果我嘗試呼應下面我得到:

// I'm missing "sometext": 
http://www.somesite.com/test/sometext2 
// Should be like this: 
http://www.somesite.com/test/sometext/sometext2 

如果我做的print_r($元素)我可以看到,$元素[2]「SomeText」則會。

爲什麼我不能回顯$元素[2]以及其他一些變量?

編輯:更多代碼!

$Website = 'http://' . $_SERVER["SERVER_NAME"] . '/' . $Elements[1] . '/'; 

function ShowMenuOfParent($Parent, $Spacing) { 
    $Query = mysql_query("SELECT * FROM `izdelki_meni` WHERE `stars` = '$Parent';"); 
    if(mysql_num_rows($Query) != 0) { 
     while($Row = mysql_fetch_array($Query)) { 
      $s = '<li><a href="'.$Website.$Elements[2].'/'.$Row["povezava"].'" class="leftMenuArticlesInactive">'; 
      for($i = 0; $i < $Spacing;$i++) { 
       $s .= '&nbsp;'; 
      } 
      $s .= $Row["ime"].'</a></li>'; 
      echo $s; 
      ShowMenuOfParent($Row["id"], $Spacing + 8); 
     } 
    } 
} 

$Query = mysql_query("SELECT * FROM `izdelki_meni` WHERE `stars` = 0;"); 
if(mysql_num_rows($Query) != 0) { 
    echo '<ul>'; 
    while($Row = mysql_fetch_array($Query)) { 
     echo '<li><a href="'.$Website.$Row["povezava"].'" class="leftMenuArticlesActive">'.$Row["ime"].'</a></li>'; 
     if($Elements[2] == $Row["povezava"]) { 
      ShowMenuOfParent($Row["id"], 8); 
     } 
    } 
    echo '</ul>'; 
} 
+0

你有沒有向自己證明這些變量包含你期望的值? print_r顯示什麼? – BugFinder 2012-04-03 08:56:03

+1

發佈print_r的確切輸出($ Elements) – 2012-04-03 08:56:47

+0

試着總是輸出一些東西的'var_dump()'! – ComFreek 2012-04-03 08:57:17

回答

2

爲什麼我不能回聲$元素[2]與其他幾個變量一起?

其實,echo能做到這一點,你的問題所以只有這部分仍然沒有得到解決:

我爲什麼不能?

你可以什麼,你不能經常取決於你到目前爲止學到的東西。由於學習是主觀的,所以別人比你難以回答這個問題。但是可能你可以添加更多的信息,尤其是阻礙你理解你的實際問題,這樣其他人可以更好地幫助你。


您提供的問題與您的問題相關的信息實際上是錯誤的。我可以理解你有一個問題,你想解決它,但是你實際上做的是你讓問題變得更大,而不是把它放在這裏作爲邀請別人去做更多的猜測。我的意思是10個人可以猜出不止一個人。所以你問的方式實際上是適得其反的,並沒有幫助。對於你自己和其他人一樣。

而不是猜測你需要開始實際證明一步一步的事情。從你自己的期望開始:

現在我的問題。如果我嘗試呼應下面我得到:

// I'm missing "sometext": 
http://www.somesite.com/test/sometext2 
// Should be like this: 
http://www.somesite.com/test/sometext/sometext2 

,這是關係到輸出你已經發布的代碼是:

echo '<li><a href="'.$Website.$Elements[2].'/'.$Row["povezava"].'" class="leftMenuArticlesInactive"></a><li>'; 

你寫$Website/test/結束,另外在輸出字符串(.'/'.)中有斜線,但是輸出本身甚至不包含根據您的額外字符串:

http://www.somesite.com/test/sometext2 

而這已經不管$Elements$Row包含什麼。首先開始思考,需要分析爲什麼會發生這種情況,其他人不能幫助你,因爲我們沒有軟件和數據來調試它。有一段時間你會學習你自己的最佳方式來找到你所犯的錯誤。

花時間設置自己的xdebug調試器,然後逐步通過您的代碼。它可以幫助您快速定位錯誤。而且不僅僅是這個時間,而且在將來。

+0

我已經添加了更多的代碼,我希望它有幫助。 – Eric 2012-04-03 09:08:23

+0

@Erik:不過,我也編輯了我的答案,我希望這是有道理的。 – hakre 2012-04-03 09:24:45

0

PHP有時很難在一行(背靠背)連接多個變量。這取決於服務器設置。你可以嘗試使用下面的一個呼應:

echo '<li><a href="'.$Website.''.$Elements[2].'/'.$Row["povezava"].'" class="leftMenuArticlesInactive"></a><li>'; 

echo '<li><a href="'.$Website; 
echo $Elements[2].'/'.$Row["povezava"].'" class="leftMenuArticlesInactive"></a><li>'; 

echo '<li><a href="',$Website,$Elements[2],'/',$Row["povezava"],'" class="leftMenuArticlesInactive"></a><li>'; 
+1

「困難時期」? PHP中99.999%的可預測運算符(甚至表達式)的運行方式,只有非常非常非常非常有限的未定義行爲。 – hakre 2012-04-03 09:02:06

+0

我使用4臺不同的服務器。通過託管服務提供商共享服務器的我無法連接「文本」。 $ var1。 $ var2。 「文本」。在服務器上,我設置了自己並管理,我可以做到。 – 2012-04-05 02:53:46

1

您似乎在作爲URL一部分的HTML屬性中打印未轉義的文本。我的教育猜測是,當瀏覽器呈現它時,你正在檢查腳本的輸出,例如,通過懸停鼠標並閱讀工具提示。相反,使用瀏覽器的「查看源代碼」功能查看確切的輸出。

其他提示:

  1. var_dump()是迄今爲止用於調試目的的最好的內置功能。所有其他函數要麼將變量轉換爲字符串,要麼隱藏一些重要的信息。

  2. 在違規行之後立即中止腳本die()exit()以確保輸出未稍後改變。

+0

讓我再解釋一下。我有一個.htaccess將所有數據以「subpage1/subpage2/subpage3 //」等形式重定向到index.php中,當索引接收到數據時,我用「/」將它分解並將所有數據存儲到$ Elements中。 var_dump我得到「array(3){[0] => string(0)」「[1] => string(7)」izdelki「[2] => string(7)」test-po「}」在這裏可以看到$ Elements [2]被設置並且等於「test-po」。當我嘗試在上面發佈的變形中使用它時,我沒有任何變化,並且變量在索引中永遠不會改變。 – Eric 2012-04-03 09:19:50

+1

我的印象是,你正在調試整個應用程序,而不是那個假定失敗的單一行,如果你在行之前使用了''元素'','die()'並且轉到「View- > Page Source「你會看到什麼是錯的。 – 2012-04-03 09:42:24