PDA

Просмотр полной версии : холивар из АСР...


Easy
02.11.2011, 19:51
я же вам писал, всё завист от настройки сервера.
включите register_globals = On в пхп, и при наборе
panel.php?r_ip=1&modules['login'][0]=/etc/passwd
$r_ip - будет равно 1
$modules['login'][0] - будет равно /etc/passwd
ну то есть любой файл можно подставить, но всё зависит от системы, от её настройки, от прав под которыми запущены демоны... если на виндовсе сервер то права не нужны даже)

Кот ДаWINчи
02.11.2011, 20:33
освежил знания по пхп. Да есть такое. Но .htaccess еще никто не отменял.

Думаю, что тогда продолжать проект не имеет никакого смысла... Надо писать новый.

Вы лучше бы сказали, сколько будет стоит приват версия ACP с разными модулями, глядишь и у вас бы мотивация была
Приват версии не будет. (может и никакой версии не будет)

Праведник
02.11.2011, 22:33
Проект умер тогда, когда свет увидел php5...
Все попытки Кота его поддерживать - ничто иное, как реанимация.

Освежит знания в работе с новыми возможностями php и, возможно, практикуясь, сделает личный кабинет.

tempura
03.11.2011, 09:57
Мне кажется, что использование глобальных переменных в любом случае не есть гуд?

Праведник
03.11.2011, 10:15
tempura, отчего же?
Без них, зачастую, никак не обойтись. И не важно, что вы будете там хранить.

Тот же паттерн проектирования Singleton по сути - глобальная переменная (если грубо говоря).

Конечно, использовать их надо с умом, а не просто "что б было"

Кот ДаWINчи
03.11.2011, 10:20
Мне кажется, что использование глобальных переменных в любом случае не есть гуд?

совсем не гуд. Надо полностью уходить от этого. глобальные переменные держать только там, где без них не обойтись.

по идее и процедурное программирование - вчерашний день, но на ООП этот проект уже не перевести. Проще написать с нуля.

Праведник
03.11.2011, 10:28
Кот ДаWINчи, в ООП/MVC с глобальными переменными будете видиться ещё чаще :)
Быть может не в таком контексте, а в виде регистра, но сути не меняет :)

Easy
03.11.2011, 20:03
Синглтон просто используют чаще всего не по назначению. Основная задача - это что бы был один экземпляр какого либо объекта. А его юзают что бы просто глобальным сделать объект.

Перенести этот проект на ООП естественно смысла нет, лучше писать с нуля.



Кот ДаWINчи, в ООП/MVC с глобальными переменными будете видиться ещё чаще :)
Быть может не в таком контексте, а в виде регистра, но сути не меняет :)
ещё как меняет.

вот тут в коде что?
$module = ....
include ...
$module ....
include...
вот это - плохо. в любом файле переменная может нечаянно быть перетёрта из за того что имя слишком распространённое, особенно $n, $i, $s, $row, $res... и прочие.

когда вы юзаете
Core::model()->db->row
или просто $row
где больше шансов что переменная может быть перетёрта особенно если проект делает не один человек?
Но есть и страшнее последствия процедурного программирования.
Предположим что файл инклудится и в родительском файле объявляется переменная (как раз случай с этого сайта).
процедурный стиль
if ($file)
include $file;

не при всех настройках сервера этот код будет зщищён.

а в ООП будет что то типа
class A
{
$file;

function exec()
{
include $file;
}
}
и что будет если открыть файл напрямую? да не чего :)
как правило, только в index.php будет вызов что то типа
include "core/core.php";
App::run();
любой другой файл обычно содержит только классы и вызовы из классов. Так что не как не запустить в обход index.php

Я не утверждаю что ООП - значит без дыр :)
Это далеко не так, остаются в любом случае передаваемые параметры GET и POST которые просто как правило обрабатываются и проверяются в одном месте при получении, это удобней.

Кот ДаWINчи
03.11.2011, 20:15
Ну вот из хорошей темы сделали офтоп.

все посты с 256-го надо или в флудилку, или в корзину. :(

Праведник
03.11.2011, 20:20
Синглтон просто используют чаще всего не по назначению

No shit?)
Он просто идёт первым в книжках о паттернах проектирования)
П.с. на работе достался в наследство большой проект на зенде, в нём нет ни одного полноценного класса, одни синглтоны ((21 штука)разумеется, сам зенд не трогаю (п.с. имеется в виду вся бизнесс-логика)).
Можете себе представить такой расклад?)

ещё как меняет.
от это - плохо. в любом файле переменная может нечаянно быть перетёрта из за того что имя слишком распространённое, особенно $n, $i, $s, $row, $res... и прочие.

приведённый пример - идиотизм.
Используйте нормальные IDE (нетбинс, эклипс, пхпшторм)

Всё остальное из той же оперы. Бред сумасшедшего.

p.s. пример ооп улыбнул.
Autoloader/Неймспейсы - наше всё. Живите в 21 веке, а не в 19.

Easy
03.11.2011, 20:55
При чём тут вообще IDE ? я про ошибки программистов.

пример ООП это просто пример, это не реальный код. уж поверьте я давно в 21 веке живу :D и не понимаю каким боком тут неймспейс и автолоад привязался к дырам с глобальными переменными?

Праведник
03.11.2011, 21:04
При чём тут вообще IDE ? я про ошибки программистов.

Это ошибки кретинов, а не программистов.
Любая более или менее серьёзная среда разработки моментально ткнёт носом, если программист (не школьник с вовжопы), что-то упустил (например, утренний кофе прошёл мимо него)

и не понимаю каким боком тут неймспейс и автолоад привязался к дырам с глобальными переменными?

потому что читать надо в контексте, а не как удобно.

p.s. за сим откланяюсь. Хотите продолжить полемику - в личку. Тему загаживать не будем.
p.p.s регистер глобалс давно деприкейтед... но это ведь никого не волнует, не правда ли?)

Кот ДаWINчи
04.11.2011, 20:58
что мешает использовать свой класс для работы с БД? потом в нём изменить функции на pdo или mysqli и всё будет прекрасно работать.

Попытался сегодня организовать класс для работы с mysqli. вижу что ничего путнего не выходит, т.к. очень трудно обратно передать массив с выбранными данными, и ничего не потерять. Точнее, если делать всё как надо, то функция возврата данных становится ужасно громоздкая. Буду думать как ее организовать более удобно.

Easy
05.11.2011, 04:24
Ну во первых, простейший класс, это просто перекрыть функции, что бы можно было сменить потом функции обращения к бд.
что то типа
class DB
{
function q($sql)
{
return mysql_query($sql);
}
...


в результате что бы поменять на mysqli вам понадобилось бы просто поправить одну строку, а не на каждой странице.

А какая проблема с возвращением массива не понял? Массив прекрасно возвращается из функции.

Ещё совет - использовать для указания параметров функции, а не формировать sql запрос самому подставляя значения напрямую в строку.
http://www.php.net/manual/ru/mysqli-stmt.bind-param.php
http://www.php.net/manual/ru/pdostatement.bindvalue.php
http://www.php.net/manual/ru/mysqli-stmt.bind-param.php
Это поможет защититься от sql инъекций.



А ещё лучше, юзайте фреймворк для написания сайта :) Например Yii (http://www.yiiframework.com/doc/guide/1.1/ru/index). Очень лёгок в изучении, и сайт на нём работает быстрей чем например на Zend.
Но юзая фреймворк вы теряете главное, опыт в кодинге на самом php :) Ну, если вы будите смотреть сорцы фреймворка, как он устроен, и разбираться почему так... то это тоже хорошо для обучения.

Или переходи на Python :) Мне больше понравился чем пхп. В России мало почему то распространён, но набирает обороты. Всё чаще требуются на работу программисты Python.

Кот ДаWINчи
05.11.2011, 06:33
Ну во первых, простейший класс, это просто перекрыть функции, что бы можно было сменить потом функции обращения к бд.
что то типа
class DB
{
function q($sql)
{
return mysql_query($sql);
}
...


в результате что бы поменять на mysqli вам понадобилось бы просто поправить одну строку, а не на каждой странице.

А какая проблема с возвращением массива не понял? Массив прекрасно возвращается из функции.

Человек, вы или глубокий теоретик или прочли мануал по диагонали, НЕВНИКАЯ в в детали.

Задача у нас такая: "загнать все манипуляции с базой данных в класс. Обращение к функциям конкретной базы данных ВНЕ класса запрещены, т.к. замена файла-класса на другой должна приводить к смене базы данных БЕЗ корректировки остального кода движка".

Исходя из этой нашей задачи, смотрим на ваш код выше:

1. ваша ф-ция $DB->q('select * from table'); вернет нам некий массив данных. Обычно этот массив необходимо разобрать(обработать) другими ф-циями. Для MySQL это обычно mysql_fetch_assoc(), НО мы же ведь написали в задаче, что не имеем возможности использовать ф-ции конкретной базы данных вне класса.
2. если мы засунем mysql_fetch_assoc() в функцию , то нам придется обрабатывать и возвращать 2 массива и 2 переменных: количество полей и записей, названия полей, сами данные. а потом уже в коде скрипта опять разбирать полученные данные. а это очень громоздко, мутарно и медленно. (о чем я и писал в своем посте выше).

В общем такая игра не стоит свеч.

Easy
05.11.2011, 08:07
Эм.... как бэ, при чём тут мануал, вы не можете написать класс для работы с бд, я вам советую для начала попробовать написать простейший класс, PDO и так хороший класс, а обёртка нужна что бы легко было перейти от mysqli к PDO и наоборот, ну и от mysql_*, можно просто использовать класс обёртку.
Я не говорю не о каких деталях, когда я делал лк, я вникал в детали, потому что я его делал, а этот сайт я не делаю, я просто предлагаю варианты направлений, а вы, в зависимости от ваших знаний и желания - выбирайте путь.

Задача у нас такая: "загнать все манипуляции с базой данных в класс. Обращение к функциям конкретной базы данных ВНЕ класса запрещены, т.к. замена файла-класса на другой должна приводить к смене базы данных БЕЗ корректировки остального кода движка".
Я не видел текста этой задачи :)

возвращать 2 массива и 2 переменных: количество полей и записей, названия полей, сами данные
не совсем понял что вы имеете ввиду?

сделайте просто функции типа fetch(), first(), next(), all() да какие угодно внутри класса, а потом юзайте
foreach ($db->all as $row)
или
while ($row = $db->getRow())

Ну а что мешает не возвращать значение в функции query а хранить в переменной класса? Более того, если юзать PDO это вообще может не понадобится (не знаю как в mysqli).

Кот ДаWINчи
05.11.2011, 08:17
(не знаю как в mysqli)

вот с этого и надо было начинать. я же вчера исползал mysqli вдоль и поперёк. Результата добился, но получился такой монстр... что проще напрямую вставлять mysqli в код скрипта.

Сегодня предприму попытку №2...

Easy
05.11.2011, 08:35
Ну смотрим http://www.php.net/manual/en/mysqli.query.php
For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a MySQLi_Result object.
И что тут не понятного? Практически то же самое что и mysql_query :)
хоть возвращайте этот же результат, хоть сохраняйте внутри в переменной. вот самый простейший пример

class DB
{
$res;

function q($sql)
{
$res = $mysqli->query($sql);
}

function assoc()
{
return $res->fetch_assoc();
}
}

и ваш результат будет хранится внутри класса, главное тогда помнить об этом :)

Кот ДаWINчи
05.11.2011, 10:24
и опять теория подкрепленная непроверенным примером из мануала, и не более того.

1. Замечу что ваш код не работоспособен, т.к. $res в 3, 7, 12 строках этого "примера" не есть одно и тоже. Как минимум в 2-х последних строках добавляем "this->".

2. $mysqli->query($sql) тоже без "this->" работать не будет. и $mysqli тоже заранее объявить как переменную класса.

3. $res; лучше сделать private.

Если вы пытаетесь меня убедить что я дурак, то не выйдет. Я не программист, а ПХП - это просто хобби. Причем, я сперва проверяю в работе, а потом открываю варежку. и мне глубоко фиолетово мнение других про мой говнокод. Я просто пишу как могу. (а ваших "плодов" я пока не видел)

Easy
05.11.2011, 12:51
Замечу что ваш код не работоспособен
омг, замечу, что это просто рассуждение, это не реальный код так как такой код даже рабочий просто бессмысленный :D
на ооп я перешел примерно 7-8 лет назад, я просто ещё не доучил что есть такое понятие как приват :D
я ещё раз повторю, это просто направление, это не как не примеры реального кода.

Если вы пытаетесь меня убедить что я дурак
где я такое сказал?

вообщем делай как считаешь нужным, я не вмешиваюсь :)

Праведник
05.11.2011, 13:40
перейти от mysqli к PDO

Я бы взглянул в глаза тому человеку, который меняет шило на мыло.

А ещё лучше, юзайте фреймворк для написания сайта

Типа дань моде?)

Или переходи на Python Мне больше понравился чем пхп. В России мало почему то распространён, но набирает обороты. Всё чаще требуются на работу программисты Python.

Аха. Parser товарища Лебедева тоже "набирает обороты". Если уж менять пхп на что-либо, то на руби на рельсах.

Easy
05.11.2011, 18:58
Я бы взглянул в глаза тому человеку, который меняет шило на мыло.
Если вы так уверенны что на это нет причин - это ваша проблема :)

Типа дань моде?)
Типа на фв можно написать сайт с регистрацией, группами пользователей, новостями и блогами - за пару часов. При чём не абы что, а хороший сайт.
Это как бэ здравый смысл.

Если уж менять пхп на что-либо, то на руби на рельсах.
Ваше право, моё мнение - на питон, ваше на руби. Не кто вам не запрещает иметь собственное мнение :)


Прошу обратить внимание на свои же слова:
p.s. за сим откланяюсь. Хотите продолжить полемику - в личку. Тему загаживать не будем.
Но вы опять просто пытаетесь развести флуд вместо советов по делу.

Minimajack
05.11.2011, 19:15
совет по делу.
Взять лопату и зарыть проект( перестать поддерживать ), и не пытаться оживить франкенштейна.
И начать ЛК3 ООП + =)
зы все же на гит стоит выложить, хоть под левым аккаунтом.

Праведник
05.11.2011, 19:36
Типа на фв можно написать сайт с регистрацией, группами пользователей, новостями и блогами - за пару часов. При чём не абы что, а хороший сайт.

ух ты... Не покажете мне этого гения?)

Если вы так уверенны что на это нет причин - это ваша проблема

Конечно есть) ведь PDO поддерживает не все возможности мускуля :)
А так же не дружит с поддержкой мультизапросов. Везкая причина на него переехать.

вместо советов по делу.

Пойти и застрелиться - прокатит за совет?
Использовать фреймворки для проектов такого размера - кощунственно, неправильно и вообще идиотизм. Исключение - тренировка работы с этим фреймворком.

Кот ДаWINчи
05.11.2011, 19:45
совет по делу.
Взять лопату и зарыть проект( перестать поддерживать ), и не пытаться оживить франкенштейна.
И начать ЛК3 ООП + =)
зы все же на гит стоит выложить, хоть под левым аккаунтом.

что и делается потихоньку. Только выкладывать альфу никуда не буду. К тому же у меня поменялось мнение на счет самого термина "ЛИЧНЫЙ КАБИНЕТ". Точнее, я теперь приверженец его отсутствия. т.е. есть веб-портал сервера на котором надо регистрироваться под своим аккаунтом, и в зависимости от прав доступа аккаунта, пользователь получает в своё распоряжение тот или иной функционал сайта. Другими словами - сам движок и есть ЛК с расширенными возможностями. Весь придуманный функционал для такого "движка" раскрывать не буду, а придумано уже много. Только садись и делай.

Easy
05.11.2011, 20:27
Minimajack, а разве не это хотел сделать Кот ДаWINчи?)

Праведник, отвечу вам вашими же словами: потому что рассматривать mysqli и pdo нужно не с одной стороны, то есть не так как вам удобно, а вообще рассматривая все возможности.

Праведник
05.11.2011, 22:24
Я и рассмотрел все возможности и выделил недостатки PDO.
MySQLi этих недостатков не имеет. Ровно как и PDO не имеет ни одного преимущества над MySQLi.

я вобще предполагаю, что у вас нет ни одного проекта, где бы использовались фреймворки, как таковые. Раз вы не знаете банальных отличий различных драйверов.

А уж тем более заявляя про сроки в час...

К нам на фирму на днях пришёл товарищ. Вот его резюме:

http://narod.ru/disk/30450453001/IMG_0739.JPG.html
http://narod.ru/disk/30450618001/IMG_0740.JPG.html

Он тоже, как и вы - знал всё :) А на деле... Стоит ли говорить, что весь офис был в истерике после собеседования с оным?

Easy
05.11.2011, 22:48
MySQLi этих недостатков не имеет. Ровно как и PDO не имеет ни одного преимущества над MySQLi.
Имеет :)

я вобще предполагаю, что у вас нет ни одного проекта
не в моих силах запрещать вам что либо предполагать :)

Раз вы не знаете банальных отличий различных драйверов.
уж поверьте знаю :) может не всех нюансов) но знаю :D и реч не конкретно о драйвере pdo-mysql а о расширении pdo против расширения mysqli, вы же опять приплели то что вам выгодно :)

А уж тем более заявляя про сроки в час...
это логично, так как, раз по вашему у меня нет не одного проекта на фв, то и за несоклько часов я сделать не смогу :D

Он тоже, как и вы - знал всё А на деле...
уж не вам судить что я знаю чего нет, поверьте :) вы так пишите как бужто я с вами собеседование проходил, то что вы выучили три слова: автолоад, неймспейс и драйвер, ещё не значит что вы телепат :)

зато вы хороший троль) наверное пользуетесь авторитетом на вов жп :)

Easy
05.11.2011, 22:51
Кстати, у меня знакомый по университету, работает в одном крупном гос учреждении и он решает кого взять помощником, он там программист, но он сам программирование не знает, так, виндовс может переустановить, я думаю нормальный программист у него собеседование тоже не прошел бы :D
надеюсь он не из вашей фирмы :)

Праведник
05.11.2011, 23:05
Предупреждал же меня Кот, что бы не впрягался в дебаты с троллями...
В общем ясно всё тут.

п.с. по вашим примерам и знания ваши оценили. И не надо оправданий про "я не старался, так вышло".
Флудите на ТК, тролльте на румангосе и будет щасце)

Easy
05.11.2011, 23:53
по вашим примерам и знания ваши оценили. И не надо оправданий про "я не старался, так вышло"
да ради бого) я вижу как вы рассуждаете:
-люди или прогеры или кретины
-разговор про дыры в лк, вы приплели автолоад
-разговор о расширении пдо против мускли вы про драйвер мускл
-я пишу это не код а направление, вы пишите "я не старался, так вышло"
и я после этого троль :) вы всё сверх на голову перевернули :)

Предупреждал же меня Кот
а это вообще по взрослому :D 5 баллов :)

Праведник
06.11.2011, 01:32
Читать по диагонали нынче модно.
Так все поступают, когда решают слиться. Продолжайте дальше. Вас ждёт успех

Easy
06.11.2011, 01:55
Читать по диагонали нынче модно.
Абсолютно с этим согласен :)