Переменная не передается?

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

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 и т. д.

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

Возможно, вы знаете об этом, но помещать параметр Get прямо в оператор SQL довольно небезопасно. Вы можете сначала преобразовать его в целое число, если хотите таким образом построить свои операторы SQL.

Tom Haigh 27.11.2008 16:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
299
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

$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 будет возвращать каждое поле и значение дважды, как для числового, так и для ключа поля / атрибута.

OIS 27.11.2008 16:48

ARTICLE_NO - это первый столбец в моей таблице, но меняем его на $ pk = $ row ['ARTICLE_NO']; дает ошибку индекса. Я использую неправильные кавычки или что-то в этом роде?

user1253538 27.11.2008 17:14

Если вы хотите использовать mysql_fetch_row, вы должны использовать индекс поля / атрибута в результате sql, т.е. 0. Посмотрите на мой первый пример кода. Вы должны использовать mysql_fetch_assoc, если хотите получить значение по имени поля / атрибута. Взгляните на мой второй пример.

OIS 27.11.2008 17:58

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

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

user1253538 27.11.2008 17:19

однако я думаю, что это означало бы, что я не мог перебирать строки, чтобы показать данные, так как я не хочу, чтобы отображалась article_no

user1253538 27.11.2008 17:21

это будет только для тестирования и отладки, а не для запуска сайта. вы бы удалили строки var_dump (), как только выяснили проблему.

nickf 27.11.2008 19:08

Другие вопросы по теме