Помогите освоить ООП

Статус
В этой теме нельзя размещать новые ответы.

malina95

Дракула кода:)
Всем привет!!! Я решил немного попрактиковаться с ООП и вот что получилось (это мой первый класс в жизни так что не судите строго и ткните носом на плохой код и скажите как сделать лучше)
PHP:
class register {
		public $login;
		public $password;
		public $error;
		public function registerUser () {
			if (empty($this->login)) {
				unset($this->login);
				$this->error = "Вы не ввели Логин";
				return $this->error;
			}
			if (empty($this->password)) {
				unset($this->password);
				$this->error = "Вы не ввели Пароль";
				return $this->error;
			}
			if (isset($this->login) AND isset($this->password)) {
				$login = $this->login;
				$password = $this->password;
				$mysqli = new mysqli("localhost", "Admin", "udiram04", "oop");
				$result_login = $mysqli->query("SELECT `login` FROM `reg`");
				$arr_login = $result_login->fetch_assoc();
				if (!empty($arr_login['login'])) {
					return $this->error = "Такой логин существует";
				}
				$mysqli->query("INSERT INTO `reg` (`login`, `password`, `date`) VALUES ('$login', '$password', UNIX_TIMESTAMP())");
				$id = $mysqli->insert_id;
				$result = $mysqli->query("SELECT * FROM `reg` WHERE `id` = '$id'");
				$arr = $result->fetch_assoc();
				return "Ваш логин: ".$arr['login']."<br />Ваш пароль: ".$arr['password']."<br />Дата регистрации: ".date("d:m:y h:s", $arr['date']);
			}
		}
	}
Если ФАНАТ отзовётся я буду очень доволен.
И вот форма и вызов
PHP:
<?php
	require_once "register.php";
	if (isset($_POST['submit'])) {
		$reg = new register;
		$reg->login = $_POST['login'];
		$reg->password = $_POST['password'];
		echo $reg->registerUser();
	}
	echo <<<TXT
	<form action = "" method = "post">
	<input type = "text" name = "login" />
	<input type = "password" name = "password" />
	<input type = "submit" name = "submit" />
	</form>
TXT;
?>
 

malina95

Дракула кода:)
Мне пока безопасность по барабану, Вы про код скажите... может я не так гдето чтото вызываю
 

fixxxer

К.О.
Партнер клуба
это не класс, это функция, непонятно зачем обернутая в ключевое слово class
 

malina95

Дракула кода:)
Я понимаю, а ошибки есть где нибудь? может неправильно вызываю? Мне сказали что всё время надо вызывать через this
 

AmdY

Пью пиво
Команда форума
malina95
а теперь добавь в класс метод для редактирования существующего аккаунта, тогда ты сам сможешь оценить качество твоего кода по трудозатратам и количеству копи-паста.
 

AmdY

Пью пиво
Команда форума
malina95
ну сделай в классе ещё одну функцию, тогда увидишь всё
 

malina95

Дракула кода:)
Блин, он ругается на вызов функции
PHP:
<?php
	class register {
		public $login;
		public $password;
		public $error;
		public function registerUser () {
			if (empty($this->login)) {
				unset($this->login);
				$this->error = "Вы не ввели Логин";
				return $this->error;
			}
			if (empty($this->password)) {
				unset($this->password);
				$this->error = "Вы не ввели Пароль";
				return $this->error;
			}
			if (isset($this->login) AND isset($this->password)) {
				$login = $this->login;
				$password = $this->password;
				$mysqli = new mysqli("localhost", "Admin", "udiram04", "oop");
				if (issetLogin() == false) {
					return $this->error = "Такой логин существует";
				}
				$mysqli->query("INSERT INTO `reg` (`login`, `password`, `date`) VALUES ('$login', '$password', UNIX_TIMESTAMP())");
				$id = $mysqli->insert_id;
				$result = $mysqli->query("SELECT * FROM `reg` WHERE `id` = '$id'");
				$arr = $result->fetch_assoc();
				return "Ваш логин: ".$arr['login']."<br />Ваш пароль: ".$arr['password']."<br />Дата регистрации: ".date("d:m:y h:s", $arr['date']);
			}
		}
		public function issetLogin () {
			$login = $this->login;
			$mysqli = new mysqli("localhost", "Admin", "udiram04", "oop");
			$isset_login = $mysqli->query("SELECT `login` FROM `reg` WHERE `login` = '$login'");
			$arr_isset = $isset_login->fetch_assoc();
			if (!empty($arr_isset['login'])) {
				return false;
			}
			else {
				return true;
			}
		}
	}
