|
|
|
|
|
для: ChieFSS
(06.06.2007 в 17:28)
| | точно извеняюсь. С TEXT UNIQUE нелья использовать
| |
|
|
|
|
|
|
|
для: Temnovit
(06.06.2007 в 14:48)
| | Я немного не корректно задал вопрос про функции. Или добавление публичности может решить эту задачу? Не могу в параметры функции вписать $connect->adduser(); Ругается почемуто.
Не пойму почему не могу выставить на поле типа TEXT значение UNIQUE. И вообще туда только полный текст можно добавить.
Еще хотел уточнить поле VARCHAR(100) это значит что это текстовое поле с максимальной длинной 100 символов да?
Просто еще путаница небольшая с INT(9) это же не значит что тут цифра может быть только 9. Тут и до 20 точно догнать можно.
Заранее спасибо за ответы. | |
|
|
|
|
|
|
|
для: 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();
}
?>
|
>Каким способом лучше проверять наличие полей в БД. Проще говоря при регистрации проверять существует ли такой логин.
Для начала, стоит в БД сделать поле уникальным
<?
function login_exists($login) {
$login = mysql_escape_string($login);
$r = mysql_query("SELECT * FROM tblename WHERE login = '$login'");
return mysql_num_rows($r) === 1 ? true : false;
}
?>
|
| |
|
|
|
|
|
|
|
для: 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 первого файла :))
}
?>
|
И еще заодно вопрос. Каким способом лучше проверять наличие полей в БД. Проще говоря при регистрации проверять существует ли такой логин. | |
|
|
|
|
|
|
|
для: 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_HOST, DB_NAME, DB_LOGIN, DB_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
}
}
?>
|
В итоге все просто и красиво :) | |
|
|
|
|
|
|
| Не знал что ввести в поиск поэтому создал новую нему.
Я хочу сделать подключение к БД через функцию в классе.
А именно вот это:
$query = "insert into `` values ('');";
|
Как-то автоматизировать.
Таблицу я понял. Тут все просто. Надо добавить на её место переменную и перед вызовом функции просто задать значение переменной. Типа такого
$table = 'users';
$query = "insert into `$table` values ('');";
|
А как сделать чтобы поля добавлялись автоматически.
Например пользователь вводит имя, пароль, подтверждение и е-мэил с подтверждением, а скрипт дальше сам подставляет значение переменных в поля. Причем не известно сколько их будет. | |
|
|
|
|