У меня есть этот код
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 и т. д.
Не могу понять, почему это происходит.






Я не думаю, что это то, что вы ожидаете:
$pk = $row[0]['ARTICLE_NO'];
Попробуйте:
$pk = $row['ARTICLE_NO'];
Как говорит 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()
вам нужно немного реорганизовать в свете этого ....
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'];
Обновлено: На основе
$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. В первом тексте используется seller_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>';
}
Я получил ARTICLE_NO из $ pk = $ row [0] ['ARTICLE_NO']; "article_no" должно быть именем поля / атрибута в вашей таблице. И помните, что mysql_fetch_array будет возвращать каждое поле и значение дважды, как для числового, так и для ключа поля / атрибута.
ARTICLE_NO - это первый столбец в моей таблице, но меняем его на $ pk = $ row ['ARTICLE_NO']; дает ошибку индекса. Я использую неправильные кавычки или что-то в этом роде?
Если вы хотите использовать mysql_fetch_row, вы должны использовать индекс поля / атрибута в результате sql, т.е. 0. Посмотрите на мой первый пример кода. Вы должны использовать mysql_fetch_assoc, если хотите получить значение по имени поля / атрибута. Взгляните на мой второй пример.
Другие ответы здесь должны в достаточной мере ответить на вашу проблему, но я просто хотел добавить дополнительный совет по отладке, который может помочь вам, если вы столкнетесь с аналогичной проблемой в будущем.
Вы можете выполнить очень простую отладку, просто выведя на экран информацию о переменных, с которыми вы работаете. (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 имеет значение null. Хммм, это не сработало. Немного изменим:
$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() дает вам аналогичную информацию, но в красивом формате.
Удачи.
Спасибо за хорошо написанный ответ. Моя проблема в том, что я не могу использовать row [o], поскольку я не включаю ARTICLE_NO в набор результатов, который я хочу отобразить. Должен ли я включить его из исходного запроса, а именно: $ result = mysql_query ("ВЫБРАТЬ SELLER_ID, ACCESSSTARTS, ARTICLE_NAME FROM {$ table}");
однако я думаю, что это означало бы, что я не мог перебирать строки, чтобы показать данные, так как я не хочу, чтобы отображалась article_no
это будет только для тестирования и отладки, а не для запуска сайта. вы бы удалили строки var_dump (), как только выяснили проблему.
Возможно, вы знаете об этом, но помещать параметр Get прямо в оператор SQL довольно небезопасно. Вы можете сначала преобразовать его в целое число, если хотите таким образом построить свои операторы SQL.