Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > ошибка при выводе большого массива данных


Автор: Владимир777 29.3.2006, 10:43
работаю на локальном mysql сервере
есть простой скрипт
Код

<?
  include "../dbconf.inc.php";
 include "../config.php";

#include "header.htm";

/*
 $request = 'UPDATE delf_company
             SET click=click+1
             WHERE id='.$id;
 $result  = mysql_query($request);
*/

$id =  $_GET['id']; # добавлено SKV

 $request = 'SELECT title
             FROM delf_price
             WHERE id='.$id;

 $result  = mysql_query($request);
 $row     = mysql_fetch_array($result);

 echo '<div class="sx8" style="margin-bottom:10px;">Прайс-лист "'.$row[title].'"</div>';

 #$orderby = "title";
 $request = 'SELECT *
             FROM delf_price
             WHERE parent='.$id;

 $result  = mysql_query($request);
?>

<table width="100%" border="0" cellpadding="5" cellspacing="0" class="sx1"><tr>
 <td class="td1">Наименование</td>
 <td class="td1">Дополнительно</td>
 <td class="td1">Фасовка</td>
 <td class="td1">Производ.</td>
 <td class="td1">Ед.изм.</td>
 <td class="td1">Опт</td>
 <td class="td1">Розница</td>
</tr>

<?
 while ($row = mysql_fetch_array($result))
 {
  echo '<tr style="">
         <td class="td1">'.$row[title].'&nbsp;</td>
         <td class="td1">'.$row[cdata].'&nbsp;</td>
         <td class="td1">'.$row[packaging].'&nbsp;</td>
         <td class="td1">'.$row[producer].'&nbsp;</td>
         <td class="td1">'.$row[type].'&nbsp;</td>
         <td class="td1">'.$row[price_opt].'&nbsp;</td>
         <td class="td1">'.$row[price_roz].'&nbsp;</td>
        </tr>';
 }           
 echo '</table>';

 
?>


проблема если выборка больше 400 строк explorer пишет невозможно отобразить страницу
может надо исправить настройки в apache?

Автор: Darhazer 29.3.2006, 11:00
Надо max_execution_time сделать по больше

Автор: Владимир777 29.3.2006, 11:03
в httpdconf не нашел, где поискать
Добавлено @ 11:17
max_execution_time = 30
а скрипт вылетает секунд через 5

Автор: smartov 29.3.2006, 11:22
Владимир777,
set_time_limit(XXX);

XXX - кол-во секунд

Автор: Владимир777 29.3.2006, 11:30
где эту строчку посмотреть или добавить?

Автор: Guedda 29.3.2006, 11:32
Там же.

Автор: Владимир777 29.3.2006, 12:16
в php.ini

max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 16M ; Maximum amount of memory a script may consume (8MB)
set_time_limit = 30
mssql.timeout = 30


вылетает все равно

в броузере строки начинают появляться по 10-20, потом пропадают такое дерганье происходит раз 5-7 и невозможно отобразить страницу

Автор: smartov 29.3.2006, 12:39
Владимир777,
Блин. Да в код ее вставлять.
Функция это!
Код

<?php

set_time_limit(500);

//----- а дальше твой код ------//

function THIS_IS_KUCHA_TVOEGO_KODA($RTFM)
{
  while (true)
  {
     echo "I will read ".$RTFM." before asking questions";
  }
}

THIS_IS_KUCHA_TVOEGO_KODA('PHP MANUAL');

?>

Автор: Владимир777 29.3.2006, 13:23
вставлял не помогло
поменял код
Код

$request = 'SELECT title, cdata,packaging,producer,type,price_opt,price_roz
             FROM delf_price
             WHERE parent='.$id;

 $result  = mysql_query($request)or
                    die("There was a MySQL error".mysql_error());
    $nrows  = mysql_num_rows($result);
    if ($nrows>0) {
                    
 #while ($row = mysql_fetch_array($result))
 while(list($title,$cdata,$packaging,$producer,$type,$price_opt,$price_roz) = mysql_fetch_row($result)) 
 {
 
 echo ("</td><td>$title  </td><td>$cdata  </td><td>$packaging  </td><td>$producer  </td><td>$type  </td><td>$price_opt  </td><td>$price_roz</td></tr>");
 
 }           
 echo "</table>\n";
   } else 
        echo "<center><font color='Red'>Нет информации</font></center><br><br>";




и все заработало почему хочется же разобраться? блин а у меня все выборки берутся из массива , что
все переделывать???

Автор: smartov 29.3.2006, 13:49
Так ты покажи что было до
что после
что поменял

Автор: Владимир777 29.3.2006, 14:12
было

Код

$request = 'SELECT *
             FROM delf_price
             WHERE parent='.$id;

 $result  = mysql_query($request);

 while ($row = mysql_fetch_array($result))
 {
  echo '<tr style="">
         <td class="td1">'.$row[title].'&nbsp;</td>
         <td class="td1">'.$row[cdata].'&nbsp;</td>
         <td class="td1">'.$row[packaging].'&nbsp;</td>
         <td class="td1">'.$row[producer].'&nbsp;</td>
         <td class="td1">'.$row[type].'&nbsp;</td>
         <td class="td1">'.$row[price_opt].'&nbsp;</td>
         <td class="td1">'.$row[price_roz].'&nbsp;</td>
        </tr>';
 }           
 echo '</table>';


теперь до 700 строки работает а потом затыкается (((

Автор: Владимир777 11.4.2006, 07:52
упростил вопрос
скрипт
Код

$bufOut = ""; 
    while ($row = mysql_fetch_array($result)) 
 { 
   $bufOut .= $row['title'].' '.$row['cdata'].' '.$row['packaging'].' '.$row['producer'].' '.$row['type'].' '.$row['price_opt'].' '.$row['price_roz'].' '; 
 } 
  echo $bufOut;



выводит более 1000 строк, но мне нужен вывод в табличном виде и с чекбоксами
Я в этом же скрипте добавляю:

Код

?> 
<form action="/search/psearch.php" method="POST"> 
<table width="100%" style="margin-left: 2px" margin-right: 2px; margin-bottom: 2px border="1" cellpadding="3" cellspacing="0" class="sx6_big"><tr style="font-weight: bold;"> 
<td width="30%" >Наименование</td> 
<td width="10%">Дополнительно</td> 
<td >Фасовка</td> 
<td >Производ.</td> 
<td >Ед.изм.</td> 
<td >Опт.цена</td> 
<td >Роз.цена</td> 
<td width="15%" >Фирма</td> 
<td width="10%" >Телефон</td> 
<td>Выбор</td></tr> 

<? 

$bufOut = ""; 
while ($row = mysql_fetch_array($result)) 
{ 
$bufOut .= '<td>'.$row['ptitle'].'&nbsp;</td> 
        <td>'.$row['cdata'].'&nbsp;</td> 
        <td>'.$row['packaging'].'&nbsp;</td> 
        <td>'.$row['producer'].'&nbsp;</td> 
<td>'.$row['type'].'&nbsp;</td>  
<td>'.$row['price_opt'].'&nbsp;</td> 
        <td>'.$row['price_roz'].'&nbsp;</td> 
<td><a href="/company/?id='.$row['id'].'" target="_blank" class="sx5">'.$row['ctitle'].'</a></td><td>'.$row['phone'].'</td> 
    <td><input type="checkbox" name="nameId[]" value='.$row['id_price'].' checked> 
        </td></tr>'; 
} 
echo $bufOut; 

echo "</table>\n"; 
?><br><p align="right"><input type=submit name=submit value="Выбрать"></p> 

</form><?  


Выводится только около 200 строк и IE затыкается на все время на разных местах выводимых строк,
может быть дело тэгах таблицы?

Автор: smartov 11.4.2006, 13:39
Скрипт в сети?
Линка есть?

Автор: Владимир777 12.4.2006, 07:55
скрипт на локальном сервере, самый простой вид

Код

<? 
 include "../dbconf.inc.php"; 
 include "../config.php"; 

 ?> 
<head> 
        <title>111</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> 
          </head> 
<? 

 $request = 'SELECT title, cdata,packaging,producer,type,price_opt,price_roz 
             FROM delf_price'; 

 $result  = mysql_query($request)or 
                    die("There was a MySQL error".mysql_error()); 
    $nrows  = mysql_num_rows($result); 
     
     

    if ($nrows>0) { 
    ?> 
<table width="100%" style="margin-left: 2px" margin-right: 2px; margin-bottom: 2px border="1" cellpadding="3" cellspacing="0" class="sx6_big"><tr style="font-weight: bold;">  
<td width="30%" >Наименование</td>  
<td width="10%">Дополнительно</td>  
<td >Фасовка</td>  
<td >Производ.</td>  
<td >Ед.изм.</td>  
<td >Опт.цена</td>  
<td >Роз.цена</td></tr>  
         
    <?                 
$bufOut = ""; 
#while (($row = mysql_fetch_array($result))) 
# { 
#  $bufOut .= $row['title'].' '.$row['cdata'].' '.$row['packaging'].' '.$row['producer'].' '.$row['type'].' '.$row['price_opt'].' '.$row['price_roz']."\n"; 
# } 
#echo $bufOut; 

while ($row = mysql_fetch_array($result)) 
 { 
  $bufOut .=   '<td>'.$row['title'].'&nbsp;</td> 
         <td>'.$row['cdata'].'&nbsp;</td> 
         <td>'.$row['packaging'].'&nbsp;</td> 
         <td>'.$row['producer'].'&nbsp;</td> 
         <td>'.$row['type'].'&nbsp;</td>   
         <td>'.$row['price_opt'].'&nbsp;</td> 
         <td>'.$row['price_roz'].'&nbsp;</td></tr>'; 
 } 
  
 echo $bufOut; 
  
echo '/table>'; 
  
   } else  
        echo "<center><font color='Red'>Нет информации</font></center><br><br>";  
     
?> 



неработает, пытается вывести строчки, опять экран пустой , опять пытается вывести, дергается секунд 10 потом затыкается на какой нибудь строчке посередине, внешний вид в прикрепленном файле
чуть изменить скрипт


Код

<? 
 include "../dbconf.inc.php"; 
 include "../config.php"; 
  
 ?> 
<head> 
        <title>111</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> 
          </head> 
<? 

 $request = 'SELECT title, cdata,packaging,producer,type,price_opt,price_roz 
             FROM delf_price'; 

 $result  = mysql_query($request)or 
                    die("There was a MySQL error".mysql_error()); 
    $nrows  = mysql_num_rows($result); 
     
    if ($nrows>0) { 
     
$bufOut = ""; 
while (($row = mysql_fetch_array($result))) 
 { 
  $bufOut .= $row['title'].' '.$row['cdata'].' '.$row['packaging'].' '.$row['producer'].' '.$row['type'].' '.$row['price_opt'].' '.$row['price_roz']."\n"; 
 } 
echo $bufOut; 
  
   } else  
        echo "<center><font color='Red'>Нет информации</font></center><br><br>";  
     
?> 


убрал табличный вид работает за доли секунды, как это объяснить?

наверно у меня дело в настройках php.ini
или httpd.conf
или в компонентах
php-5.0.4-Win32
apache_2.0.54-win32-x86-no_ssl.msi
mysql-5.0.9-beta-win32.zip

Автор: smartov 12.4.2006, 10:41
Владимир777, уй товарищ.
Во первых у тебя в коде куча ошибок. И html код получится невалидный.

1) Например там где у тебя должны начинаться строки таблицы ты сразу начинаешь с td
А как же tr открыть?
Код
while ($row = mysql_fetch_array($result)) 
 { 
  $bufOut .=   '<td>'.$row['title'].'&nbsp;</td> 


2) Это новый тег такой?
Код
echo '/table>'; 


3) Стыдно. Тебе даже vingrad ошибки подсветил....
Код
<table width="100%" style="margin-left: 2px" margin-right: 2px; margin-bottom: 2px border="1"

Вся эта пофигень должна быть в теге style!
Код
<table width="100%" style="margin-left: 2px;margin-right: 2px; margin-bottom: 2px" border="1"


4) Зачем все складировать в одну переменку? (bufOut) Ну все равно же никак дальше не обрабатываешь. Выплевывай сразу все в output. (т.е. от bufOut можно избавиться)

ну и 5) таблицы это конечно круто и удобно. Но таблицы ВСЕГДА тормозят при больших объемах данных. Особенно если все это - одна огромная таблица. Делай или div-aми вообще или по крайней мере каждый ряд (или каждые 10-20 рядов) должны быть отдельной таблицей. Firefox огромные таблицы вообще плохо переваривает...
Добавлено @ 10:44
Посмотрел приложенный файл ошибка
Ты б хоть сам сначала просмотрел. Там же невалидный html как я и говорил. Куча ошибок
А сам документ весь полностью и целиком на месте.
Догрузился он ВЕСЬ. Так что PHP ни в чем не виноват.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)