?>
 

malina95

Дракула кода:)
Тьфу, забыл поставить this, ну написал я функцию и что дальше? Я ничего не вижу хотя что я должен видеть?
 

С.

Продвинутый новичок
Класс/объект это "что". Нечто, обладающее свойствами и умеющее совершать действия. "register", "регистрировать" -- глагол, действие. register не может быть классом.
 
  • Like
Реакции: WMix

malina95

Дракула кода:)
8 раз перечитал так ничего и не понял... Можете нормально написать?
 

AmdY

Пью пиво
Команда форума
я просил функцию редактирования, но да ладно
например дажды $mysqli = new mysqli("localhost", "Admin", "udiram04", "oop"); да ещё с данными которые должны быть в конфиге, что будет при смене пароля к БД?

зачем заводить лишние переменные
$login = $this->login;
$password = $this->password;
не говоря уже о том что ниже ты делаешь вызо issetLogin, где теоретически эти данные могут измениться и ты будешь работать с протухшими переменными или не существующими, типо как ты делаешь unset($this->login)


if ($this->issetLogin() == false) {
return $this->error = "Такой логин существует";
}
почему бы в самой функции не позаботиться о выводе ошибки issetLogin, которая знает что она проверяет.


пока хватит
 

С.

Продвинутый новичок
Стол, стул, холодильник -- это объекты.
Регистрировать, сидеть, стоять -- это не объекты.
Разницу видишь?
 

malina95

Дракула кода:)
$login = $this->login;
$password = $this->password;
Для удобства заноса в базу переменных
----------------------------------------------------------------------------------------------------
unset($this->login)
Не понял о чём вы... скажите как работать с переменными вообще в ооп, так и знал что первый блин комом
-------------------------------------------------------------------------------------------------------------
if ($this->issetLogin() == false) {
return $this->error = "Такой логин существует";
}
Может вы так имели ввиду?
PHP:
public function issetLogin ($login) {
			$mysqli = new mysqli("localhost", "Admin", "udiram04", "oop");
			$isset_login = $mysqli->query("SELECT `login` FROM `reg` WHERE `login` = '$login'");
			$arr_isset = $isset_login->fetch_assoc();
			if (!empty($arr_isset['login'])) {
				return $this->error = "Такой логин существует";
			}
			else {
				return true;
			}
		}
$this->issetLogin($login);
вместо
if ($this->issetLogin() == false) {
 return $this->error = "Такой логин существует";
 }
----------------------------------------------------------------------------------------
 

fixxxer

К.О.
Партнер клуба
то что ты написал не имеет никакого отношения к ООП. это не блин комом, это вообще не блин. твои вопросы не имеют смысла.

если вокруг произвольного кода написать class {} это не становится ООП

прежде всего надо понять что такое объекты и классы, и зачем они нужны. У тебя уже есть используемый класс mysqli и соответственно объект $mysqli. Еще много хороших примеров классов, встроенных в php, в spl. С файлами знаешь как работать? fopen там? Вот сравни с SplFileObject.
 

AmdY

Пью пиво
Команда форума
malina95
сейчас попробуй избавиться от двух вызовов подключения к базе данных и вынеси его из класса гжде ему быть не нужно, пускай будет
PHP:
$connaction = new mysqli.....;
$register = new Register();
$register->setConnection($connection);
$register->login = $_POST['login'];
$register->password = $_POST['password'];
echo $reg->registerUser();
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху