2008-11-27 114 views
0

我有這樣的代碼變量未被傳遞?

while($row = mysql_fetch_row($result)) 
{ 
echo '<tr>'; 
$pk = $row[0]['ARTICLE_NO']; 

foreach($row as $key => $value) 
{ 
echo '<td><a href="#" onclick="GetAuctionData(\''.$pk.'\')">' . $value . '</a></td>'; 
} 

它得到的PK。然後PK被傳遞到axjax部分與此:

function GetAuctionData(pk) 
{ 
..... 
var url="get_auction.php?" 
url=url+"cmd=GetAuctionData&pk="+pk; 

最後在一個單獨的PHP文件與使用:

$pk = $_GET["pk"]; 
$sql="SELECT * FROM Auctions WHERE ARTICLE_NO ='$pk'"; 

第二php文件利用自身並傳遞參數時,它工作正常。同樣,在任何地方都沒有錯誤。這個問題似乎與通過或產生$ pk,因爲在輸出文件中的鏈接導致$ pk遞增2,例如4,6,8等

我不明白爲什麼會發生這種情況。

+0

您可能很清楚這一點,但將Get參數直接放入SQL語句中是非常不安全的。如果你想以這種方式構造你的SQL語句,你可以先將它轉換爲一個整數。 – 2008-11-27 13:57:24

回答

5

mysql_fetch_row link沒有子數組。它將返回的第一個字段爲0,下一個爲1等

$pk = $row[0]; 

這種嘗試可以輕鬆地與您的foreach使用

while($row = mysql_fetch_assoc($result)) 
$pk = $row['ARTICLE_NO']; 

或這給你兩個關聯的,編號數組。

while($row = mysql_fetch_array($result, MYSQL_BOTH)) 
$pk = $row['ARTICLE_NO']; 

編輯: 基於

$result = mysql_query("SELECT SELLER_ID, ACCESSSTARTS, ARTICLE_NAME FROM {$table}"); 

你必須包括你想從一個值的行。 ;)

$result = mysql_query("ARTICLE_NO, SELECT SELLER_ID, ACCESSSTARTS, ARTICLE_NAME FROM {$table}"); 

BTW:Im相當肯定這嵌套的循環不會產生你想要的。你會得到3個鏈接到每個article_no。第一個以seller_id作爲文本,第二個文本是訪問開發,並且具有相同href的最後一個鏈接將具有文本article_name。

也許這樣?

while($row = mysql_fetch_assoc($result)) 
{ 
    $pk = $row['ARTICLE_NO']; 
    echo '<td><a href="#" onclick="GetAuctionData(\''.$pk.'\')">' . $row['ARTICLE_NAME'] . '</a></td>'; 
} 
+0

從這裏我得到一個未定義的索引article_no error – 2008-11-27 13:19:35

+0

我從$ pk = $ row [0] ['ARTICLE_NO']得到了ARTICLE_NO; 'article_no'應該是yer表中字段/屬性的名稱。 記住mysql_fetch_array會爲數字和字段/屬性鍵兩次返回每個字段和值兩次。 – OIS 2008-11-27 13:48:58

0

,我不認爲這樣做你所期望的:

$pk = $row[0]['ARTICLE_NO']; 

與嘗試:

$pk = $row['ARTICLE_NO']; 
+0

然後我得到一個未定義的索引article_no error – 2008-11-27 13:10:46

1

由於troelskn說,它看起來像你有點困惑,什麼是和mysql_fetch_row返回。

和mysql_fetch_row將返回$文章[0],$文章[1]等

還有:

mysql_fetch_assoc // return $article['ARTICLE_NO'], $article['otherfield'] etc 

mysql_fetch_array // returns an array that is effectively the above two array_merge'd 
mysql_fetch_object // returns a stdclass object, as if mysql_fetch_assoc had been passed to get_object_vars() 

你需要重構了一下,在這個光....

-1

其他答覆這裏應該充分回答你的問題,但我只是想添加一個額外的調試尖端可以幫助你,你應該運行在將來類似的問題。

只需在屏幕上打印關於您正在使用的變量的信息,即可進行一些非常基本的調試。 (A PHP IDE往往擁有更強大的調試功能,但是這樣的事情的問題,這種方法將被罰款)

您的原始代碼:

while($row = mysql_fetch_row($result)) 
{ 
    echo '<tr>'; 
    $pk = $row[0]['ARTICLE_NO']; 

    foreach($row as $key => $value) 
    { 
     echo '<td><a href="#" onclick="GetAuctionData(\''.$pk.'\')">' . $value . '</a></td>'; 
    } 
} 

您注意到GetAuctionData功能ISN」沒有正確地得到它的變量。加入這一行:

$pk = $row[0]['ARTICLE_NO']; 
var_dump($pk); 

如果你看一下輸出,當你運行該文件,你可能會看到它說,$峯爲空。嗯,這沒有用。讓我們改變了一點:

$pk = $row[0]['ARTICLE_NO']; 
var_dump($row); 

現在,您會看到這樣的事情:

array(2) { 
    [0]=> string(2) "12" 
    [1]=> string(7) "myValue" 
} 

啊哈!現在,你可以清楚地看到你正在使用的東西,你會看到,你想在第一時間使用的代碼是:

$pk = $row[0]; 

var_dump()是你的朋友。如果你使用的是數組,print_r()會給你類似的信息,但格式很好。

祝你好運。