brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, вот посмотрите, примерно так выглядит класс регистрации ?
<?php
<?php
class registration {
function Check_data() {
if (isset($_POST['login'])){
$login = $_POST['login'];
}
if (isset($_POST['name'])) {
$name = $_POST['name'];
}
if (isset($_POST['password'])) {
$password=md5($_POST['password']);
}
if (empty($login) or empty($name) or empty($password)) {
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"
}
}
function Data_processing() {
$login = stripslashes($login);
$login = htmlspecialchars($login);
$name = stripslashes($name);
$name = htmlspecialchars($name);
$password = stripslashes($password);
$password = htmlspecialchars($password);
$login = trim($login);
$name = trim($name);
$password = trim($password);
}
function Check_existence_login() {
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."
}
}
function Db_insert() {
$result2 = mysql_query ("INSERT INTO users (id, login, name, password) VALUES('','$login','$name','$password')"
if ($result2=='TRUE')
{
echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='/index.php'>Главная страница</a>";
}
else {
echo "Ошибка! Вы не зарегистрированы.";
}
}
}
?>
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
В целом, да, но здесь огромное количество логических ошибок, которые показывают Ваш начинающий уровень в ООП. Самое первое, что бросается в глаза - это названия методов. Примерный вид должен быть такой: словоСловоСлово(). То есть разбить на набор слова и соединить их все вместе, причём первое слово должно идти с маленькой буквы.
Также каждый объект должен отвечать только за себя. У Вас же помимо регистрации, почему-то ещё выводятся какие-то информационные сообщения. Эти сообщения должны выводиться тем объектом, который за это отвечает и который вызывает эти методы. В общем, здесь много нюансов, но пока вроде неплохо. Я бы Вам порекомендовал почитать учебники по ООП, чтобы посмотреть, как должен выглядеть грамотный код.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Спасибо))) Намотал на ус про названия методов))) Теперь зато понял, как именно строится класс))) Учебник уже читаю, правда незнаю, тот ли. Читаю книгу Гради Буча "Объектно ориентированный анализ и проектирование". Может конечно не то, но книга весьма понятная, с её помощью понял, что ооп из себя представляет))
Если стоит читаль что то другое, подскажите пожалуйста, что именно)))
Заранее спасибо))
С уважением, BrusSENS)))
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Хорошая книга, продолжайте читать.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Спасибо))))
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, вот класс вроде создан, но вот есть проблемма.
Я создаю reg.php, куда отправляются вобщем то данные из формы, затем делаю структуру файла
<?php
require_once 'classes/dbconnect.php';
require_once 'classes/registration.php';
$registr = new registration();
echo $registr->checkData();
echo $registr->dataProcessing();
$sql = new mysql();
echo $sql->dataBaseConnect();
echo $registr->checkExistenceLogin();
echo $registr->dataBaseInsert();
?>
Сама структура файла dbconnect.php
<?php
class mysql {
function dataBaseConnect() {
$host = "localhost";
$usname = "root";
$pass = "";
$dbname = "myproject";
$db = mysql_connect ("$host","$usname","$pass"
mysql_select_db ("$dbname",$db);
}
}
?>
При попытке регистрации выдаёт:
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in L:\home\test33.ru\www\classes\registration.php on line 40
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in L:\home\test33.ru\www\classes\registration.php on line 41
Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. Главная страница
В чём может быть ошибка?
Код самого класса:
<?php
class registration {
function checkData() {
if (isset($_POST['login'])){
$login = $_POST['login'];
}
if (isset($_POST['name'])) {
$name = $_POST['name'];
}
if (isset($_POST['password'])) {
$password=md5($_POST['password']);
}
if (empty($login) or empty($name) or empty($password)) {
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"
}
}
function dataProcessing() {
$login = stripslashes($login);
$login = htmlspecialchars($login);
$name = stripslashes($name);
$name = htmlspecialchars($name);
$password = stripslashes($password);
$password = htmlspecialchars($password);
$login = trim($login);
$name = trim($name);
$password = trim($password);
}
function checkExistenceLogin() {
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."
}
}
function dataBaseInsert() {
$result2 = mysql_query ("INSERT INTO users (id, login, name, password) VALUES('','$login','$name','$password')"
if ($result2=='TRUE')
{
echo "Вы успешно зарегистрированы! Теперь вы можете зайти на сайт. <a href='/index.php'>Главная страница</a>";
}
else {
echo "Ошибка! Вы не зарегистрированы.";
}
}
}
?>
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
Ошибок много и все они одни и те же. Например, здесь:
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
Переменной $db не существует. Чтобы она существовала, её нужно передавать извне конструктору. Далее эта переменная должна записываться в поле класса, а после должно быть обращение такое: $this->db
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Михаил, почему то сделал вроде всё, но в базе создаются пустые поля, хотя регистрация прошла, в чём дело может быть?
Admin
Администратор
Дата регистрации:
27.05.2010 21:23:42
Сообщений: 3063
INSERT INTO users (id, login, name, password) VALUES('','$login','$name','$password')"
id должно идти auto_increment, следовательно, его вообще не нужно указывать, и тем более, пустой строкой.
brussens
Мега-мастер
Дата регистрации:
11.10.2011 22:50:07
Сообщений: 438
Спасибо, понял, сейчас попробую)))А id у меня в базе идёт как раз AUTO-INCREMENT)))