переменная не передается? - PullRequest
0 голосов
/ 27 ноября 2008

У меня есть этот код

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 передается в 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 и т. Д.

Я не могу понять, почему это происходит.

Ответы [ 4 ]

5 голосов
/ 27 ноября 2008

mysql_fetch_row ссылка не имеет подмассивов. Первое поле будет возвращено как 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'];

EDIT: На основании

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

Вы должны включить строку, из которой хотите получить значение. ;)

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

Кстати: я уверен, что этот вложенный цикл не даст того, что вы хотите. Вы получите 3 ссылки на каждое article_no. Первый с продавцом_id в качестве текста, второй текст - accessstarts, а последняя ссылка с тем же 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>';
}
1 голос
/ 27 ноября 2008

Как говорит troelskn, похоже, вы немного сбиты с толку относительно того, что возвращает mysql_fetch_row.

mysql_fetch_row вернет $ article [0], $ article [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()

В свете этого вам нужно немного изменить рефакторинг ...

0 голосов
/ 27 ноября 2008

Другие ответы здесь должны в достаточной мере ответить на вашу проблему, но я просто хотел добавить дополнительный совет по отладке, который поможет вам столкнуться с подобной проблемой в будущем.

Вы можете выполнить некоторую базовую отладку, просто распечатав на экране информацию о переменных, с которыми вы работаете. (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 неправильно получает свою переменную. Добавьте эту строку:

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

Если вы посмотрите на вывод при запуске файла, вы, вероятно, увидите, что он говорит, что $ pk равно нулю. Хм, это не сработало. Давайте немного его изменим:

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

Теперь вы видите что-то вроде этого:

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

Aha! Теперь, когда вы точно видите, с чем работаете, вы увидите, что код, который вы хотели использовать в первую очередь, был:

$pk = $row[0];

var_dump() твой друг. Если вы работаете с массивами, print_r() выдает похожую информацию, но с хорошим форматированием.

Удачи.

0 голосов
/ 27 ноября 2008

Я не думаю, что это то, что вы ожидаете:

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

Попробуйте с:

$pk = $row['ARTICLE_NO'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...