PHP цикл данных MySQL FOR - PullRequest
       2

PHP цикл данных MySQL FOR

0 голосов
/ 19 октября 2011
<?php

//function to create a table
function makeTable($table, $columns){
    $numFields = count($columns)-1;

    $query = 'SELECT * FROM '.$table;
    $result = mysql_query($query);
    $arrayResult = mysql_fetch_array($result);
    $num_rows = mysql_num_rows($result);

    for ($x = 1; $x <= $num_rows; $x++){ //1st for loop
        echo '<tr>';
            for ($i = 0; $i <= $numFields; $i++){ //2nd for loop
                echo '<td>'.$arrayResult[$columns[$i]].'</td>';
            }
        echo '</tr>';
    }
}

?>

$ columns - это введенный пользователем массив, например: $ columns = array ('Column1', 'Column2', 'Column3) ;. Это имена столбцов, которые находятся в данной таблице $.

Моя идея заключалась в создании функции, которая отображает данные из таблицы MySQL с информацией из массива $ columns. Проблема во втором цикле for. Значение $ i сбрасывается каждый раз, когда выполняется первый цикл, поэтому я получаю один и тот же результат снова и снова (количество строк в таблице). У меня такой вопрос: Как сохранить $ i во втором цикле от сброса?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 19 октября 2011

Причина, по которой вы получаете один и тот же результат снова и снова, не в том, что $i, а $arrayResult.

. Правильный путь такой:

//function to create a table
function makeTable($table, $columns){
    $numFields = count($columns)-1;
    $query = 'SELECT * FROM '.$table;
    $result = mysql_query($query);

    while ($arrayResult = mysql_fetch_array($result)){
        echo '<tr>';
            for ($i = 0; $i <= $numFields; $i++){ //2nd for loop
                echo '<td>'.$arrayResult[$columns[$i]].'</td>';
            }
        echo '</tr>';
    }
}
0 голосов
/ 19 октября 2011

Почему вы не используете цикл while?Если вы используете в то время как вам даже не нужно mysql_num_rows($result).Попробуйте это

function makeTable($table, $columns){
    $numFields = count($columns)-1;

    $query = 'SELECT * FROM '.$table;
    $result = mysql_query($query);

    while($arrayResult = mysql_fetch_array($result)){
        echo '<tr>';
            for ($i = 0; $i <= $numFields; $i++){ //2nd for loop
                echo '<td>'.$arrayResult[$columns[$i]].'</td>';
            }
        echo '</tr>';
    }
}

Я уверен, вы получите свой ответ

0 голосов
/ 19 октября 2011
  1. Ваш код не будет работать никогда. Потому что вы не читали ручной ввод для mysql_fetch_array ()

  2. Нет смысла использовать циклы for в наши дни. Вам нужно руководство, чтобы понять, как работать с циклами в PHP. foreach и пока вам нужно будет чаще, чем для.

  3. Идея создания такой функции неверна. объединение SQL и HTML в одной функции является признаком ОЧЕНЬ ПЛОХОГО дизайна. Что вам действительно нужно, так это функция для получения данных SQL в массив и шаблон .

функция

function sqlArr($sql){
  $ret = array();
  $res = mysql_query($sql) or trigger_error(mysql_error()." ".$sql);
  if ($res) {
    while($row = mysql_fetch_array($res)){
      $ret[] = $row;
    }
  }
  return $ret;
}

код

$data = sqlArr("SELECT * FROM table");
include 'template.php';

шаблон

<table border='1'>
<? foreach ($data as $row): ?>
  <tr>
  <? foreach ($row as $col): ?>
    <td><?=$col?></td>
  <? endforeach ?>
  </tr>
<? endforeach ?>
</table>

Однако вы можете поместить этот последний шаблонный код в функцию, если будете часто его использовать.
и назовите это как

<? drawTable($data) ?>
0 голосов
/ 19 октября 2011

В вашем коде вы просто выбираете всегда первую строку, и независимо от последующих циклов вы имеете дело только с этой первой строкой.

Просто место

 $arrayResult = mysql_fetch_array($result);

в первом цикле непосредственно перед эхом '<tr>';

В любом случае, поскольку это не лучший выбор для итерации записей таблицы, подумайте об использовании while.

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