HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 16.01.2010, 18:02
buxmanager
Постоянный
Регистрация: 01.04.2009
Сообщений: 508
С нами: 9006192

Репутация: 194


По умолчанию

Цитата:
Сообщение от imajo.ati  
PHP код:
<?php
file_put_contents
('./ip.log', @$_SERVER['REMOTE_ADDR'] . "\r\n"FILE_APPEND);
спасибо, испробую)
 
Ответить с цитированием

  #2  
Старый 16.01.2010, 18:00
4p3
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами: 9332069

Репутация: 92
По умолчанию

Здравствуй, ачат!

Не могу найти что вызывает Notice в скрипте.
PHP код:
<html>
<body>
    <?php
        error_reporting
(E_ALL);
        
$regexp "/([a-zA-Z]+)/s";
        
        if (
preg_match($regexp"abc1",$pockets))
            echo 
"yes<br>";
        else
            echo 
"no<br>";
            
        for (
$i=1;$i<=count($pockets);++$i)
            echo 
"{$pockets[$i]}";
    
?>
</body>
</html>
Само сообщение здесь
Цитата:
yes
abc
Notice: Undefined offset: 2 in F:\php tests\tiny.php on line 13
Спасибо за помощь!
 
Ответить с цитированием

  #3  
Старый 16.01.2010, 18:05
imajo.ati
Участник форума
Регистрация: 21.02.2008
Сообщений: 255
С нами: 9589849

Репутация: 177
По умолчанию

Цитата:
Сообщение от 4p3  
Не могу найти что вызывает Notice в скрипте.
count($pockets) возвращает количество элементов а не последний индекс, отсюда и ошибка. надо на единицу меньше брать чем длина списка
 
Ответить с цитированием

  #4  
Старый 16.01.2010, 18:24
4p3
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами: 9332069

Репутация: 92
По умолчанию

Цитата:
Сообщение от imajo.ati  
count($pockets) возвращает количество элементов а не последний индекс, отсюда и ошибка. надо на единицу меньше брать чем длина списка
Спасибо за ответ.
Как можно исправить, чтобы не было Notice?

Желательно без foreach. Так как нулевой элемент не нужен.
 
Ответить с цитированием

  #5  
Старый 16.01.2010, 18:33
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами: 9410786

Репутация: 2731


По умолчанию

Цитата:
Сообщение от 4p3  
Спасибо за ответ.
Как можно исправить, чтобы не было Notice?

Желательно без foreach. Так как нулевой элемент не нужен.
-1, тебе же сказали...
 
Ответить с цитированием

  #6  
Старый 17.01.2010, 13:19
Byrger
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
С нами: 9567480

Репутация: 61
По умолчанию

Есть класс работы с БД (ниже кинул начало класса)
Но вот не могу понять почему при вызове его примерно так
PHP код:
$db1 = new db(....vars.....);
$db2 = new db(....vars.....); 
А потом начинаю делать запрос вида
PHP код:
$db1->query(...запос....);
$db2->query(...запос....); 
ТО скрипт работает с 1 БД которая вызвана пойзже =(
Как сделать чтоб класс работал нормально с несколькими БД
PHP код:
class db {
 
        var 
$sql_host;
        var 
$sql_user;
        var 
$sql_pass;
        var 
$sql_base;
        var 
$sql_charset "utf8";
        var 
$sql_count   0;
        var 
$sql_error   true;
        var 
$link_id 0;
 
        function 
__construct($host,$user,$pass,$base,$code,$sql_error) {
          
$this->sql_host=$host;
          
$this->sql_user=$user;
          
$this->sql_pass=$pass;
          
$this->sql_base=$base;
          
$this->sql_charset=$code;
          
$this->error=$error;
          
$this->connect();
        }
 
        function 
connect() {
          
$this->link_id=@mysql_connect($this->sql_host,$this->sql_user,$this->sql_pass);
          if(!
$this->link_id$this->error("False link == Error to connect the database");
          
$selecting_base=@mysql_select_db($this->sql_base,$this->link_id);
          if(!
$selecting_base$this->error("Flase base == Error to select the database");
          
$coder_query=@mysql_query("SET NAMES '$this->sql_charset'");
          if(!
$coder_query$this->error("Error set $this->sql_charset");
        }
 
 
 
        function 
query($query_string) {
          
$selecting_query=@mysql_query($query_string,$this->link_id);
          
$this->sql_count ++;
          if(!
$selecting_query$this->error("False query == $query_string");
          return 
$selecting_query;
        }
....... 
 
Ответить с цитированием

  #7  
Старый 17.01.2010, 13:27
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
С нами: 9223466

Репутация: 3171


По умолчанию

Цитата:
Сообщение от Byrger  
Есть класс работы с БД (ниже кинул начало класса)
Но вот не могу понять почему при вызове его примерно так
PHP код:
$db1 = new db(....vars.....);
$db2 = new db(....vars.....); 
А потом начинаю делать запрос вида
PHP код:
$db1->query(...запос....);
$db2->query(...запос....); 
ТО скрипт работает с 1 БД которая вызвана пойзже =(
Как сделать чтоб класс работал нормально с несколькими БД
PHP код:
class db {
 
        var 
$sql_host;
        var 
$sql_user;
        var 
$sql_pass;
        var 
$sql_base;
        var 
$sql_charset "utf8";
        var 
$sql_count   0;
        var 
$sql_error   true;
        var 
$link_id 0;
 
        function 
__construct($host,$user,$pass,$base,$code,$sql_error) {
          
$this->sql_host=$host;
          
$this->sql_user=$user;
          
$this->sql_pass=$pass;
          
$this->sql_base=$base;
          
$this->sql_charset=$code;
          
$this->error=$error;
          
$this->connect();
        }
 
        function 
connect() {
          
$this->link_id=@mysql_connect($this->sql_host,$this->sql_user,$this->sql_pass);
          if(!
$this->link_id$this->error("False link == Error to connect the database");
          
$selecting_base=@mysql_select_db($this->sql_base,$this->link_id);
          if(!
$selecting_base$this->error("Flase base == Error to select the database");
          
$coder_query=@mysql_query("SET NAMES '$this->sql_charset'");
          if(!
$coder_query$this->error("Error set $this->sql_charset");
        }
 
 
 
        function 
query($query_string) {
          
$selecting_query=@mysql_query($query_string,$this->link_id);
          
$this->sql_count ++;
          if(!
$selecting_query$this->error("False query == $query_string");
          return 
$selecting_query;
        }
....... 
Как вариант,в классе сделать $connect[n];
Тобиш,при вызове класса, ресурс с $c = mysql_connect();,тоесть $c, зписывалось в $connect[] = $c;
А далее,делать работу таким образом:
PHP код:
functon query($query,$conn_id=0){
if(isset(
$this->connect[$conn_id]) & $this->connect[$conn_id]){ blablabla;
}

Примерно так.
 
Ответить с цитированием

  #8  
Старый 17.01.2010, 13:41
Byrger
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
С нами: 9567480

Репутация: 61
По умолчанию

Цитата:
Сообщение от m0Hze  
Как вариант,в классе сделать $connect[n];
Тобиш,при вызове класса, ресурс с $c = mysql_connect();,тоесть $c, зписывалось в $connect[] = $c;
А далее,делать работу таким образом:
PHP код:
functon query($query,$conn_id=0){
if(isset(
$this->connect[$conn_id]) & $this->connect[$conn_id]){ blablabla;
}

Примерно так.
Есть же $this->link_id
 
Ответить с цитированием

  #9  
Старый 17.01.2010, 14:01
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
С нами: 9223466

Репутация: 3171


По умолчанию

Цитата:
Сообщение от Byrger  
Есть же $this->link_id
Ну так ты массив создавай.И не нужно несколько переменных.Просто как пример:
PHP код:
$mysql = new mysql(wrong data);
$mysql->connect(data2); 
Когда инициализируем класс,мы пишем коннект не в link_id, А в link_id[].И когда мы делаем коонект 2 раз,мы просто прописываем в массив выше индексов,еще один идент. коннекта. далее можем юзать так:
PHP код:
$mysql->query("SELECT * FROM base1",0); // Вот тут будет использоватья первый коннект.
$mysql->query("SELECT * FROM base2",1); // Вот тут будет использоватья второй коннект. 
 
Ответить с цитированием

  #10  
Старый 17.01.2010, 14:27
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
С нами: 9497186

Репутация: 1304


По умолчанию

m0Hze Вы опять вместо работы с классами - выдумываете костыли, чтобы вернуться к процедурному программированию....

Byrger По какой-то причине - пхп закрывает первое соединение с БД. В функции query - сделайте проверку переменной соединения. Посмотрите какие ID имеют соединения.

PHP код:
 if (!($this->link_id && is_resource($this->link_id))) {var_dump($this->link_id); return 0; } 
Класс, кстати, кривой - в конструкте в качестве аргумента передается sql_error, а в функции - он нигде не используется. Плюс нет значений по умолчанию

Обновление 13-40: Как всегда в мануале все написано. Про mysql_connect:
Цитата:
If a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned. The new_link parameter modifies this behavior and makes mysql_connect() always open a new link, even if mysql_connect() was called before with the same parameters.
__________________
Любая действущая программа устарела.
Создайте систему, которой сможет пользоваться даже дурак ,и только дурак захочет ею пользоваться.
Как правильно задавать вопросы: _http://www.yakimchuk.ru/questions.htm

Последний раз редактировалось Gifts; 17.01.2010 в 14:41..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.