Спустя 13 минут, 3 секунды (3.07.2011 - 14:22) m4a1fox написал(а):
О! bulgakov. Подсоби а?
Спустя 1 минута, 28 секунд (3.07.2011 - 14:23) bulgakov написал(а):
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$mysqli->query(SOME MYSQL QUERY);
$mysqli->close();
Например как-то так.
Спустя 1 минута, 34 секунды (3.07.2011 - 14:25) bulgakov написал(а):
Вообщем смотри описание модуля mysqli на php.net
Спустя 37 секунд (3.07.2011 - 14:26) bulgakov написал(а):
Там все тоже самое что ты делаеш в процедурном подходе с mysql модулем только в объектно-ориентированном стиле ну плюс некоторые различия но это все описано.
Спустя 3 минуты, 6 секунд (3.07.2011 - 14:29) tatti написал(а):
Спустя 26 секунд (3.07.2011 - 14:29) m4a1fox написал(а):
bulgakov
Ок! Спасибо! Буду смотреть?!
Ок! Спасибо! Буду смотреть?!
Спустя 42 секунды (3.07.2011 - 14:30) m4a1fox написал(а):
tatti
Прикольная АВА
Прикольная АВА
Спустя 35 секунд (3.07.2011 - 14:30) alex12060 написал(а):
m4a1fox
Для начала пойми, что такое ООП.
Почитай про 3 замечательных свойства ООП в пыхе.
Испробуй сааамые базовые примеры, разберись в них и тогда, стартуй.
Для начала пойми, что такое ООП.
Почитай про 3 замечательных свойства ООП в пыхе.
Испробуй сааамые базовые примеры, разберись в них и тогда, стартуй.
Спустя 4 минуты, 23 секунды (3.07.2011 - 14:35) m4a1fox написал(а):
alex12060
Цитата |
Почитай про 3 замечательных свойства ООП в пыхе. |
Это какие? Может я уже читал?
Спустя 5 минут, 7 секунд (3.07.2011 - 14:40) alex12060 написал(а):
- Полиморфизм
- Инкапсуляция
- Наследование
Спустя 1 минута, 21 секунда (3.07.2011 - 14:41) m4a1fox написал(а):
alex12060
А! Теперь понятно! Вот верите, читаю уже довольно долго, но как-то без пинка не получается...
А! Теперь понятно! Вот верите, читаю уже довольно долго, но как-то без пинка не получается...
Спустя 3 минуты, 44 секунды (3.07.2011 - 14:45) bulgakov написал(а):
Свернутый текст
Куда пнуть?)
Спустя 5 минут, 46 секунд (3.07.2011 - 14:51) m4a1fox написал(а):
bulgakov
Я не сомневался.... думаю в голову нормально будет! :D
Ладно... Как говорят французы...ближе к телу товарищи. Собственно вопрос следующего плана, Допустим класс, кот я с помощью bulgakov'a смог преодолеть... в моей саге <<<I vs OOP>>> часть #1, кот, проверяет пользователя на ввод информации... Так вот, Я его выношу в отдельный файл (например class.member.php). Подключаю его на странице, с этим естественно проблем нету, а вот дальше - интересно. Получается что если есть страница html то на странице, где я хочу, что бы класс вывел какую либо информацию, я делаю так
Это собственно верно или где?
Я не сомневался.... думаю в голову нормально будет! :D
Ладно... Как говорят французы...ближе к телу товарищи. Собственно вопрос следующего плана, Допустим класс, кот я с помощью bulgakov'a смог преодолеть... в моей саге <<<I vs OOP>>> часть #1, кот, проверяет пользователя на ввод информации... Так вот, Я его выношу в отдельный файл (например class.member.php). Подключаю его на странице, с этим естественно проблем нету, а вот дальше - интересно. Получается что если есть страница html то на странице, где я хочу, что бы класс вывел какую либо информацию, я делаю так
<?php
$member = new Member($name);
echo $member->hello();
?>
Это собственно верно или где?
Спустя 3 минуты, 37 секунд (3.07.2011 - 14:54) bulgakov написал(а):
Гм... я просто не могу понять что вы хотите... в коде вы привели пример создания экземлпяра $member класса Member, и вызвали метод объекта - hello().... и собственно что вы хотите?... Можно как-то яснее и конкретнее поставить вопрос?
Спустя 9 минут, 21 секунда (3.07.2011 - 15:04) m4a1fox написал(а):
bulgakov
Извините, конечно можно! Собственно сам класс
Конечно храмой, но работает. Как Вы видите вот тут
есть переменные, если в поле ввода формы, поля совпадают, то происходит переход вот тут
Вопрос в следующем, получается, что если можно написать скрипт, для проверки введеных данных на непроцедурном подходе, то я хочу понять как написать это же только с использованием OOP. Процес я прекрасно понимаю.
1. Необходим класс для connect'a с БД. (для меня это проблема)
2. Необходимо, что бы класс, который я привел выше, брал данные не из строк, а из БД. (это так же проблема.)
Вот... Если есть идеи, и время, буду благодарен за помощь. Спасибо!
Извините, конечно можно! Собственно сам класс
$name = true;
class Member
{
private static $name = 'Max';
private static $pas = '123';
function __construct($name) {
$name = !empty($_POST['log']) ? $_POST['log'] : 'Гость';
$pas = !empty($_POST['pas']) ? $_POST['pas'] : NULL;
$this->name = $name;
$this->pas = $pas;
}
function hello () {
if (isset ($_POST['ok'])){
if ($this->name == self::$name && $this->pas == self::$pas)
return header('Location: second.php');
else {
return '<font color="red">Вы ввели неверное имя или пароль</font>';
}
}
else
{
return NULL;
}
}
}
Конечно храмой, но работает. Как Вы видите вот тут
private static $name = 'Max';
private static $pas = '123';
есть переменные, если в поле ввода формы, поля совпадают, то происходит переход вот тут
return header('Location: second.php');
Вопрос в следующем, получается, что если можно написать скрипт, для проверки введеных данных на непроцедурном подходе, то я хочу понять как написать это же только с использованием OOP. Процес я прекрасно понимаю.
1. Необходим класс для connect'a с БД. (для меня это проблема)
2. Необходимо, что бы класс, который я привел выше, брал данные не из строк, а из БД. (это так же проблема.)
Вот... Если есть идеи, и время, буду благодарен за помощь. Спасибо!
Спустя 8 минут, 55 секунд (3.07.2011 - 15:13) bulgakov написал(а):
$name = true;
class Member
{
private static $name = 'Max';
private static $pas = '123';
function __construct($name) {
$name = !empty($_POST['log']) ? $_POST['log'] : 'Гость';
$pas = !empty($_POST['pas']) ? $_POST['pas'] : NULL;
$this->name = $name; // читайте про доступ к статическим свойствам класса это неправильно
// правильно - self::$name = $name
$this->pas = $pas; // откуда взяться переменной $pas? может вы забыли ее добавить в аргумент конструктора? Опять же
// неправильный доступ к статической переменной
}
function hello () {
if (isset ($_POST['ok'])){
if ($this->name == self::$name && $this->pas == self::$pas) // то ли у вас не хвататет двух публичных свойств класса то ли я не понимаю логику работы скрипта
return header('Location: second.php');
else {
return '<font color="red">Вы ввели неверное имя или пароль</font>';
}
}
else
{
return NULL;
}
}
}
Немного непонятно как может этот класс работать... я там в комментариях написал..
Спустя 9 минут, 49 секунд (3.07.2011 - 15:23) m4a1fox написал(а):
Ага! Ну смотрите. Вот форма
При отправке данных вот это
Их принимает, обрабатывает и заносит в $name & $pas
а вот тут
Я проверяю, если они
равны вот этим
Тогда идет переадресация, иначе вывод сообщения об ошибке.
Как-то так. Но оно работает!
<form action="" method="post">
<table border="0">
<tr>
<td>
Логин:
</td>
<td>
<input type="text" name="log"/>
</td>
</tr>
<tr>
<td>
Пароль:
</td>
<td>
<input type="password" name="pas" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" name="ok" />
</td>
</tr>
</table>
</form>
При отправке данных вот это
function __construct($name) {
$name = !empty($_POST['log']) ? $_POST['log'] : 'Гость';
$pas = !empty($_POST['pas']) ? $_POST['pas'] : NULL;
$this->name = $name;
$this->pas = $pas;
}
Их принимает, обрабатывает и заносит в $name & $pas
а вот тут
if ($this->name == self::$name && $this->pas == self::$pas)
Я проверяю, если они
$this->name
$this->pas
равны вот этим
private static $name = 'Max';
private static $pas = '123';
Тогда идет переадресация, иначе вывод сообщения об ошибке.
Как-то так. Но оно работает!
Спустя 9 минут, 13 секунд (3.07.2011 - 15:32) Invis1ble написал(а):
m4a1fox
Цитата |
return header('Location: second.php'); |
header() ничего не возвращает, поэтому можно без return
Спустя 1 минута, 36 секунд (3.07.2011 - 15:33) m4a1fox написал(а):
Invis1ble
О! Не знал! Спасибо! Буду в будущем испольлзовать.
О! Не знал! Спасибо! Буду в будущем испольлзовать.
Спустя 2 минуты, 56 секунд (3.07.2011 - 15:36) Invis1ble написал(а):
m4a1fox
Основная твоя проблема на данном этапе заключается в том, что тебе не хватает теоритических знаний. начни с основ ООП.
Основная твоя проблема на данном этапе заключается в том, что тебе не хватает теоритических знаний. начни с основ ООП.
Спустя 2 минуты, 22 секунды (3.07.2011 - 15:39) bulgakov написал(а):
Ну да начать с основ не помешало бы, а если по твоей теме я так понял ты сейчас уперся в работу с базой данных через ооп подход? Ну я тебе уже подсказал что для этого есть класс mysqli читай его описание, но для того что бы понять что к чему все таки нужны основы ооп.
Спустя 3 минуты, 37 секунд (3.07.2011 - 15:42) m4a1fox написал(а):
Вот верите, про основы уже 2 неделю читаю, только читаю и читаю. Я не могу понять главного, даже если есть класс, как с нима работать, именно сам механизм. Хорошо, я понимаю так же что не так просто и реально очень сложно, но вот простой пример. С сайта http://kurepin.ru. Вот его класс
Так же прикиним, что я понимаю что здесь происходит, но как с этим в дальнейшем работать, вот в чем главный вопрос. Как например мне выбрать записи из табл. admin? Просто выбрать и вывести в столбик. Ничего грандиозного.
class class_Mysql extends class_Vars
{
var $sql_login="root";
var $sql_passwd="oracle";
var $sql_database="oop";
var $sql_host="127.0.0.8";
var $conn_id;
var $sql_query;
var $sql_err;
var $sql_res;
function sql_connect()
{
$this->conn_id=mysql_connect($this->sql_host,$this->sql_login,$this->sql_passwd);
mysql_select_db($this->sql_database);
}
function sql_execute()
{
$this->sql_res=mysql_query($this->sql_query,$this->conn_id);
$this->sql_err=mysql_error();
}
function sql_close()
{
mysql_close($this->conn_id);
}
Так же прикиним, что я понимаю что здесь происходит, но как с этим в дальнейшем работать, вот в чем главный вопрос. Как например мне выбрать записи из табл. admin? Просто выбрать и вывести в столбик. Ничего грандиозного.
Спустя 3 минуты, 16 секунд (3.07.2011 - 15:46) Invis1ble написал(а):
m4a1fox
в данном примере используется устаревший синтаксис, очевидно, код написан под php4
но это не главное,
главное то, что он наследует родительский класс class_Vars, нужно смотреть код этого класса
в данном примере используется устаревший синтаксис, очевидно, код написан под php4
но это не главное,
главное то, что он наследует родительский класс class_Vars, нужно смотреть код этого класса
Спустя 2 минуты, 10 секунд (3.07.2011 - 15:48) bulgakov написал(а):
А что такого в работе с классом? создаете объект класса, а дальше уже пользуетесь через этот объект свойствам и методами класса, так же если в классе есть статические методы и свойства а так же константы класса тоже к ним можете получить доступ через двойное двоеточие, ну и при создании объекта класса если необходимо передаете в его конструктор нужные параметры, ну это очень кратко, позвольте узнать что вы читаете если до сих пор не понятно как работать с классом? И да var не ставиться перед свойствами класса, ставится public.
Спустя 2 минуты, 19 секунд (3.07.2011 - 15:50) m4a1fox написал(а):
Invis1ble
Не вопрос. Но class.var.php мне кажется большой роли не играет
Собственно вот он сам
Не вопрос. Но class.var.php мне кажется большой роли не играет
Собственно вот он сам
<?php
/**
* @TODO
* @author m4a1fox
* @copyright 2011 m4a1fox
*/
class class_Vars
{// Пути к папкам.
var $PATH="/home/www.oop.com"; // основной путь к проекту
var $PATH_INC="/home/www.oop.com/inc";
var $PATH_REQ="/home/www.oop.com/req";
var $PATH_DATA="/home/www.oop.com/data";
var $PATH_WWW="/home/www.oop.com/WWW";
var $PATH_WWW_PIC="/home/www.oop.com/WWW/pic";
// Основной URL
var $PATH_HTTP="http://www.oop.com/";
// Полное название и короткое
var $NAME_FULL="Это OOP штука";
var $NAME_SHORT="OOP - Max";
// адрес хозяина страницы
var $EMAIL_ADMIN=array("www.oop.com");
// техническая служба сайта
var $EMAIL_NOC=array("www.oop.com","www.oop.com");
// Время кеширования страниц "Expires" (в секундах)
var $CACHE_TIME=300;
// Максимальный размер подгружаемого в базу текста
var $TEXT_SIZE_MAX= 1048576; // это мегабайт
// Минимальный размер подгружаемого в базу текста
var $TEXT_SIZE_MIN=100; // сто байт
// Формат вывода времени (из SQL-базы)
var $TIME_FORMAT="%H:%i:%S"; // ЧЧ:ММ:СС
// Формат вывода даты (из SQL-базы)
var $DATE_FORMAT="%d.%m.%Y"; // ДД.ММ.ГГГГ
}
?>
Спустя 1 минута, 10 секунд (3.07.2011 - 15:51) Invis1ble написал(а):
Цитата |
copyright ©2000-2002 Ruslan Kurepin |
по-моему, этим все сказано
забудь про этот сайт и увиденный тобой синтаксис как страшный сон
Спустя 15 секунд (3.07.2011 - 15:51) m4a1fox написал(а):
bulgakov
Просто что бы все понимал. На пример вот так
Просто что бы все понимал. На пример вот так
Цитата |
создаете объект класса |
Это например так
$connect = new class_Mysql();
Спустя 38 секунд (3.07.2011 - 15:52) m4a1fox написал(а):
Invis1ble
ок! Будем по другому....
ок! Будем по другому....
Спустя 1 минута, 55 секунд (3.07.2011 - 15:54) m4a1fox написал(а):
Есть варианты для грамотного соединения с БД?
Спустя 1 минута, 27 секунд (3.07.2011 - 15:55) bulgakov написал(а):
Ну зачем ходить по левым сайтом? Вот же все расписано...
Спустя 36 секунд (3.07.2011 - 15:56) bulgakov написал(а):
Цитата |
Есть варианты для грамотного соединения с БД? |
А то что я написал используя mysqli не грамотно?
Спустя 1 минута, 56 секунд (3.07.2011 - 15:58) bulgakov написал(а):
А вот я думаю неплохая информация по работе с mysqli Я думаю вам этого будет пока достаточно.
Спустя 37 секунд (3.07.2011 - 15:59) m4a1fox написал(а):
bulgakov
Цитата |
Ну зачем ходить по левым сайтом? Вот же все расписано... |
У меня эти странице распечатаны и переведенны в pdf, читаю их, аки отче наш!
Спустя 2 минуты, 32 секунды (3.07.2011 - 16:01) bulgakov написал(а):
Ну вот плюс почитайте ссылочку по mysqi.
Спустя 1 минута, 10 секунд (3.07.2011 - 16:02) m4a1fox написал(а):
bulgakov
Как-то странно, не находите
Эээээ, а где класс?
Как-то странно, не находите
<?php
/* Подключение к серверу MySQL */
$mysqli = new mysqli('localhost', 'user', 'password', 'world');
if (mysqli_connect_errno()) {
printf("Подключение к серверу MySQL невозможно. Код ошибки: %s\n", mysqli_connect_error());
exit;
}
/* Посылаем запрос серверу */
if ($result = $mysqli->query('SELECT Name, Population FROM City ORDER BY
Population DESC LIMIT 5')) {
print("Очень крупные города:\n");
/* Выбираем результаты запроса: */
while( $row = $result->fetch_assoc() ){
printf("%s (%s)\n", $row['Name'], $row['Population']);
}
/* Освобождаем память */
$result->close();
}
/* Закрываем соединение */
$mysqli->close();
?>
Эээээ, а где класс?
Спустя 2 минуты, 15 секунд (3.07.2011 - 16:05) bulgakov написал(а):
Ммм я помоему уже несколько раз писал что mysqli это есть встроенный в php класс для работы с базой данных mysql или хотя бы намекал на это в коде...
Спустя 1 минута, 50 секунд (3.07.2011 - 16:06) m4a1fox написал(а):
То есть вот так
И весь коннект?
load= new mysqli("localhost","username","password","database");
И весь коннект?
Спустя 29 секунд (3.07.2011 - 16:07) Invis1ble написал(а):
Вот более высокая степень абстракции (пример сыроват, значения поменять на свои):
$driver = 'mysql';
$database = 'test';
$host = 'localhost';
$username = 'root';
$passwd = 'root';
$dsn = $driver . ':dbname=' . $database . ';host=' . $host;
try {
$pdo = new PDO($dsn, $username, $passwd);
$q = $pdo->query('select * from `table`');
$data = $q->fetchAll();
var_dump($data);
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Спустя 2 минуты, 34 секунды (3.07.2011 - 16:09) m4a1fox написал(а):
Цитата |
Ммм я помоему уже несколько раз писал что mysqli это есть встроенный в php класс для работы с базой данных mysql или хотя бы намекал на это в коде... |
О блин! Революция произошла????
Так что бы я понимал, то есть вот эта строчка может заменить вот это
$dblocation = "localhost";
// Имя базы данных, на хостинге или локальной машине
$dbname = "dbname";
// Имя пользователя базы данных
$dbuser = "user";
// Пароль
$dbpasswd = "pass";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx)
{
echo( "<P>В настоящий момент сервер базы данных не доступен, поэтому корректное отображение страницы невозможно.</P>" );
exit();
}
if (! @mysql_select_db($dbname,$dbcnx) )
{
echo( "<P>В настоящий момент база данных не доступна, поэтому корректное отображение страницы невозможно.</P>" );
exit();
}
@mysql_query("SET NAMES UTF8");
Так что ли получается?????
Спустя 9 минут, 14 секунд (3.07.2011 - 16:19) m4a1fox написал(а):
Invis1ble
Спасибо! Буду разбираться. Но много непоятных слов . И как-то по другому все!
Спасибо! Буду разбираться. Но много непоятных слов . И как-то по другому все!
Спустя 4 минуты, 51 секунда (3.07.2011 - 16:23) m4a1fox написал(а):
Вот кое что начинает проясняться
$load= new mysqli("localhost","user","pas","dbname", 3306);
$result=$load->query("SELECT * FROM table");
$row=$result->fetch_array();
$show[] = $row['value1'];
$show[] = $row['value2'];
Спустя 8 минут, 54 секунды (3.07.2011 - 16:32) Invis1ble написал(а):
В продолжение мысли. Мы можем переопределить часть логики на свою, либо раширить функционал, например добавляем новый метод getAll(), который возвращает массив ассоциативных массивов:
class myPDO extends PDO {
public function getAll($query) {
$q = $this->query($query);
return $q->fetchAll();
}
}
$driver = 'mysql';
$database = 'test';
$host = 'localhost';
$username = 'root';
$passwd = 'root';
$dsn = $driver . ':dbname=' . $database . ';host=' . $host;
try {
$pdo = new myPDO($dsn, $username, $passwd);
$data = $pdo->getAll('select * from `table`'); // новый функционал
var_dump($data);
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Спустя 33 секунды (3.07.2011 - 16:33) m4a1fox написал(а):
Осталось дело за малым :) попытаться, подставть то что вытащил, вот сюда
насколько я понимаю, надо использовать extends?
private static $name = 'Max';
private static $pas = '123';
насколько я понимаю, надо использовать extends?
Спустя 1 минута, 10 секунд (3.07.2011 - 16:34) m4a1fox написал(а):
Invis1ble
Спасибо конечно, но я сейчас голову сломаю. Это вы не для моего уровня написали! Я еще очень слаб в этом плане!
Спасибо конечно, но я сейчас голову сломаю. Это вы не для моего уровня написали! Я еще очень слаб в этом плане!
Спустя 4 минуты, 50 секунд (3.07.2011 - 16:39) m4a1fox написал(а):
Ха, а не получается подставить вот так
private static $name = $row['name'];
private static $pas = $row['pass'];
Спустя 2 минуты, 51 секунда (3.07.2011 - 16:42) Invis1ble написал(а):
m4a1fox
почему же... то что я написал - по сути тоже самое, что показал bulgakov, только более универсальней.
почему же... то что я написал - по сути тоже самое, что показал bulgakov, только более универсальней.
Цитата |
насколько я понимаю, надо использовать extends? |
смотря, чего ты хочешь добиться. Опиши для начала цель, которую ты хочешь достичь, ибо толком я так и непонял
Спустя 8 минут, 12 секунд (3.07.2011 - 16:50) m4a1fox написал(а):
Invis1ble
Цель. Есть БД (oop), в ней есть таблица (admin). Там есть запись
Я хочу, что бы вот это сласс,
При получении данных из формы, принимал вместо вот этих значений
Те что есть в БД. По сути авторизация.
Как вытащить данные из таблицы - я понял
Но вот как подставить вот эти строки
Вот сюда
Я вот это не пойму, да и не получается если честно.
Цель. Есть БД (oop), в ней есть таблица (admin). Там есть запись
+----+-------+------+--------+
| id | name | pass | encode |
+----+-------+------+--------+
| 2 | admin | 123 | |
+----+-------+------+--------+
Я хочу, что бы вот это сласс,
$name = true;
class class_Member
{
private static $name = 'Max';
private static $pas = '123';
function __construct($name) {
$name = !empty($_POST['log']) ? $_POST['log'] : 'Гость';
$pas = !empty($_POST['pas']) ? $_POST['pas'] : NULL;
$this->name = $name;
$this->pas = $pas;
}
function hello () {
if (isset ($_POST['ok'])){
if ($this->name == self::$name && $this->pas == self::$pas)
return header('Location: second.php');
else {
return '<font color="red">Вы ввели неверное имя или пароль</font>';
}
}
else
{
return NULL;
}
}
}
При получении данных из формы, принимал вместо вот этих значений
private static $name = 'Max';
private static $pas = '123';
Те что есть в БД. По сути авторизация.
Как вытащить данные из таблицы - я понял
$load= new mysqli("localhost","root","oracle","oop", 3306);
$result=$load->query("SELECT * FROM admin");
$row=$result->fetch_assoc();
$show[] = $row['name'];
$show[] = $row['pass'];
Но вот как подставить вот эти строки
$show[] = $row['name'];
$show[] = $row['pass'];
Вот сюда
private static $name = 'Max';
private static $pas = '123';
Я вот это не пойму, да и не получается если честно.
Спустя 6 минут, 45 секунд (3.07.2011 - 16:57) bulgakov написал(а):
Передавать в качестве параметров в конструктор
$name = $row['name'];
$pass = $row['pass'];
Как то так, очень кратко.
$name = $row['name'];
$pass = $row['pass'];
class someclass{
function __construct($name, $pass){
// some cod
}
}
$member = new someclass($name, $pass);
Как то так, очень кратко.
Спустя 5 минут, 58 секунд (3.07.2011 - 17:03) m4a1fox написал(а):
$load= new mysqli("localhost","root","oracle","oop", 3306);
$result=$load->query("SELECT * FROM admin");
$row=$result->fetch_assoc();
$show[] = $row['name'];
$show[] = $row['pass'];
Ах да, еще, почему-то цикл то не получается! Печалька. :blink:
Спустя 4 минуты, 40 секунд (3.07.2011 - 17:07) bulgakov написал(а):
Не пойму зачем вы переменные из одного массива передаете в другой? Ну используйте тот же ассоциативный массив который вы получили $row[] и данные из него присвойте двум переменным или же напрямую передавайте в конструктор.
Спустя 9 минут, 11 секунд (3.07.2011 - 17:17) m4a1fox написал(а):
Ладно с циклом разобрался. Как теперь дать классу понять, что згачение вот этих строк
Брать из БД.
private static $name = 'Max';
private static $pas = '123';
Брать из БД.
Спустя 4 минуты, 19 секунд (3.07.2011 - 17:21) bulgakov написал(а):
Цитата |
Ладно с циклом разобрался. Как теперь дать классу понять, что згачение вот этих строк |
Я не ясно написал?
class member{
private static $name = '';
private static $pas = '';
function __construct($name, $pas){
self::$name = $name;
self::$pas = $pas;
}
}
$member = new member($name, $pas); // $name и $pas переменные содержащие данные из базы, надеюсь как взять данные из базы показывать не надо?
Спустя 1 минута, 20 секунд (3.07.2011 - 17:22) Invis1ble написал(а):
Я так понимаю, что инетересуют по сути примеры реализации работы с БД на основе ООП подхода.
Авторизацию можно замутить примерно так:
Авторизацию можно замутить примерно так:
class User {
private $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function check(array $properties) {
$qWhere = array();
foreach ($properties as $name => $value)
$qWhere[] = '`' . $name . '` = ' . $this->pdo->quote($value);
$q = $this->pdo->query(
'select count(`id`) from `users` where ' . implode(' and ', $qWhere)
) or die(print_r($this->pdo->errorInfo()));
return (bool)$q->fetchColumn();
}
}
$driver = 'mysql';
$database = 'database';
$host = 'localhost';
$username = 'root';
$passwd = 'root';
$dsn = $driver . ':dbname=' . $database . ';host=' . $host;
try {
$pdo = new PDO($dsn, $username, $passwd);
$user = new User($pdo);
if (isset($_POST['login'], $_POST['password'])) {
$result = $user->check(array('login' => $_POST['login'], 'password' => md5($_POST['password'])));
echo $result ? 'Success' : 'Fail';
}
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
Спустя 20 секунд (3.07.2011 - 17:23) m4a1fox написал(а):
bulgakov
Эка, вы злитись! Не надо! Я только учусь. ПОнимаю вас прекрасно! Бесит, когда человек, спарашивает, вы ему отвечаете, а он не делает как надо! Но я только учусь! Так что не серчайте!
Эка, вы злитись! Не надо! Я только учусь. ПОнимаю вас прекрасно! Бесит, когда человек, спарашивает, вы ему отвечаете, а он не делает как надо! Но я только учусь! Так что не серчайте!
Спустя 1 минута, 16 секунд (3.07.2011 - 17:24) bulgakov написал(а):
Цитата |
Эка, вы злитись! Не надо! Я только учусь |
Я не серчаю вам показалось)
Спустя 5 минут, 6 секунд (3.07.2011 - 17:29) m4a1fox написал(а):
bulgakov
А ну тогда все нормально! Ладно, поехали дальше.
Принцип, я понял исходя вот из этого
Но позвольте, а как же, вот эти строки в __construct
Как с ними быть?
А ну тогда все нормально! Ладно, поехали дальше.
Принцип, я понял исходя вот из этого
class member{
private static $name = '';
private static $pas = '';
function __construct($name, $pas){
self::$name = $name;
self::$pas = $pas;
}
}
Но позвольте, а как же, вот эти строки в __construct
а точнее я вот про эти
function __construct($name, $pass) {
$name = !empty($_POST['name']) ? $_POST['name'] : 'Гость';
$pass = !empty($_POST['pass']) ? $_POST['pass'] : NULL;
self::$name = $name;
self::$pass = $pas;
}
$name = !empty($_POST['name']) ? $_POST['name'] : 'Гость';
$pass = !empty($_POST['pass']) ? $_POST['pass'] : NULL;
Как с ними быть?
Спустя 6 минут, 4 секунды (3.07.2011 - 17:35) Invis1ble написал(а):
m4a1fox
Цитата |
Как с ними быть? |
я думаю, не стоит передавать в конструктор глобальные переменные
Спустя 47 секунд (3.07.2011 - 17:36) m4a1fox написал(а):
Invis1ble
Хорошо! Допустим. Но что с ними то делать. Как то ж данные должны попасть в класс?!
Хорошо! Допустим. Но что с ними то делать. Как то ж данные должны попасть в класс?!
Спустя 3 минуты, 38 секунд (3.07.2011 - 17:39) Invis1ble написал(а):
m4a1fox
сорри, я немного неправильно выразился. Передавать то их можно, но не так. Я имел ввиду, что не стоит работать напрямую с глобальными переменными
код конструктора:
создаем объект:
сорри, я немного неправильно выразился. Передавать то их можно, но не так. Я имел ввиду, что не стоит работать напрямую с глобальными переменными
код конструктора:
function __construct($name, $pas){
self::$name = $name;
self::$pas = $pas;
}
создаем объект:
$name = !empty($_POST['name']) ? $_POST['name'] : 'Гость';
$pass = !empty($_POST['pass']) ? $_POST['pass'] : NULL;
$obj = new Class($name, $pass);
Спустя 4 секунды (3.07.2011 - 17:39) Krevedko написал(а):
почему тут, а не в разделе по ООП ?
Спустя 2 минуты, 10 секунд (3.07.2011 - 17:42) bulgakov написал(а):
Вам нужно передать в класс из базы переменные с которыми будут сверятся данные из поста, значит вам в класс надо передавать переменные и из базы и из поста, а уже внутри сравнить их друг с другом... я уже начинаю путаться... сделайте отдельно метод проверки, а в конструктор передавайте 4 значененя, логин, пароль из базы и логин пароль из поста, как вариант, внутри класса например тоже 4 свойства для логина пароля из базы и логин пароль из поста. И метод их сверки. Хотя может есть и более простые методы.
Спустя 1 минута, 3 секунды (3.07.2011 - 17:43) bulgakov написал(а):
Цитата |
почему тут, а не в разделе по ООП ? |
А в разделе для начинающих можно публиковать только посты связанные с процедурным подходом? А если человек начинающий но в ооп?
Спустя 2 минуты, 12 секунд (3.07.2011 - 17:45) Invis1ble написал(а):
bulgakov
Цитата |
Хотя может есть и более простые методы. |
имхо, да. глянь метод check() который я наваял в предыдущем коде. Преимущество: можно написать некий базовый класс, от которого будут наследоваться дочерние, реализующие логику различных сущностей, таких как Юзер, Заказ, и т.д. но метод check() для всех можно оставить прежним и лишь менять динамически имя таблицы
Спустя 4 минуты, 17 секунд (3.07.2011 - 17:49) m4a1fox написал(а):
bulgakov
Цитата |
Вам нужно передать в класс из базы переменные с которыми будут сверятся данные из поста, значит вам в класс надо передавать переменные и из базы и из поста, а уже внутри сравнить их друг с другом... я уже начинаю путаться... сделайте отдельно метод проверки, а в конструктор передавайте 4 значененя, логин, пароль из базы и логин пароль из поста, как вариант, внутри класса например тоже 4 свойства для логина пароля из базы и логин пароль из поста. И метод их сверки. Хотя может есть и более простые методы. |
Вот вроде что то похожее сделал!
Собственно вот
class class_Member
{
function __construct($name, $pass) {
$name = !empty($_POST['name']) ? $_POST['name'] : 'Гость';
$pass = !empty($_POST['pass']) ? $_POST['pass'] : NULL;
$this->name = $name;
$this->pass = $pass;
}
function hello ($name, $pass) {
if (isset ($_POST['ok'])){
if ($this->name == $name && $this->pass == $pass)
header('Location: second.php');
else {
return '<font color="red">Вы ввели неверное имя или пароль</font>';
}
}
else
{
return NULL;
}
}
}
Далее вот такой файлик
$load= new mysqli("localhost","root","oracle","oop", 3306);
$result=$load->query("SELECT * FROM admin");
while ($row=$result->fetch_assoc())
{
$name1 = $row['name'];
$pass2 = $row['pass'];
}
А на самой странице
.
$member = new class_Member($name1, $pass2);
echo $member->hello($name1, $pass2);
Блин, такая ересть получается. Что то дебри и только они!
Спустя 17 секунд (3.07.2011 - 17:49) Krevedko написал(а):
Цитата (bulgakov @ 3.07.2011 - 14:43) | ||
А в разделе для начинающих можно публиковать только посты связанные с процедурным подходом? А если человек начинающий но в ооп? |
ты сам себе ответил. в ооп разделе можно и начинающим писать. для того он и создан
Спустя 4 минуты, 8 секунд (3.07.2011 - 17:54) m4a1fox написал(а):
Krevedko
А переместить раздел можно?
А переместить раздел можно?
Спустя 2 минуты, 44 секунды (3.07.2011 - 17:56) bulgakov написал(а):
Может это натолкнет на какие-то мысли? А то правда я уже и сам запутался в том что ты хочеш... надо стремиться к простоте а ты все усложняеш...
Спустя 10 минут, 54 секунды (3.07.2011 - 18:07) m4a1fox написал(а):
bulgakov
Я не специально . И то правда, как то сложно.... так. еще раз.
Надо(дано):
1. Отправить запрос в БД через форму методом POST.
2. Получить данные, обработать.
3. Проверить, есть ли такие в БД.
4. Если да - то пропустить иначе - ошибка.
Я не специально . И то правда, как то сложно.... так. еще раз.
Надо(дано):
1. Отправить запрос в БД через форму методом POST.
2. Получить данные, обработать.
3. Проверить, есть ли такие в БД.
4. Если да - то пропустить иначе - ошибка.
Спустя 2 минуты, 15 секунд (3.07.2011 - 18:09) m4a1fox написал(а):
Так-с. Все выдохнули. Получилось! Кому интересно - предоставить пезультат?
Спустя 4 минуты, 36 секунд (3.07.2011 - 18:14) Invis1ble написал(а):
Цитата |
Кому интересно - предоставить пезультат? |
а ну
Спустя 5 минут, 38 секунд (3.07.2011 - 18:20) m4a1fox написал(а):
Invis1ble
Глядите. Выкладываю все файлы, только не бить :)
class.mysql.php
Далее
class.member.php
НУ и собственно index.php
Глядите. Выкладываю все файлы, только не бить :)
class.mysql.php
$name1 = NULL;
$pass1 = NULL;
if (isset ($_POST['ok']))
{
$name = !empty($_POST['name']) ? trim($_POST['name']) : NULL;
$pass = !empty($_POST['pass']) ? trim($_POST['pass']) : NULL;
}
else
{
$name = TRUE;
$pass = TRUE;
}
$load= new mysqli("localhost","root","oracle","oop", 3306);
$result=$load->query("SELECT * FROM admin
WHERE `name` = '".$name."'
AND `pass` = '".$pass."'" );
while ($row=$result->fetch_assoc())
{
$name1 = $row['name'];
$pass1 = $row['pass'];
}
Далее
class.member.php
$name = true;
$pass = true;
class class_Member
{
function __construct($name, $pass) {
$this->name = $name;
$this->pass = $pass;
}
function hello ($name, $pass) {
if (isset ($_POST['ok'])){
if ($this->name == $name && $this->pass == $pass)
header('Location: second.php');
else {
return '<font color="red">Вы ввели неверное имя или пароль</font>';
}
}
else
{
return NULL;
}
}
}
НУ и собственно index.php
<div class="content">
<?php
$member = new class_Member($name, $pass);
echo $member->hello($name1, $pass1);
?>
<form action="" method="post">
<table border="0">
<tr>
<td>
Логин:
</td>
<td>
<input type="text" name="name"/>
</td>
</tr>
<tr>
<td>
Пароль:
</td>
<td>
<input type="password" name="pass" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" name="ok" />
</td>
</tr>
</table>
</form>
</div>
Спустя 1 минута, 58 секунд (3.07.2011 - 18:22) m4a1fox написал(а):
А-н нет! Включаем заднию. Уже не работает! Блин! Ну как так? Если форма пуста то все проходит.
Спустя 3 минуты, 46 секунд (3.07.2011 - 18:25) m4a1fox написал(а):
Представьте, работает если только вот так
то есть если так
То можно ничего не вводить, нажимаем отправить, и все. Идет переадресация.
,
$name = !empty($_POST['name']) ? trim($_POST['name']) : 'Гость';
$pass = !empty($_POST['pass']) ? trim($_POST['pass']) : NULL;
то есть если так
$name = !empty($_POST['name']) ? trim($_POST['name']) : NULL;
$pass = !empty($_POST['pass']) ? trim($_POST['pass']) : NULL;
То можно ничего не вводить, нажимаем отправить, и все. Идет переадресация.
Спустя 16 секунд (3.07.2011 - 18:26) Invis1ble написал(а):
Цитата |
if (isset ($_POST['ok'])){ |
я ж говорил, не надо работать напрямую с постом
Цитата |
$name = true; $pass = true; |
зачем тут?
Цитата |
header('Location: second.php'); |
не надо вообще отсылать заголовки из метода
Цитата |
return '<font color="red">Вы ввели неверное имя или пароль</font>'; |
лучше вернуть false, а в обработчике проверять на false
Цитата |
else { $name = TRUE; $pass = TRUE; } |
бред
Цитата |
$load= new mysqli("localhost","root","oracle","oop", 3306); $result=$load->query("SELECT * FROM admin WHERE `name` = '".$name."' AND `pass` = '".$pass."'" ); while ($row=$result->fetch_assoc()) { $name1 = $row['name']; $pass1 = $row['pass']; } |
зачем выполнять лишнюю работу? лучше засунуть в блок if
Спустя 1 минута, 44 секунды (3.07.2011 - 18:27) m4a1fox написал(а):
Invis1ble
Ясно! Сечас буду исправлять. Подскажете?
Ясно! Сечас буду исправлять. Подскажете?
Спустя 3 минуты, 20 секунд (3.07.2011 - 18:31) m4a1fox написал(а):
Цитата |
а в обработчике проверять на false |
А как в обработчике проверить? Что типо того, что вернула функция?
Спустя 1 минута, 13 секунд (3.07.2011 - 18:32) Invis1ble написал(а):
m4a1fox
Цитата |
А как в обработчике проверить? Что типо того, что вернула функция? |
ну да
вместо заголовка return true, вместо
Спустя 3 минуты, 3 секунды (3.07.2011 - 18:35) m4a1fox написал(а):
Invis1ble
Ну про функция я понял, но вот где, сделать перевод на друю станицу, не понимаю, к сожалению!
Ну про функция я понял, но вот где, сделать перевод на друю станицу, не понимаю, к сожалению!
Спустя 2 минуты, 38 секунд (3.07.2011 - 18:38) m4a1fox написал(а):
Не могу понять как прописать скрипт, что бы он смотрел функцию и при определенном значении выводи то или иное действе?!
Спустя 1 минута (3.07.2011 - 18:39) Invis1ble написал(а):
m4a1fox
где-где.... в обработчике:
где-где.... в обработчике:
if ($member->hello($name1, $pass2))
header('Location: script.php'); // авторизация успешна
else
die('ЖОПА!!!!'); // авторизация провалена
Спустя 18 минут, 34 секунды (3.07.2011 - 18:57) m4a1fox написал(а):
Ну в общем где-то так
class.member.php
файл class.mysql.php
И сам index.php
class.member.php
class class_Member
{
function __construct($name, $pass) {
$this->name = $name;
$this->pass = $pass;
}
function hello ($name1, $pass1) {
if ($this->name == $name1 && $this->pass == $pass1)
return TRUE;
else {
return FALSE;
}
}
}
файл class.mysql.php
$name1 = NULL;
$pass1 = NULL;
if (isset($_POST['ok']))
{
$name = !empty($_POST['name']) ? trim($_POST['name']) : 'Гость';
$pass = !empty($_POST['pass']) ? trim($_POST['pass']) : NULL;
}
else
{
$name = TRUE;
$pass = TRUE;
}
$load= new mysqli("localhost","root","oracle","oop", 3306);
$result=$load->query("SELECT * FROM admin
WHERE `name` = '".$name."'
AND `pass` = '".$pass."'" );
while ($row=$result->fetch_assoc())
{
$name1 = $row['name'];
$pass1 = $row['pass'];
}
И сам index.php
<div class="content">
<?php
$member = new class_Member($name, $pass);
if (!empty($_POST['ok'])){
if ($member->hello($name1, $pass1))
header('Location: second.php'); // авторизация успешна
else
echo '<font color="red">Вы ввели неверное имя или пароль</font>'; // авторизация провалена
}
?>
<form action="" method="post">
<table border="0">
<tr>
<td>
Логин:
</td>
<td>
<input type="text" name="name"/>
</td>
</tr>
<tr>
<td>
Пароль:
</td>
<td>
<input type="password" name="pass" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" name="ok" />
</td>
</tr>
</table>
</form>
</div>
Спустя 5 минут, 17 секунд (3.07.2011 - 19:02) Invis1ble написал(а):
m4a1fox
ну это уже немножко лучше. Но....
Теперь взгялни на свой код, в частности на класс. Ничего не смущает?
Смысл создавать класс, если все что он делает - по сути выполняется одной строчкой?
ну это уже немножко лучше. Но....
Теперь взгялни на свой код, в частности на класс. Ничего не смущает?
Смысл создавать класс, если все что он делает - по сути выполняется одной строчкой?
if ($name == $name1 && $pass == $pass1):)
header('Location: second.php'); // авторизация успешна
else
echo '<font color="red">Вы ввели неверное имя или пароль</font>'; // авторизация провалена
Спустя 2 минуты, 22 секунды (3.07.2011 - 19:05) m4a1fox написал(а):
Invis1ble
Блин....Ну тогда весь смысл в ООП пропадает!
Блин....Ну тогда весь смысл в ООП пропадает!
Спустя 57 секунд (3.07.2011 - 19:06) m4a1fox написал(а):
m4a1fox
Ладно! Вечером продолжу! Спасибо! Но это еще не конец.
Ладно! Вечером продолжу! Спасибо! Но это еще не конец.
Спустя 2 минуты, 56 секунд (3.07.2011 - 19:09) Invis1ble написал(а):
m4a1fox
Цитата |
тогда весь смысл в ООП пропадает! |
отож.
весь смак ООП, имхо - это наследование
посмотри на код метода check(), который я написал несколько постов назад
теперь попробуй понять логику и глубину (представь, что вместо `user` стоит '`' . $this->table . '`') и какую выгоду может сулить такой подход
как поймешь смысл - напиши
Спустя 12 часов, 19 секунд (4.07.2011 - 07:09) Invis1ble написал(а):
Вот например можно примерно так сделать:
т.е. мы можем создать объект и менять по мере необходимости table в зависимости от задачи.
Все это можно развивать и допиливать, это довольно примитивный пример.
Например, можно написать наследников
и т.д. и т.п.
class SomeClass {
private $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function __set($name, $value) {
$this->$name = $value;
}
public function count(array $properties) {
foreach ($properties as $name => $value)
$qWhere[] = '`' . $name . '` = ' . $this->pdo->quote($value);
$q = $this->pdo->query(
'SELECT COUNT(*)
FROM `' . $this->table . '`
' . (isset($qWhere) ? 'WHERE ' . implode(' AND ', $qWhere) : '')
);
return $q->fetchColumn();
}
}
$driver = 'mysql';
$database = 'database';
$host = 'localhost';
$username = 'root';
$passwd = 'root';
$dsn = $driver . ':dbname=' . $database . ';host=' . $host;
try {
if (isset($_POST['login'], $_POST['password'])) {
$pdo = new PDO($dsn, $username, $passwd);
$object = new SomeClass($pdo);
$object->table = 'users';
$result = $object->count(array('login' => $_POST['login'], 'password' => md5($_POST['password'])));
echo $result ? 'Success' : 'Fail';
}
}
catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
т.е. мы можем создать объект и менять по мере необходимости table в зависимости от задачи.
$object = new SomeClass($pdo);
$object->table = 'users';
$result = (bool)$user->count(array('login' => $_POST['login'], 'password' => md5($_POST['password']))) // авторизация;
$object->table = 'goods';
$result = $object->count(array()); // количество товаров в интернет-магазине
$result = $object->count(array('category_id' => 15)); // количество товаров в интернет-магазине для категории с id = 15
$object->table = 'orders';
$result = $object->count(array('user_id' => 15)); // колличество заказов, сделанных юзером с id = 15
Все это можно развивать и допиливать, это довольно примитивный пример.
Например, можно написать наследников
class User extends SomeClass {
public function __construct(PDO $pdo) {
parent::__construct($pdo);
$this->table = 'users';
}
}
// ........
$user = new User($pdo);
$result = (bool)$user->check(array('login' => $_POST['login'], 'password' => md5($_POST['password']))); // авторизация
и т.д. и т.п.