2008-11-27 66 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()会给你类似的信息,但格式很好。

祝你好运。