Переменная вне области при входе в цикл while в php - PullRequest
1 голос
/ 16 сентября 2010

У меня проблема при попытке заполнить массив в php.Кажется, что когда я вхожу в цикл while с помощью метода mysql_fetch_assoc, я не могу заполнить свой массив.Я включил код ниже.

$params = $_REQUEST['params'];</p> <pre><code>$arr["status"]="ok"; $projects=array(); $files=array(); $titles=array(); $query = 'SELECT p.id as pid, f.fname as name, f.title FROM proj p INNER JOIN pic f ON f.projid=p.id WHERE p.catid=\'' . $params['category'] . '\' ORDER BY p.ordr, f.ordr'; require("../php/connect.php"); //select all projects from chosen category and pics from selected projects $proj_result = mysql_query($query) or die ("Select failed"); //populate from rows while($row = mysql_fetch_assoc($proj_result)){ $projects[]=$row["pid"]; $files[]=$row["name"]; $titles[]=$row["title"]; } $arr["projects"]=$projects; $arr["files"]=$files; $arr["titles"]=$titles; echo json_encode($arr);

Результат: {"status": "ok", "projects": [], "files": [], "title": []}

Спасибо.

Ответы [ 3 ]

0 голосов
/ 16 сентября 2010

мой сценарий на стороне клиента jquery / ajax не отправлял в категории должным образом и поэтому не выбирал ни одной строки.

Приведенный выше код будет работать.

0 голосов
/ 17 сентября 2010

В цикле попробуйте что-то вроде этого:

while($row = mysql_fetch_assoc($proj_result)){  
    $projects[]=$row["pid"];
    $files[]=$row["name"];
    $titles[]=$row["title"];

    echo $row["pid"]." -- ".$row["name"]." -- ".$row["title"]."\n";
}

Вы что-нибудь получаете?Как только вы попробуете это, мы возьмем это оттуда.Я предполагаю, что вы не получаете никаких данных из MySQL.

0 голосов
/ 16 сентября 2010
Цикл

A while не создает новую область, как вы можете видеть здесь: http://codepad.org/H1U3wXZD
Что касается самого кода, вот несколько предложений:

0) Я бы посоветовал иметь уровень абстракции базы данных ( PDO было бы достаточно хорошо).

1) Узнайте, как использовать JOIN. Похоже, что вы можете получить всю необходимую информацию с помощью одного запроса, например:

    SELECT p.id, p.proj, c.id, c.fname, c.title 
      FROM proj p 
INNER JOIN pic c ON c.projid=p.id 
     WHERE catid='<your category>' 
  ORDER BY p.ordr, c.ordr

2) Вы должны отделить код, который получает данные из БД, от кода, который создает HTML (?). Возможно, вы могли бы поместить это в другой метод. Что-то вроде:

if ($cmd == 'catSelect') {
    $data = getData($params['category']);

    foreach ($data as $value) {
        // process data here
    }
}

3) Я так понимаю, вы используете сгенерированный JSON для отправки его через AJAX клиенту. В этом случае я бы полностью вырезал жир (например: сгенерированная разметка) и отправил только самые необходимые вещи (идентификатор изображения, заголовок, имя и все остальное, что необходимо) и сгенерировал бы код на стороне клиента. Это ускорит загрузку вашей страницы и сэкономит вам и вашим посетителям пропускную способность.

...