PHP.SU

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

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

> Найдено сообщений: 8
Lexus277 Отправлено: 30 Апреля, 2014 - 14:48:05 • Тема: Запрос дабавления в базу • Форум: Работа с СУБД

Ответов: 5
Просмотров: 1800
Здравствуйте у меня другой вопрос , есть допустим обертка для PDO
тут все нормально , вызываем объект PDO в свойство класса. все ок.
с выборкой , удалением и обновлением записи все нормально , а вот добавление с опущеным AUTO_INCREMENT значением `uid` , ведет за собой дублированое добавление записи , тоесть 2 шт!!!! Не понял Не понял , но если я явно укажу значение `uid` то дублирования не произойдет и ошибки не будет , уверен что в самом скрипте нигде нет дублирование запроса, т.к вызовы единичны.
заметил что добавление второй записи (дубля) происходит когда скрипт заканчивает свое выполнение.
отмечу что у меня такая проблема только с PDO ( PDO::exec($sql) && PDO::query($sql) ) с msql_query(); такого небыло.
может AUTO_INCREMENT что-то барахлит или конфигурация таблицы или самой БД(MyIsam) ведет за собой подобное явление.?

CODE (php):
скопировать код в буфер обмена
  1. $table = 'jms_test_users';
  2. self::loadClass( 'xPDO' , $pdo );
  3.                
  4. $xpdo->Table_Insert_Row(array(
  5.         'table' => $table,
  6.         'set'   => array(
  7.                 'uid'           => null,
  8.                 'name'          =>'simple_name',
  9.                 'family'        =>'simple_family',
  10.                 'telephone'     =>'89-76-45',
  11.                 'location'      =>'New-Orlean',
  12.                 'policy_group'  =>'Members'
  13.         )
  14. ));
  15.                
  16. $result = $xpdo->Table_Get_Collection(array(
  17.           'table'       => $table
  18. ));
  19. echo xPDO::GetResultHtml($result);

код Table_Insert_Row( array $params=array() )
PHP:
скопировать код в буфер обмена
  1. public function Table_Insert_Row(array $params = array() ){
  2.         if(!is_array($params['set']) || empty($params['table']) )
  3.          throw new Exception('Не указаны главные параметры');
  4.         self::inputFilter( $params['table'] );
  5.         $sql = 'INSERT INTO '.$params['table'].' SET '.self::getKeyValueSql( $params['set'] ) . ';';
  6.        
  7.         $data = $this->pdo->exec($sql);
  8.                
  9.         return $data;
  10. }

$this->pdo->exec($sql); всегда возвращает int(1) кол-во затронутых строк. тоесть все ок. и в то-же время труднее т.к отловить проблему счетчиком не удастся. счетчик проблему не на заметит , но вот записи то все-равно две! Дублируются , помогите разобраться.
(Добавление)
Нашел проблему, она заключается не в PDO а в .htaccess
были такие строки
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteEngine on
  2.  RewriteBase /
  3.  RewriteCond %{SCRIPT_FILENAME} !-f
  4.  RewriteCond %{SCRIPT_FILENAME} !-d
  5.  RewriteRule ^.*$ index.php [L]

этот код генерил, повторную загрузку страницы.... тоесть нужно поправить код чтобы страница не генерерировалась дублем тем самым не дублировала сценарий на ней..
Lexus277 Отправлено: 06 Апреля, 2014 - 18:02:27 • Тема: Странно работает Eval в скрипте • Форум: Вопросы новичков

Ответов: 11
Просмотров: 346
Я заметил такую вещь уже конкретно: когда в строке нету логических операторов все нормально, в чем проблема может быть?

Если используется 2 Амперсанда(&&) как оператор "И"
PHP:
скопировать код в буфер обмена
  1. $this->search($body,'Выезд в 7') && $this->actManager($o,'ALG-current-actno') != 1

То вот такая ошибка:
Parse error: syntax error, unexpected T_VARIABLE in Z:\home\hostname\www\controler.php(324) : eval()'d code on line 1
еще в этом случае если
PHP:
скопировать код в буфер обмена
  1. $this->actManager($o,'ALG-current-actno') != 1
обрамить в скобки () то парсер отдает ошибку "Undefined function ()" <-причем в скобках нечего нету.

Если используется AND
PHP:
скопировать код в буфер обмена
  1. $this->search($body,'Выезд в 7') AND $this->actManager($o,'ALG-current-actno') != 1

то ошибка такая:
Parse error: syntax error, unexpected T_STRING in Z:\home\hostname\www\controler.php(324) : eval()'d code on line 1
(Добавление)
проблема в том что хочеться это все дело сделать в окне браузера и создавать новые фильтры когда захочется , так-же была идея садить за пульт блонду, поэтому нужно было упростить чтобы не в файл лазать 20 фильтров смотреть , а селектать из БД и выводить в удобночитаемом формате, и редактировать эти фильтры достаточно быстро , для гибкой подстройки критериев, т.к критерии фильтра сразу не поймеш, что человек напишет в сообщении непонятно - поэтому стало необходимо быстрое редактирование, для быстрого пополнения условий (вт.ч критерий) фильтра, пополнять нужно для того чтобы скрипт мог понимать приблизительно чего хочет человек в письме и отвечать ему автоматом, в след чего это все посадится на JS с автоовызовом функции запуска фильтра если определенное время прошло если комп включен
Lexus277 Отправлено: 06 Апреля, 2014 - 17:22:19 • Тема: Странно работает Eval в скрипте • Форум: Вопросы новичков

Ответов: 11
Просмотров: 346
Снова по непонятной причине появляется эта бага.

В базу записываются не строки , а имена переменных

OrmaJever пишет:
если же в бд вы записываете переменные типа
CODE (htmlphp):
скопировать код в буфер обмена

$var1 == $var2

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

они беруться из текущего письма(текущей итерации) $o == текущий объект заголовков письма , тема, отправитель , имя, дата и кодировка..
$body == тело письма.
вспомогательные функции:
Search($input,$criteries);
Lexus277 Отправлено: 06 Апреля, 2014 - 15:05:40 • Тема: Странно работает Eval в скрипте • Форум: Вопросы новичков

Ответов: 11
Просмотров: 346
Результаты сравнения динамичны их незапишеш как статику в БД, т.к эти фильтры сверяют письма в ящике, а они меняются. для того чтобы решить сам конфликт с этим EVAL да простит меня бог, можно только ограничитсья условиями в самом файле скрипта, а это же неудобно

Eval по моей версии нужен был для реализации интерфейса, редактирования , создания и удаления, прямо из окна браузера, тоесть полное управление фильтрами и их содержанием

можно конечно записать условия без БД непосредственно в ФАЙЛ скрипта, естевственно я лишусь редактирования из браузера, т.к переменную в БД не положиш, а тока имя, которое только EVAL может интерпретировать.
(Добавление)
$o в скрипте меняется, FiltrationDriver применяется при переборе сообщений и выполняет действие в зависимости от совпавшего УСЛОВИЯ:

PHP:
скопировать код в буфер обмена
  1. Foreach($msg_objects as $o){
  2.  filtrationDriver($o);
  3. }

я уже сам запутался в своей системе , код и вправду индусский , могу оправдываться это первый проект с НУЛЯ в прямом смысле начинал его писать когда знал тока как присвоить перенной значение , и в данный момент система содержит около 2.5к строк кода без HTML естевственно. тоесть какбы система из эксперементальной переросла в значимую.
Lexus277 Отправлено: 06 Апреля, 2014 - 14:20:21 • Тема: Странно работает Eval в скрипте • Форум: Вопросы новичков

Ответов: 11
Просмотров: 346
мне нужно хранить строки сравнения (Вне скрипта) в которых содержаться переменные, для последующей подстановки их значений в скрипте, чтобы в итоге получилась адекватная булева FALSE или TRUE в зависимости от значения переменных , в данном случае это тело письма или его тема, чтобы в скрипте подставить в IF(СЮДА)...
Проблему я решил так-же непонятно , как она и появилась (Вырезаю (CTRL-X) кусочек сравнения например 1 критерию которую подозреваю, запускаю фильтр и ОК(работает) затем возвращаюсь и вставляю (CTRL-V) кусочек обратно и нечего не меняется(все работает) , где логика то?), поэтому я не контролирую ситуации и скорее всего такая проблема может возникнуть и еще раз обратно-же по непонятным причинам в неудобное время. надо чтото менять, А может быть в БД строки как-то изменились(ну там побайтово)? ну там заместо англ о стала русс о поэтому не видно глазом и очевидно не ясно было (я выводил(ECHO) строчку (STRING) сравнения сразу до EVAL, и недоумевал ведь все нормально) , причина не ясна. что скажете?
(Добавление)
Это функция в кратце, выполняющая перебор фильтров, так-же в нем есть и другие структуры реализуемые с помощью EVAL но они работали

$o это обьект полей заголовков письма полученый из IMAP
а $body это отдельно вызываемое тело от сообщения если Тема сообщения совпала с activeIf, чтобы не нагружать скрипт и канал связи лишний раз

PHP:
скопировать код в буфер обмена
  1. public function FiltrationDriver($o){
  2.                 //Пока что : в случае если при схождении происходит отправка(без сбоя), то письмо с ящика удалиться(в папку deleted На почте) ,
  3.                 // иначе если нет или если есть но произошол сбой отправки то письма не удалятся
  4.                 //Создаем переменные и функции для подстановки полей в CONDITION;
  5.                 if(!isset($this->filters)){
  6.                         echo '<p>Фильтров не сущевствует</p>';exit;
  7.                 }
  8.                 //Сортировка!
  9.                 foreach($this->filters as $filter){
  10.                         if($filter['active']==1){
  11.                                 if(!isset($filter['condition']) or !isset($filter['action'])){echo '<p>Битый фильтр '.$filter['name'].' [ID:'.$filter['id'].']'.'</p>';break;}
  12.                                 else{
  13.                                         if($this->DBGMODE==1)echo '<h4 style="margin-left:-25px;margin-top:20px;color:#91c02c;">Фильтр '.$filter['name'].':</h4>';
  14.                                         unset($postIF);unset($postACT);
  15.                                         if(preg_match('/(?<=\[POSTIF:)\C*?(?=;\])/i',$filter['condition'],$postIF)){$filter['condition'] = preg_replace('/(\[POSTIF:\C*?;\])/i','',$filter['condition']);}
  16.                                         if(preg_match('/(?<=\[POSTACT:)\C*?(?=;\])/i',$filter['condition'],$postACT)){$filter['condition'] = preg_replace('/(\[POSTACT:\C*?;\])/i','',$filter['condition']);}
  17.                                         if(preg_match('/(?<=\[POSTACT:)\C*?(?=;false\])/i',$filter['condition'],$postACT_false)){$filter['condition'] = preg_replace('/(\[POSTACT:\C*?;false\])/i','',$filter['condition']);}
  18.                                         if($postIF[0]==null){unset($postIF);}else{$postIF = $postIF[0];}
  19.                                         if($postACT[0]==null){unset($postACT);}else{$postACT = $postACT[0];}
  20.                                         if($postACT_false[0]==null){unset($postACT_false);}else{$postACT_false = $postACT_false[0];}
  21.                                        
  22.                                         eval('$activeIF = '.$filter['condition'].';'); //Обрабатываем CONDITION из базы данных в (bool).
  23.                                        
  24.                                         // Фильтр ответчик по условию.
  25.                                         if( isset($filter['action']['sendansweras']) ){
  26.                                                 if(($activeIF) and isset($o) and $o->seen != 1 and $o->from_email != $this->user->login and $this->inspector($o->from_email)!=NULL){
  27.                                                         if($this->DBGMODE==1)echo '<p>АКТИВ IF! сработал!</p>';
  28.                                                         if(isset($postIF)){
  29.                                                                 if($this->DBGMODE==1)echo '<p>POST IF Получен!!</p>';
  30.                                                                 if(preg_match('/\$body/i',$postIF)){
  31.                                                                         if(!isset($body)){
  32.                                                                                 if($this->DBGMODE==1)echo '<p>Получаем тело!</p>';
  33.                                                                                 $m = $this->getBody(imap_msgno($this->mailbox,$o->uid));
  34.                                                                                 if(isset($m['content'])){
  35.                                                                                         $body = preg_replace('/[< ]blockquote\C*сотрудниками\C*[< ][\/ ]blockquote[ >]/','',addcslashes($m['content'],'\''));
  36.                                                                                 }else{echo '<p>Ошибка получения тела письма. Паа глянь код!<p>';exit;}
  37.                                                                         }
  38.                                                                        
  39.                                                                 }
  40.                                                                 if($this->DBGMODE==1)echo '<p>конвертация postIF в булево</p><pre>'             .   $postIF    .        '</pre>';
  41.                                                                
  42.                                                                
  43.                                                                
  44.                                                                 eval('$postIF =  (1==2) and '.$postIF.' ;');
  45.                                                                
  46.                                                                 if($this->DBGMODE==1)echo '<p>булево</p><pre>';var_dump( $postIF ); echo '</pre>';
  47.                                                                
  48.                                                                 if(is_bool($postIF)){
  49.                                                                         if($postIF){
  50.                                                                                 if(isset($postACT)){ eval($postACT.';');                         }
  51.                                                                                 if($this->DBGMODE==1)echo '<p>ПОСТ IF! сработал!</p>';
  52.                                                                                 exit;
  53.                                                                                 if($filter['action']['sendansweras']!='нет'){
  54.                                                                                         // Здесь действия если POSTIF условия выполнились.
  55.                                                                                         $msg['Bcc']             = $this->inspector($o->from_email);
  56.                                                                                         $msg['Uid']             = $o->uid;
  57.                                                                                         $msg['Msgno']   = $o->msgno;
  58.                                                                                         $this->filterData[$filter['action']['sendansweras']][] = $msg;
  59.                                                                                 }else{
  60.                                                                                         if($this->DBGMODE==1)echo '<p>Фильтр выполнен без отправки письма (Не выбран шаблон)</p>';
  61.                                                                                 }
  62.                                                                                
  63.                                                                                 if(isset($filter['alert'])){
  64.                                                                                         echo '<p>'.$filter['alert'].'</p>';
  65.                                                                                         if(isset($filter['alertglobal']) and $filter['alertglobal'] == 1){
  66.                                                                                                 $_SESSION['ALERTS'][] = '<p>Фильтр ['.$filter['name'].']: '.$filter['alert'].'</p>';
  67.                                                                                         }
  68.                                                                                 }
  69.                                                                                 return true;
  70.                                                                         }else{
  71.                                                                                 if(isset($postACT_false)){
  72.                                                                                         eval('$postACT_false = '.$postACT_false.';'.$postACT_false);
  73.                                                                                         echo '<p>['.$filter['name'].'] Выполнен постакт</p>';
  74.                                                                                         if(isset($filter['alertglobal']) and $filter['alertglobal'] == 1){
  75.                                                                                                 $_SESSION['ALERTS'][] = '<p>Фильтр ['.$filter['name'].']: Выполнен постакт</p>';
  76.                                                                                         }
  77.                                                                                 }
  78.                                                                                 if($this->DBGMODE==1)echo '<p>POST IF! не сработал</p>';
  79.                                                                         }
  80.                                                                 }else{echo '<p>Ошибка FiltrationDriver:sendansweras $postIF не является булевой</p>';exit;}
  81.                                                         }
  82.                                                         else{
  83.                                                                 if($this->DBGMODE==1)echo '<p>POST IF НЕ!Получен!!</p>';
  84.                                                                 $msg['Bcc']             = $this->inspector($o->from_email);
  85.                                                                 $msg['Uid']             = $o->uid;
  86.                                                                 $msg['Msgno']   = $o->msgno;
  87.                                                                 $this->filterData[$filter['action']['sendansweras']][] = $msg;
  88.                                                                 if(isset($postACT)){
  89.                                                                         eval($postACT);
  90.                                                                 }
  91.                                                                 if(isset($filter['alert'])){
  92.                                                                         echo '<p>'.$filter['alert'].'</p>';
  93.                                                                         if(isset($filter['alertglobal']) and $filter['alertglobal'] == 1){
  94.                                                                                 $_SESSION['ALERTS'][] = '<p>Фильтр ['.$filter['name'].']: '.$filter['alert'].'</p>';
  95.                                                                         }
  96.                                                                 }
  97.                                                                 return true;
  98.                                                         }
  99.                                                 }
  100.                                         }
  101.                                         // Фильтр с выполнением определенной команды.
  102.                                         if( isset($filter['action']['individual']) ){
  103.                                                 $individual = $filter['action']['individual'];
  104.                                                 if($activeIF){
  105.                                                         if(isset($postIF)){
  106.                                                                 if($this->DBGMODE==1)echo '<p>POST IF Получен!!</p>';
  107.                                                                 if(preg_match('/\$body/i',$postIF)){
  108.                                                                         if(!isset($body)){
  109.                                                                                 if($this->DBGMODE==1)echo '<p>Получаем тело!</p>';
  110.                                                                                 $m = $this->getBody(imap_msgno($this->mailbox,$o->uid));
  111.                                                                                 if($this->DBGMODE==1)echo '<p>Тело получено - отрабатываем контент письма!</p>';
  112.                                                                                 if(isset($m['content'])){
  113.                                                                                         $body = $m['content'];
  114.                                                                                         if($this->DBGMODE==1)echo '<p>контент получен!!!</p><pre>'.$body.'</pre>';
  115.                                                                                 }else{echo '<p>Ошибка получения тела письма. Паа глянь код!<p>';exit;}
  116.                                                                         }
  117.                                                                        
  118.                                                                 }
  119.                                                                 eval('\$postIF = '.$postIF.';');
  120.                                                                 if(is_bool($postIF)){
  121.                                                                         if($postIF){
  122.                                                                                 // Здесь действия если POSTIF условия выполнились.
  123.                                                                                 $off='';$on='';
  124.                                                                                 if(isset($individual['answered'])){
  125.                                                                                         $Answered = '\\Answered ';if($individual['answered']==2){$off.=$Answered;}elseif($individual['answered']==1){$on.=$Answered;}
  126.                                                                                 }
  127.                                                                                 if(isset($individual['flagged'])){
  128.                                                                                         $Flagged = '\\Flagged ';if($individual['flagged']==2){$off.=$Flagged;}elseif($individual['flagged']==1){$on.=$Flagged;}
  129.                                                                                 }
  130.                                                                                 if(isset($individual['seen'])){
  131.                                                                                         $Seen = '\\Seen ';if($individual['seen']==2){$off.=$Seen;}elseif($individual['seen']==1){$on.=$Seen;}
  132.                                                                                 }
  133.                                                                                 if(isset($individual['deleted'])){
  134.                                                                                         $Deleted = '\\Deleted ';if($individual['deleted']==2){$off.=$Deleted;}elseif($individual['deleted']==1){$on.=$Deleted;}
  135.                                                                                 }
  136.                                                                                 if($off!=''){imap_clearflag_full($this->mailbox,$o->uid,$off,ST_UID);}
  137.                                                                                 if($on!=''){imap_setflag_full($this->mailbox,$o->uid,$on,ST_UID);}
  138.                                                                                 if(isset($individual['deleted']) and $individual['deleted']==1){
  139.                                                                                         imap_expunge($this->mailbox);
  140.                                                                                 }
  141.                                                                                 if(isset($individual['individualaction'])){
  142.                                                                                         eval($individual['individualaction']);
  143.                                                                                 }
  144.                                                                                 if(isset($postACT)){
  145.                                                                                         eval($postACT);
  146.                                                                                 }
  147.                                                                                 if(isset($filter['alert'])){
  148.                                                                                         echo '<p>'.$filter['alert'].'</p>';
  149.                                                                                         if(isset($filter['alertglobal']) and $filter['alertglobal'] == 1){
  150.                                                                                                 $_SESSION['ALERTS'][] = '<p>Фильтр ['.$filter['name'].']: '.$filter['alert'].'</p>';
  151.                                                                                         }
  152.                                                                                 }
  153.                                                                                 return true;
  154.                                                                         }else{
  155.                                                                                 if(isset($postACT_false)){
  156.                                                                                         eval('$postACT_false = '.$postACT_false.';'.$postACT_false);
  157.                                                                                 }
  158.                                                                         }
  159.                                                                 }else{echo '<p>Ошибка FiltrationDriver:individual $postIF не является булевой</p>';exit;}
  160.                                                         }
  161.                                                         else{
  162.                                                                 $off='';$on='';
  163.                                                                 if(isset($individual['answered'])){
  164.                                                                         $Answered = '\\Answered ';if($individual['answered']==2){$off.=$Answered;}elseif($individual['answered']==1){$on.=$Answered;}
  165.                                                                 }
  166.                                                                 if(isset($individual['flagged'])){
  167.                                                                         $Flagged = '\\Flagged ';if($individual['flagged']==2){$off.=$Flagged;}elseif($individual['flagged']==1){$on.=$Flagged;}
  168.                                                                 }
  169.                                                                 if(isset($individual['seen'])){
  170.                                                                         $Seen = '\\Seen ';if($individual['seen']==2){$off.=$Seen;}elseif($individual['seen']==1){$on.=$Seen;}
  171.                                                                 }
  172.                                                                 if(isset($individual['deleted'])){
  173.                                                                         $Deleted = '\\Deleted ';if($individual['deleted']==2){$off.=$Deleted;}elseif($individual['deleted']==1){$on.=$Deleted;}
  174.                                                                 }
  175.                                                                 if($off!=''){imap_clearflag_full($this->mailbox,$o->uid,$off,ST_UID);}
  176.                                                                 if($on!=''){imap_setflag_full($this->mailbox,$o->uid,$on,ST_UID);}
  177.                                                                 if(isset($individual['deleted']) and $individual['deleted']==1){
  178.                                                                         imap_expunge($this->mailbox);
  179.                                                                 }
  180.                                                                 if(isset($individual['individualaction'])){
  181.                                                                         eval($individual['individualaction']);
  182.                                                                 }
  183.                                                                 if(isset($postACT)){
  184.                                                                         eval('$postACT = '.$postACT.';'.$postACT);
  185.                                                                 }
  186.                                                                 if(isset($filter['alert'])){
  187.                                                                         echo '<p>'.$filter['alert'].'</p>';
  188.                                                                         if(isset($filter['alertglobal']) and $filter['alertglobal'] == 1){
  189.                                                                                 $_SESSION['ALERTS'][] = '<p>Фильтр ['.$filter['name'].']: '.$filter['alert'].'</p>';
  190.                                                                         }
  191.                                                                 }
  192.                                                                 return true;
  193.                                                         }
  194.                                                 }
  195.                                         }
  196.                                 }
  197.                         }
  198.                 }
  199.         }
Lexus277 Отправлено: 06 Апреля, 2014 - 12:08:29 • Тема: Странно работает Eval в скрипте • Форум: Вопросы новичков

Ответов: 11
Просмотров: 346
я понимаю то что вы опытный человек в этом деле, извеняюсь , но дело в том что я даже не знаю чем заменить eval.
добавлю еще только что изменить строчку

PHP:
скопировать код в буфер обмена
  1. eval('$postIF = '.$POST_CONDITION.';');

на
PHP:
скопировать код в буфер обмена
  1. eval('$postIF = (1==1) and '.$POST_CONDITION.';');


извращение, но почему-то помогло и фильтры прошли номрально , далее я обратно все поставил так:
PHP:
скопировать код в буфер обмена
  1. eval('$postIF = '.$POST_CONDITION.';');

и работает, тоесть как и было , я так и непонел что за бага была.
(Добавление)
Не понял охринеть но со стороны может смотрется будто такого и быть немогло
Lexus277 Отправлено: 06 Апреля, 2014 - 11:40:58 • Тема: Странно работает Eval в скрипте • Форум: Вопросы новичков

Ответов: 11
Просмотров: 346
явное указание типа данных не поможет, т.к
Она в данном случае строку не воспринимает , так как она есть , а выдает ошибку синтаксическую. я знаю, и меня предупреждали уже, но хранить условия фильтра в коде и постоянно открывать файл я не хотел, я создал таблицу в бд и все условия запихал туда , но тут же нужна подстановка после извлечения записи из БД , помог EVAL , но сейчас эта штука просто смеется на до мной, добавлю то что такую-же операцию пробовал выполнить в отдельном файле вне системы, чисто для проверки EVAl все работает ровно.
Ад не то слово.
(Добавление)
мне EVAL нужен , для подстановки значения переменных в условие, а после уже выполнить сравнение на уровне PHP кода там пхп сам укажет строке тип такой какой надо, буквально 2 недели назад все нормально было.
Lexus277 Отправлено: 06 Апреля, 2014 - 11:15:35 • Тема: Странно работает Eval в скрипте • Форум: Вопросы новичков

Ответов: 11
Просмотров: 346
Не понял Здравствуйте, Недели 2 назад написал своего рода модуль в котором использовалась функция EVAL- она строку конвертирует в bool т.к там используются сравнения(реализация редактируемых фильтров), который тогда работал на ура , я был рад и все такое, и продолжил писать другие фишки к своей системе. сегодня решил запустить этот модуль снова , и тут такая странная вещ выходит -
(сразу предупреждаю - это не сайт и вообще не ресурс для коллективного пользования так-што взлома быть неможет, - прога на локалхосте предназначена для конектов и парсинга других серверов в инете. т.к на других языках не умею Подмигивание )
Строчка кода исполняемая подставляемый фрагмент сравнения из БД:
PHP:
скопировать код в буфер обмена
  1.  
  2. eval('$postIF = '.$POST_CONDITION.';');
  3.  

Строка сравнения из БД (в скрипте именуемая как $POST_CONDITION):
PHP:
скопировать код в буфер обмена
  1.  
  2. ($this->actManager($o,'ALG-current-actno')!=2) and ($this->actManager($o,'ALG-current-actno')!=1) and $this->search($body,"Тут строка обрабатываемая $this->search")
  3.  

Тобиш все в норме, но на выводе вижу следующее:

Parse error: syntax error, unexpected T_STRING in Z:\home\HOST_NAME\www\controler.php(325) : eval()'d code on line 1

В ходе дебагов и иследований , я просто пребывал в шоковом состояние и путем медитаций пытался успокоиться, обнаружил что при некоторых манипуляциях , менял амперсанды на AND и обратно, менял переменные в функциях на просто строки,Вырезал все -сохранял -вставлял обратно, вообщем что я тока не делал, незнаю почему но в итоге запись сравнения остаеться такая-же по синтаксису , но вот незадача EVAl работает Не понял ,
починил ТАКИМ вот НЕПОНЯТНЫМ способом уже 2 фильтра, осталось 8 , так самое главное что те что я починил я даже сломать немогу -потому как незнаю почему они не работали???? Не понял Не понял Не понял я в шоке народ, может кто с такой ахенейю сталкивался?
(Добавление)
Заметил еще одно, заменяя AND на && ошибка преобретает такой вид)

Parse error: syntax error, unexpected T_VARIABLE in Z:\home\HOSTNAME\www\controler.php(325) : eval()'d code on line 1

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB