Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Подключеие к БД через класс

Сообщения:  [1-6] 

 
 автор: Temnovit   (06.06.2007 в 18:57)   письмо автору
 
   для: ChieFSS   (06.06.2007 в 17:28)
 

точно извеняюсь. С TEXT UNIQUE нелья использовать

login CHAR(100) UNIQUE

   
 
 автор: ChieFSS   (06.06.2007 в 17:28)   письмо автору
 
   для: Temnovit   (06.06.2007 в 14:48)
 

Я немного не корректно задал вопрос про функции. Или добавление публичности может решить эту задачу? Не могу в параметры функции вписать $connect->adduser(); Ругается почемуто.

Не пойму почему не могу выставить на поле типа TEXT значение UNIQUE. И вообще туда только полный текст можно добавить.

Еще хотел уточнить поле VARCHAR(100) это значит что это текстовое поле с максимальной длинной 100 символов да?
Просто еще путаница небольшая с INT(9) это же не значит что тут цифра может быть только 9. Тут и до 20 точно догнать можно.

Заранее спасибо за ответы.

   
 
 автор: Temnovit   (06.06.2007 в 14:48)   письмо автору
 
   для: ChieFSS   (06.06.2007 в 14:37)
 

Если метод является членом класса родителя со степенью инкапсуляции private или protected, то просто
$this->hello();
если это это принципиально 2 разных класса, то есть 2 выхода
1. создать в функции объект и вызвать его метод

<?
public function show() { 
 
$db = new db();
 
$db->hello();
}
?>

2. Сделать метод hello() статичным (тогда его можно будет вызывать откуда угодно, но ему не будут доступны свойства объекта)

<?
class db() { 
 public  static function 
hello() { 
 
// тут запрос 
 

}

public function 
show() { 
 
db::hello();
}
?>


>Каким способом лучше проверять наличие полей в БД. Проще говоря при регистрации проверять существует ли такой логин.
Для начала, стоит в БД сделать поле уникальным

login TEXT UNIQUE


<?
function login_exists($login) {
    
$login mysql_escape_string($login);
    
$r mysql_query("SELECT * FROM tblename WHERE login = '$login'");
    return 
mysql_num_rows($r) === true false;
}
?>

   
 
 автор: ChieFSS   (06.06.2007 в 14:37)   письмо автору
 
   для: Temnovit   (06.06.2007 в 13:48)
 

Понятно. Просто лазил по форуму vB и там нашел это:

    function &query_insert($table, $fields, &$values, $buffered = true)
    {
        return $this->insert_multiple("INSERT INTO $table $fields VALUES", $values, $buffered);
    }


А еще как можно вызвать функцию, которая находится в классе другого файла из функции?
Т.е. 1 файл:
<?
class db() {
 function 
hello() {
 
// тут запрос
 
}
}
?>

2 файл:
<?
function show() {
 
// и тут надо вызвать функцию hello() из класса db первого файла :))
}
?>


И еще заодно вопрос. Каким способом лучше проверять наличие полей в БД. Проще говоря при регистрации проверять существует ли такой логин.

   
 
 автор: Temnovit   (06.06.2007 в 13:48)   письмо автору
 
   для: ChieFSS   (06.06.2007 в 12:41)
 

Ну так не выйдет. Вам придется самому писать альтернативу SQL на более абстракном уровне, а это не простое занятие :)

Я делаю так.
У меня есть класс mysql_database который включает стандартные функции по работе с MySQL
подключение к базе, обработка данных, отключение от базы.

От этого класса я наследую другие классы, которые служат для конкретных задач.

Пример:
mysql_databse.php

<?
 
class mysql_database {

  protected 
$db_idnt//resource podklu4enija ka baze dannih

   // -------------- kostruktor i destruktor -----------------------------------

   //konstruktor - Vizivajetsa pri sozdanii peremennoj podklu4ajetsa k baze dannih
   //v slu4ae windows podklu4ajetysa s defoltovimi parametrami, a v slu4aje UNIX, s zadannimi
    
public function __construct($host_name$db_name$db_login$db_pass) {
        
//podklu4ajemsa k baze i v slu4ae o6ibki, zapisivajem ee v log
        
if ( @getenv('COMSPEC') ) //rabotajem v windows
          
$this->db_idnt mysql_connect('localhost''root''') or die(mysql_error());
        else                   
// v UNIX
          
$this->db_idnt mysql_connect($host_name$db_login$db_pass) or die(mysql_error());

        
//sozdajem bazu dannih esli ee e6o net
        
$q "CREATE DATABASE IF NOT EXISTS $db_name";
        
$this->mysql_qw($q) or die( mysql_error() );
        
mysql_select_db($db_name$this->db_idnt) or die( mysql_error() );
        
mysql_query ("set names 'cp1251'");                    //podderkzka russkoj kodirovki
    
}

    
//destruktor - otklu4ajetsa ot bazi dannih
    
public function __destruct() {
        @
mysql_close($this->db_idnt);
    }

    
//--------------- funkcii raboti s bazoj dannih ----------------------------


  //peredelivajet result set v massiv
  
public function array_from_result($r) {
     for (
$data = array(); $row mysql_fetch_assoc($r); $data[] = $row);
     return 
$data;
  }
}
?>


При создании объекта уже не надо будет беспокоиться о подключении к базе и отключении от нее - все происходит автоматом.

От объекта mysql_database наследуеться все остальное например для гостевой книги:

<?
 
require_once('mysql_databse.php');

 class 
guestbook extends mysql_database {
   private 
$gb_table 'guestbook';

      public function 
__construct() {
        
//vizivajem roditeljskij konstruktor
        
parent :: __construct(DB_HOSTDB_NAMEDB_LOGINDB_PASS);

        
//sozdajem tablici
        //sobstvenno voprosi
        
$q "CREATE TABLE IF NOT EXISTS ".$this->gb_table."
              ( id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(50),
                text VARCHAR(500)
              )"
;
        
mysql_query($q);
     }

     public function 
add_record($name$text) {
          
//tut zapros dlja vstavki dannih
     
}
 }
?>


В итоге все просто и красиво :)

   
 
 автор: ChieFSS   (06.06.2007 в 12:41)   письмо автору
 
 

Не знал что ввести в поиск поэтому создал новую нему.
Я хочу сделать подключение к БД через функцию в классе.
А именно вот это:
$query = "insert into `` values ('');";

Как-то автоматизировать.
Таблицу я понял. Тут все просто. Надо добавить на её место переменную и перед вызовом функции просто задать значение переменной. Типа такого
$table = 'users';
$query = "insert into `$table` values ('');";

А как сделать чтобы поля добавлялись автоматически.
Например пользователь вводит имя, пароль, подтверждение и е-мэил с подтверждением, а скрипт дальше сам подставляет значение переменных в поля. Причем не известно сколько их будет.

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования