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]   

> Описание: Пожалуйста помогите разобраться.
gosha
Отправлено: 05 Февраля, 2011 - 12:21:41
Post Id


Новичок


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


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




Для меня написан парсер все работает отлично но не совсем.
Фишка такая что я ввёл несколько кодов запчастей в свою форму. Создается ссесия с сайтом откуда берется таблица. То есть форма должна выдать например 15 позиций ввиде таблицы, а она выдает 7
Таблица выводит данные через одну строку. То есть первая строка выдается вторая куда-то пропадает, третья выдается и т.д. Потерял всякую надежду добиться результата
Скорее всего ошибка в этом коде, может посоветуете чего-нибудь:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. /$dom =domxml_new_doc("1.0");
  3. /var_dump(domxml_open_mem("<html><head></head><body><p></body></html"));
  4.  require('includes/application_top.php');
  5.  if (!tep_session_is_registered('customer_id')) {
  6.    tep_redirect(tep_href_link(FILENAME_LOGIN));
  7.  }
  8.   require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_AVOFORM);
  9.  
  10.  $breadcrumb->add(NAVBAR_TITLE, tep_href_link(FILENAME_AVOFORM));
  11. ?>
  12. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml" <?php echo HTML_PARAMS; ?>>
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>" />
  16. <base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>" />
  17. <link rel="stylesheet" type="text/css" href="stylesheet.css" />
  18. </head>
  19. <body>
  20. <!-- header //-->
  21. <?php require(DIR_WS_INCLUDES . 'header.php'); ?>
  22. <!-- header_eof //-->
  23.  
  24. <!-- body //-->
  25. <table border="0" width="100%" cellspacing="3" cellpadding="3">
  26.   <tr>
  27.     <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
  28. <!-- left_navigation //-->
  29. <?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
  30. <!-- left_navigation_eof //-->
  31.     </table></td>
  32.    
  33.    
  34. <!-- body_text //-->
  35.     <td width="100%" valign="top">
  36.         <table border="0" width="100%" cellspacing="0" cellpadding="0">
  37.         <tr>
  38.                 <td>
  39.                         <table border="0" width="100%" cellspacing="0" cellpadding="0">
  40.                         <tr>
  41.                         <td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
  42.                         </tr>
  43.                         </table>
  44.                 </td>
  45.                 </tr>
  46.         <tr>
  47.                 <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
  48.         </tr>
  49.         <tr>
  50.                 <td>
  51.                         <table border="0" width="100%" cellspacing="0" cellpadding="2">
  52.                         <tr>
  53.                         <td class="main"><?php include(DIR_WS_MODULES . FILENAME_AVOFORM);
  54.                                          ?></td>
  55.                         </tr>
  56.                         </table>
  57.                 </td>
  58.         <tr>
  59.                 <td>
  60.           <?php
  61.   if ($_POST){
  62. /**
  63.  * удаляет html теги
  64.  * @param document string  html-блок
  65.  * @return  string строка без html тегов
  66.  */
  67. function del_html($document){
  68.         $search = array ("'<script[^>]*?>.*?</script>'si",  
  69.                  "'<[\/\!]*?[^<>]*?>'si",          
  70.                  "'([\r\n])[\s]+'",                
  71.                  "'&(quot|#34);'i",                  
  72.                  "'&(amp|#38);'i",
  73.                  "'&(lt|#60);'i",
  74.                  "'&(gt|#62);'i",
  75.                  "'&(nbsp|#160);'i",
  76.                  "'&(iexcl|#161);'i",
  77.                  "'&(cent|#162);'i",
  78.                  "'&(pound|#163);'i",
  79.                  "'&(copy|#169);'i",
  80.                  "'&#(\d+);'e");                    
  81.         $replace = array ("",
  82.                   "",
  83.                   "\\1",
  84.                   "\"",
  85.                   "&",
  86.                  "<",
  87.                  ">",
  88.                  " ",
  89.                  chr(161),
  90.                  chr(162),
  91.                  chr(163),
  92.                  chr(169),
  93.                  "chr(\\1)");
  94.  
  95.         $text = preg_replace($search, $replace, $document);
  96.         return $text;
  97. }
  98.  
  99. /**
  100.  * Создает POST-data из массива
  101.  * @param arr array исходный массив
  102.  * @param dop string[optional] <p>
  103.  * Если дополнительный параметр задам тогда будет сформироманна строка
  104.  * массив с именем <b>dop</b>
  105.  * </p>
  106.  * @return string POST-data
  107.  */
  108. function postpars($arr,$dop=""){
  109. if (!is_array($arr)) return NULL;
  110. $keys=array_keys($arr);
  111. $data="";
  112. foreach ($keys as $key){
  113.         if ($data) $data.="&";
  114.         if (is_array($arr[$key])) $data.=postpars($arr[$key],$key);
  115.         else{
  116.     if ($dop) $data.=$dop."%5B".$key."%5D=".$arr[$key];
  117.         else $data.=$key."=".$arr[$key];
  118. }
  119. }
  120. //echo $data;
  121. return $data;
  122. }
  123.  
  124.  
  125.  
  126. error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
  127. $data=postpars($_POST);
  128. if ($data==NULL) die('Ошибка POST запроса');
  129. $ReqArr=array(
  130. 'Type'=>'GET',
  131. 'Host'=>'avo.ee',
  132. 'Location'=>'/',
  133. 'Cache-Contriol'=>'max-age=0',
  134. 'User-Agent'=>'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7',
  135. 'Accept-Charset'=>'utf-8,utf-8;q=0.7,*;q=0.3',
  136. 'Accept-Language'=>'ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
  137. 'Connection'=>'keep-alive'
  138. );
  139.  
  140.  
  141. /**
  142.  * Создает HTTP-запрос из массива
  143.  * @param $ReqArr array
  144.  * @return string HTTP-запрос
  145.  */
  146.  
  147. function CreateRequest($ReqArr){
  148.         if (!is_array($ReqArr)) return NULL;
  149.         if (!(isset($ReqArr['Type'])&&isset($ReqArr['Host'])&&isset($ReqArr['Location']))) return NULL;
  150.     $nl="\r\n";
  151.     $request=$ReqArr['Type']." ".$ReqArr['Location']." HTTP/1.1".$nl;
  152.         $request.="Host: ".$ReqArr['Host'].$nl;
  153.         $KeysArr=array_keys($ReqArr);
  154.         foreach ($KeysArr as $Key){
  155.                 if ($Key!='Type' && $Key!='Host' && $Key!='Location' && $Key!='PostData')
  156.                         $request.=$Key.': '.$ReqArr[$Key].$nl;
  157.         }
  158.         if ($ReqArr['Type']=='POST' && $ReqArr['PostData']!=NULL) {
  159.                 $request.="Content-Length: ".strlen($ReqArr['PostData']).$nl;
  160.                 $request.="Content-Type: application/x-www-form-urlencoded".$nl;
  161.                 $request.=$nl;
  162.                 $request.=$ReqArr['PostData'];
  163.         }
  164.         else    $request.=$nl;
  165.     return  $request;
  166. }
  167. /**
  168.  * Загружает данные по HTTP-запросу из массива
  169.  * @param $ReqArr array
  170.  * @param $onlyHeader bool[optional]
  171.  * <p>Если onlyHeader=true,тогда получается только заголовок ответа</p>
  172.  * @return string
  173.  */
  174. function HTTPConnect(&$ReqArr,$onlyHeader=false){
  175.         $request=CreateRequest($ReqArr);
  176.         $f_h=fsockopen($ReqArr['Host'],80);
  177.         if (!$f_h) {return NULL;}
  178.         fwrite($f_h,$request);
  179.         $responce="";
  180.         while(!feof($f_h)){
  181.                 $responce.=fgetc($f_h);
  182.                 if  ($onlyHeader){
  183.                                 $str=substr($responce,strlen($responce)-4,4);
  184.                                 if ($str=="\r\n\r\n"){
  185.                                         $res_line=preg_split("/\r\n/",$responce);
  186.                                         foreach ($res_line as $iX){
  187.                                                 if (substr($iX,0,11)=="Set-Cookie:")
  188.                                                         $ReqArr['Cookie']=substr($iX,12,strlen($iX)-12);
  189.                                         }
  190.                                 break;
  191.                                 }
  192.                                
  193.                 }      
  194.         }
  195. fclose($f_h);
  196. return $responce;
  197. }
  198. if (HTTPConnect($ReqArr,true)==NULL) {
  199.         exit ("Подключение не удалось");
  200. }
  201. //username=tttt&password=ttttt2
  202.   $q="SELECT * FROM avo_conf limit 3";
  203. $tid=tep_db_query($q);
  204. $login;
  205. $pass;
  206. $k;
  207. while ($res=mysql_fetch_array($tid)){
  208.         $$res[1]=$res[2];
  209.  
  210. }
  211. $K_II=$k;
  212. $ReqArr['Type']='POST';
  213. $ReqArr['Location']='/clients/login/';
  214. $ReqArr['PostData']='username='.$login.'&password='.$pass;
  215. if (HTTPConnect($ReqArr,true)==NULL) {
  216.         exit ("Подключение не удалось");
  217. }
  218.  
  219. $ReqArr['Location']="/parts/query/language/ru/";
  220. $ReqArr['PostData']=postpars($_POST);
  221. $responce=HTTPConnect($ReqArr);
  222. if ($responce==NULL)
  223.         exit ("Подключение не удалось");       
  224.  
  225.  
  226. //$dom =domxml_new_doc();
  227.  
  228. $html=preg_split("/\<html/",$responce);
  229. $html="<html".$html[1];
  230. $cDet=0;
  231. $dom=new DOMDocument();
  232. $dom->loadHTML($html);
  233. $tables=$dom->getElementsByTagName("table");
  234. foreach ($tables as $table){
  235.         if ($table->getAttribute("class")=="queryTable"){
  236.             $html='<html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  237.         </head><body>'.$dom->saveXML($table)."</body></html>";
  238.            
  239.             $dom->loadHTML($html);
  240.                 $trs=$dom->getElementsByTagName("tr");
  241.                                 $iVen=-1;
  242.         $Product=array();
  243.        
  244.                 foreach ($trs as $tr){
  245.                         //
  246.   $html1='<html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  247.         </head><body>'.$dom->saveXML($tr)."</body></html>";
  248.  
  249. $dom1=new DOMDocument();
  250.   $dom1->loadHTML($html1);
  251.   $ths=$dom1->getElementsByTagName("th");
  252.  if ($ths->length >0){
  253.   $html1='<html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  254.         </head><body>'.$dom1->saveXML($ths->item(0))."</body></html>";
  255.   $dom1->loadHTML($html1);
  256.   $spans=$dom1->getElementsByTagName("span");
  257.  
  258.   foreach ($spans as $span){
  259.         //echo $span->getAttribute("class");
  260.         if ($span->getAttribute("class")=="makeHeading"){
  261.                 $iVen++;
  262.                 $Product[$iVen]['vendor']=del_html($dom1->saveXML($span));
  263.                 $Product[$iVen]['data']=array();
  264.                 $iD=-1;
  265.                 break;
  266.         }
  267.   }
  268.  } else{
  269.         if ($tr->getAttribute("class")=="row"){
  270.                 //echo  $dom->saveXML($tr);//;123578
  271.                 $html1='<html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  272.         </head><body>'.$dom->saveXML($tr)."</body></html>";
  273.                 $dom1->loadHTML($html1);
  274.                 $tds=$dom1->getElementsByTagName("td");
  275.                 $iD++;
  276.                 $Product[$iVen]['data'][$iD]=array();
  277.                 $Product[$iVen]['data'][$iD]['id']=$cDet;
  278.                 $Product[$iVen]['data'][$iD]['sNumber']=del_html($dom1->saveXML($tds->item(1)));
  279.                 $Product[$iVen]['data'][$iD]['fNumber']=del_html($dom1->saveXML($tds->item(2)));
  280.                 $Product[$iVen]['data'][$iD]['about']=del_html($dom1->saveXML($tds->item(3)));
  281.                 $Product[$iVen]['data'][$iD]['rPrise']= del_html($dom1->saveXML($tds->item(5)));
  282.                 $Product[$iVen]['data'][$iD]['sPrise']= del_html($dom1->saveXML($tds->item(7)));
  283.                 $Product[$iVen]['data'][$iD]['nPrise']=del_html($dom1->saveXML($tds->item(8)));                
  284.                 $Product[$iVen]['data'][$iD]['about']=iconv("UTF-8","UTF-8", preg_replace("/\n/","",$Product[$iVen]['data'][$iD]['about']));
  285.                 $Product[$iVen]['data'][$iD]['nPrise']=preg_replace("/\s/","",$Product[$iVen]['data'][$iD]['nPrise'])*$K_II;
  286.                 $cDet++;
  287.  
  288.         }
  289.        
  290.        
  291.        
  292.  }
  293.                                                 //$th=$tr->getElementsByTagName("th");
  294.                         //var_dump($tr);
  295.                         ///if (!is_object($th))echo $th;
  296.                         //else echo $th->item[0];
  297.                 }
  298.                 break;
  299.         }
  300. }
  301. error_reporting(E_ALL ^ E_NOTICE);
  302. $Product; //-готовый продукт)))
  303.    }
  304.  elseif (isset($_GET['Avo_table']) && $_GET['Avo_table']==1){
  305.  $Product=$_SESSION['Avo'];    
  306.  }  
  307.    
  308. define(PRODUCT_LISTING_DISPLAY_STYLE ,'list');
  309.   echo tep_draw_separator('pixel_trans.gif', '100%', '10');
  310.  
  311.   if (PRODUCT_LISTING_DISPLAY_STYLE == 'list' &&  is_array($Product)) {
  312.            $_SESSION['Avo'] =$Product;  
  313.  
  314.         $list= array(BOX_SEARCH_PART,BOX_WAS_SEARCH,BOX_DESCRIPTION,BOX_PRICE,BOX_BUY);
  315.      foreach ($Product as $VendorArrays){
  316.        
  317. //echo ("<p class='pageHeading'>".$VendorArrays['vendor']."</p>");
  318.  
  319.         $list= array("Искомая деталь", "Найденая","Описание","Цена","PRODUCT_LIST_BUY_NOW");
  320.         $list_box_contents=array();
  321.              $list_box_contents[0][] = array('align' => 'left',
  322.                                       'params' => 'class="productListing-heading" colspan="5"',
  323.                                       'text' => '&nbsp;' . $VendorArrays['vendor']. '&nbsp;');
  324.       foreach($list as $lc_text){
  325.         if ($lc_text=='PRODUCT_LIST_BUY_NOW')        $lc_text ="Купить";
  326.         $list_box_contents[1][] = array('align' => $lc_align,
  327.                                       'params' => 'class="productListing-heading" ',
  328.                                       'text' => '&nbsp;' . $lc_text . '&nbsp;');
  329.     }
  330.         $rows = 0;
  331.       foreach ($VendorArrays['data'] as $detal){
  332.      
  333.        $rows++;
  334.  
  335.         if (($rows/2) == floor($rows/2)) {
  336.           $list_box_contents[] = array('params' => 'class="productListing-even"');
  337.         } else {
  338.           $list_box_contents[] = array('params' => 'class="productListing-odd"');
  339.         }
  340. $cur_row = sizeof($list_box_contents) - 1;
  341.      $list_box_contents[$cur_row][] = array('align' => $lc_align,
  342.                                                  'params' => 'class="productListing-data"',
  343.                                                  'text'  => $detal['sNumber']);
  344.           $list_box_contents[$cur_row][] = array('align' => $lc_align,
  345.                                                  'params' => 'class="productListing-data"',
  346.                                                  'text'  =>  $detal['fNumber']);
  347.                $list_box_contents[$cur_row][] = array('align' => $lc_align,
  348.                                                  'params' => 'class="productListing-data"',
  349.                                                  'text'  =>  $detal['about']);
  350.                     $list_box_contents[$cur_row][] = array('align' => $lc_align,
  351.                                                  'params' => 'class="productListing-data"',
  352.                                                 'text'  =>  round($detal['nPrise'],2));
  353.            
  354.                  //   echo  tep_session_id($ss)."<br>";
  355.                  
  356.                              $lc_text = '<form name="cart_quantity" method="post" action="' . tep_href_link(basename($PHP_SELF), tep_get_all_get_params($detal) . 'action=add_product&products_id=' .$detal['id']) .'">
  357.                              <input type="hidden" name="avo_product" value="1" >
  358.                              <input type="hidden" name="products_id" value="'.$detal['id'].'" >
  359.                              <input type="text" name="cart_quantity" value="1" maxlength="3" size="3">
  360.                              &nbsp;' . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART) . '</form>';
  361.                    
  362.                          $list_box_contents[$cur_row][] = array('align' => 'center',
  363.                                                  'params' => 'class="productListing-data" ',
  364.                                                  'text'  => $lc_text);
  365.          
  366.  
  367.       }
  368.    
  369.   // var_dump($list_box_contents);
  370.    new productListingBox($list_box_contents);
  371.  
  372. //var_dump($_SESSION);
  373.      }
  374.  
  375.   }
  376. /*
  377.    $list= array("Искомая деталь", "Найденая","Описание","Цена","PRODUCT_LIST_BUY_NOW");
  378.  //echo "<";
  379.   $list_box_contents=array();
  380.  
  381.   //$Product=arraay();
  382.      $rows = 0;
  383.      foreach ($VendorArrays['data'] as $detal){
  384.      
  385.       $rows++;
  386.        if (($rows/2) == floor($rows/2)) {
  387.          $list_box_contents[] = array('params' => 'class="productListing-even"');
  388.         } else {
  389.           $list_box_contents[] = array('params' => 'class="productListing-odd"');
  390.         }
  391. $cur_row = sizeof($list_box_contents) - 1;
  392.        
  393.  
  394.         foreach($detal as $col){
  395.         $lc_text =$col;
  396.       $list_box_contents[$cur_row][] = array('align' => $lc_align,
  397.                                                  'params' => 'class="productListing-data"',
  398.                                                  'text'  => $lc_text);
  399.         }
  400.         new productListingBox($list_box_contents);
  401.       }}}
  402. /*
  403.           case 'PRODUCT_LIST_BUY_NOW':
  404.              $lc_align = 'center';
  405.               $lc_text = '<form name="cart_quantity" method="post" action="' . tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action')) . 'action=add_product&products_id=' . $listing['products_id']) . '"><input type="hidden" name="products_id" value="' . $listing['products_id'] . '"><input type="text" name="cart_quantity" value="1" maxlength="3" size="3">&nbsp;' . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART) . '</form>';
  406.              if ($listing['products_quantity'] <= 0 && STOCK_CHECK == 'true') $lc_text = '&nbsp;';
  407.             break;
  408.        }
  409.      }
  410.  
  411.  
  412.  
  413.  
  414.  }
  415.  }
  416.  echo PRODUCT_LISTING_DISPLAY_STYLE;
  417.  */
  418.  
  419.  
  420.  
  421. ?>
  422.  
  423.          
  424.          
  425.          
  426.          
  427.          
  428.          
  429.          
  430.          </td>
  431.       </tr>
  432.     </table></td>
  433. <!-- body_text_eof //-->
  434.  
  435.  
  436.  
  437.     <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
  438. <!-- right_navigation //-->
  439. <?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
  440. <!-- right_navigation_eof //-->
  441.     </table></td>
  442.   </tr>
  443. </table>
  444. <!-- body_eof //-->
  445.  
  446. <!-- footer //-->
  447. <?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
  448. <!-- footer_eof //-->
  449. </body>
  450. </html>
  451. <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

(Отредактировано автором: 05 Февраля, 2011 - 14:18:42)

 
 Top
LEONeso
Отправлено: 05 Февраля, 2011 - 14:10:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


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




от куда наплыв людей, которые простят тему без оформления bb?

gosha, оформите тему как полагается, код трудночитабелен, никто не будет тратить свое время на такое безобразие... !


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
DiosPA
Отправлено: 05 Февраля, 2011 - 21:01:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Янв. 2011  
Откуда: Россия


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




я если честно в обще не понимаю как можно анализировать такие огромные блоки кода без описания...
 
 Top
Invert
Отправлено: 07 Февраля, 2011 - 16:16:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 223
Дата рег-ции: Нояб. 2010  


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




Я бы даже за деньги не взялся искать ошибки.
После такого кода хочется выпить мышьяка, не обижайтесь.
 
 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