Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Правильность обработки и вывода данных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужен совет
Russer
Отправлено: 14 Марта, 2015 - 20:30:38
Post Id


Гость


Покинул форум
Сообщений всего: 91
Дата рег-ции: Февр. 2015  


Помог: 1 раз(а)




Мне нужно выбрать столбцы из таблицы и вывести их , я написал скрипт под это дело пример кода ниже:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <center>Выберите опции</center>
  3. <form action="scripts/report.php" method="post">
  4. <---Выбираем нужные нам поля и отправляем их в скрипт при этом присваиваем им значения равные названию столбца в mysql--->
  5. <p><label for="col1">id</label>
  6. <input type="checkbox" id="col1" name="col[]" value="id"></p>
  7. <p><label for="col2">Наименование договора</label>
  8. <input type="checkbox" id="col2" name="col[]" value="dog_name"></p>
  9. <p><label for="col3">Номер договора</label>
  10. <input type="checkbox" id="col3" name="col[]" value="dog_id"></p>
  11. <input type="submit">
  12. </form>


А вот сам скрипт:
PHP:
скопировать код в буфер обмена
  1.  
  2. //Создаем массив с названием наших полей
  3. $aCol = array_filter($_POST['col']);
  4.  //Создаем массив для вывода шапки таблицы  и формирования запроса в mysql
  5. foreach ($aCol as $line){
  6.         //Выбираем название столбцов шапки.
  7.         switch ($line){                
  8.                 case 'id': $aTH[]="Ид";break;
  9.                 case 'dog_name': $aTH[]="Наименование договора";break;
  10.                 case 'dog_id': $aTH[]="Номер договора";break;
  11.                 }
  12.         //Создаем строку запроса
  13.         $str=$str.', `'.$line.'`';}
  14. // Убираем первые два символа
  15. $str = substr_replace($str, null, 0, 2);
  16. //Подключаем настройки mysql
  17. include '../../conf/db.php';
  18. // Выводим заголовки таблицы
  19. echo '<table width="auto" border="1"  align="center"  cellpadding="5" style="border-collapse: collapse; border: 1px solid black">';
  20. echo '<thead style="background-color: silver">
  21.     <tr>';
  22. //Выводим шапку
  23. foreach ($aTH as $th){
  24.         echo '<th>'.$th.'</th>';
  25. }
  26. echo ' </tr>  
  27.    </thead>
  28.    <tbody>';
  29. //Отправляем запрос в mysql
  30. $result = mysqli_query($db, "SELECT {$str} FROM `dog_status` ");
  31. //Выводим данные
  32. while($row=mysqli_fetch_array($result, MYSQL_ASSOC))
  33. {
  34.         echo '<tr>';
  35.         foreach ($aCol as $Astr){
  36.                 echo '<td>'.$row[$Astr].'</td>';}
  37.         echo '</tr>';
  38.         }
  39. echo '</tbody>
  40.   </table>';
  41.  

Скрипт работает , но теперь вопрос правилен ли такой подход в плане быстродействия ?
Или проще было сделать запрос на получение всей таблицы и уже после этого выводить в цикле нужные столбцы ?
Или есть третий вариант ?
В тестовом варианте данных не много по этому генерируется все достаточно быстро , но что будет при работе с реальной более менее нормальной бд , знающие люди нужен ваш совет!

(Отредактировано автором: 14 Марта, 2015 - 20:33:51)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB