Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Библиотека самых бесполезных кусков кода, или как не стоит писать на РНР 
:(
    Опции темы
Eugene_Bond
Дата 12.9.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 3.9.2006

Репутация: нет
Всего: 4



На эту тему есть комьюнити в ЖЖ, но в последнее время активность спала..
PM MAIL   Вверх
BuShaRt
Дата 12.9.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



smartov
Ну так да, шаблон. В нем тег <messages>, который регуляркой заменяеться на текст ошибки=)

Хе.. Покажу ка я свой код, который мне не очень нравиться.. Можете посмеяться, но пожалуста откоментируйет над чем и чем моно заменить =)
То, что ввода не безопасен во второй форме я знаю... просто пока не дошел то туда, а функция field_validator как раз фильтрует ввод и возращает массив $messages. На примере описанного мной выше. 

Код

include ("config/config_index.php"); 
if (!$page) $page="index";

if($_POST["indexform"]) //Если был ввод в форму indexform
        {    
            field_validator("Логин", $_POST["login"], "alphanumeric", 4, 15);
            field_validator("Пароль", $_POST["password"], "string", 4, 15);
            if ($messages)
                {
                    GoIndex ($page); //Функция которая создает переменную $pages (в которой содержиться содержимое страници) и обращаюшееся к отдельному классу, который генерирует из шаблонов целостный html-код
                    exit;
                }
            if( !($row = CheckPass($_POST["login"], $_POST["password"],"index")) ) //проверка логина-пароля на совпадение
                {
                    $messages[]="Логин - пароль не совпадают.";
             }
            if ($messages)
                {
                    GoIndex ($page);
                    exit;
                }
            GreatMemberSession($row[login], $row[password]); //Занесение данных в сессию
            header("Location: index.php?".session_name()."=".session_id());
            
        }
    else 
        {    
            GoIndex ($page);
        }

if($_POST["indexreg"]) //
    {
        $query = "INSERT INTO ban_user ( login , password , mail , siteurl , banerurl , sitename , title, printlvl ) 
        VALUES (
            '$_POST[login]',
            '$_POST[password1]',
            '$_POST[mail]',
            '$_POST[siteurl]',
            '$_POST[banerurl]',
            '$_POST[sitename]',
            '$_POST[title]',
            '1')";
        $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
    }

PM MAIL   Вверх
Ignat
Дата 12.9.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 2
Всего: 73



Код

                {
                    $messages[]="Логин - пароль не совпадают.";
             }


ИМХО, во всем тексте проблемы с отступами...


--------------------
Теперь при чем :P
PM   Вверх
smartov
Дата 12.9.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 2
Всего: 259



BuShaRt, смеятся не будем. Зачем.
А вот поправить.
Ну беде вдаваться особо в структуру (то бишь улучшать саму логику предлагать не буду, это дело вкуса). А именно по стилистическим ошибкам.

1) 
Код

if($_POST["indexform"]) //Если был ввод в форму indexform    

12 строк кода
}
else
{
1 строка
}

Уже много раз говорено даже в этом теме, даже с обьяснениями, что не надо так писать. 
if (...) {500 строк) читать неудобно ну ни в каком месте. 
Код

  if ($messages)    
                {    
                    GoIndex ($page);    
                    exit;    
                }

Этот код почему то повторяется два раза в одном и том же уловии. Это UberReallyExit такой?
Итого имеем.
Код

if(!$_POST["indexform"]) //Не было ввода в форму indexform    
{
GoIndex ($page);
exit; //не знаю есть ли exit в GoIndex поэтому на всякий случай.
}

field_validator("Логин", $_POST["login"], "alphanumeric", 4, 15);    
field_validator("Пароль", $_POST["password"], "string", 4, 15);    
if( !($row = CheckPass($_POST["login"], $_POST["password"],"index")) )
{    
    $messages[]="Логин - пароль не совпадают.";    
}    
if ($messages)    
{    
    GoIndex ($page);    
    exit;    
}    

GreatMemberSession($row[login], $row[password]); //Занесение данных в сессию    
header("Location: index.php?".session_name()."=".session_id());    

А регистрацию я бы а) доделал б) вынес в другой файл или класс
PM MAIL   Вверх
BuShaRt
Дата 12.9.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



smartov
хм.. логично =) спасибо...
А если вот это еще посмотреть (раз такая расдача)? Тут я сам понимаю что бред, но просто не знаю, как можно оптемезировать.... Писал вообше нарашиванием, т.е. сначало одно написал, а потом (когда понадобилось) дописывал другое.

Чтоб везде не коменнтить... В итоге все операции сводяться к занесению в переменную $page определенных данных.

Код

function GoIndex ($pages) 
    {    
        $html = new WorkHTML (); //Создание объекта класса для генирации HTML
        global $link; 
        if ($pages=="reg" or $pages=="rule") //Если в переменной page reg или rule, то
            {
                        $valpage = file ("html/index_".$pages.".html"); 
                        foreach ($valpage as $val) $page.=$val; //Хватаем из папки html нужный файл и кидаем его в переменную $page (не путаем с $pages)
            }
        else
            {    
                if ($pages=="index" or $pages=="sys" or $pages=="mail" or $pages=="top") //Опять, смотрим, что у нас в переменной
                    { 
                        if ($pages=="top") // гМ=)
                            {
                                $sh_table = file ("html/index_sh_toptable.html"); 
                                $sh_row = file ("html/index_sh_rowtable.html"); //Типо шаблоны таблички извлекаем
                                $query="SELECT * FROM ban_user ORDER BY `push` DESC"; // Выделяем нужные данные сортируя сразу по полю push
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                while ($table = mysql_fetch_array($result)) //Загоняем данные в табличку
                                    {
                                        foreach ($sh_row as $val)
                                            {
                                                $val = ereg_replace ("<sitename>",$table[sitename],$val);
                                                $val = ereg_replace ("<sitetitle>",$table[title],$val);
                                                $val = ereg_replace ("<push>",$table[push],$val);
                                                $pageval.= $val;    
                                            }    
                                    }
                                foreach ($sh_table as $val)
                                    {
                                        $val = ereg_replace ("<printrow>",$pageval,$val);
                                        $page.=$val;
                                    }

                            }
                        else //Если все же не top, то делаем слудующие
                            {
                                $query="SELECT text FROM ban_indextext WHERE nametext='$pages'"; //Из специально таблици в бд выдираем текст страница
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                $row = mysql_fetch_array($result);
                                $page =  $row[text];
                            }
                    }
                else
                    {
                        if ($pages=="exit") //Если нечего у нас не получилось, то смотрим был ле exit и если да, то чистим сессию и кидаем пользователя на главную
                            { 
                                session_destroy();
                                header("Location: index.php");
                            }
                        else $page = "Такой страници не существует";        
                    } 
            }
        $html->GreatHTML($_SESSION["loggedIn_index"],$pages,$page); // Класс генерирующий HTML
    }         


 smile Чувствую тут точно ржать будите
PM MAIL   Вверх
smartov
Дата 12.9.2006, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 2
Всего: 259



Ну незнаю. Так написано как написано. По стилистике - нормально, без индуизмов. 
То бишь код читабельный и саппортный.
PM MAIL   Вверх
IZ@TOP
Дата 13.9.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



BuShaRt, есть несколько замечаний:

Код

<?php

function GoIndex ($pages) 
    {    
        $html = new WorkHTML (); //Создание объекта класса для генирации HTML
        global $link; 
        
        /**
         * IZ@TOP: В данном случае я бы посоветовал использовать switch/case конструкцию на предмет значения
         * в $pages - и быстрее и читабельнее. Еще можно было бы создать некий массив с индексами pages
         * значениями которых были бы массивы с перечислениями тех страниц которые нужно загрузить.
         * 
         */
        if ($pages=="reg" or $pages=="rule") //Если в переменной page reg или rule, то
        {
            $valpage = file ("html/index_".$pages.".html"); 
            
            /**
             * IZ@TOP: ну зачем же так страшно? Есть ведь чудо функция file_get_contents.
             * @example $page = file_get_contents($path);
             */
            
            foreach ($valpage as $val) $page.=$val; //Хватаем из папки html нужный файл и кидаем его в переменную $page (не путаем с $pages)
        }
        else
            {    
                /**
                 * IZ@TOP: и опять-таки, ни кто ведь не мешает воспользоваться switch/case.
                 * @example 
                 * switch($pages) {
                 *      case 'index':
                 *      case 'sys':
                 *      case 'mail':
                 *      case 'top': {
                 *          // выполнить некое действие
                 *          break;
                 *      }
                 * }
                 */
                if ($pages=="index" or $pages=="sys" or $pages=="mail" or $pages=="top") //Опять, смотрим, что у нас в переменной
                    { 
                        if ($pages=="top") // гМ=)
                            {
                                $sh_table = file ("html/index_sh_toptable.html"); 
                                $sh_row = file ("html/index_sh_rowtable.html"); //Типо шаблоны таблички извлекаем
                                $query="SELECT * FROM ban_user ORDER BY `push` DESC"; // Выделяем нужные данные сортируя сразу по полю push
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                while ($table = mysql_fetch_array($result)) //Загоняем данные в табличку
                                    {
                                        foreach ($sh_row as $val)
                                            {
                                                /**
                                                 * IZ@TOP: Здесь мы видим живой пример того, как не следует заменять строки.
                                                 * В днном случае нужно решать задачу при помощи str_replace, так как 
                                                 * она работает гораздо быстрее. А если уж и нужно использовать 
                                                 * регулярные выражения, то использовать не тормознутые POSIX регулярки
                                                 * а PCRE (Perl compatible regular expression), т.е. функции preg_*().
                                                 */
                                                $val = ereg_replace ("<sitename>",$table[sitename],$val);
                                                $val = ereg_replace ("<sitetitle>",$table[title],$val);
                                                $val = ereg_replace ("<push>",$table[push],$val);
                                                $pageval.= $val;    
                                            }    
                                    }
                                foreach ($sh_table as $val)
                                    {
                                        $val = ereg_replace ("<printrow>",$pageval,$val);
                                        $page.=$val;
                                    }
                            }
                        else //Если все же не top, то делаем слудующие

                            {
                                
                                /**
                                 * IZ@TOP: Ну и хочу сказать что mysql_real_escape_string та самая функция которая оградит тебя
                                 * от домогательств SQL инъекциями.
                                 */
                                $query="SELECT text FROM ban_indextext WHERE nametext='$pages'"; //Из специально таблици в бд выдираем текст страница
                                
                                $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
                                $row = mysql_fetch_array($result);
                                $page =  $row[text];
                            }
                    }
                else
                    {
                        if ($pages=="exit") //Если нечего у нас не получилось, то смотрим был ле exit и если да, то чистим сессию и кидаем пользователя на главную
                            { 
                                session_destroy();
                                header("Location: index.php");
                            }
                        else $page = "Такой страници не существует";        
                    } 
            }
        $html->GreatHTML($_SESSION["loggedIn_index"],$pages,$page); // Класс генерирующий HTML
    }         
    
?>


Еще хотелось бы заметить что у тебя ошибки на разных языках... по моему это странно. Еще меня приятно удивило полное отсутствие каких бы то нибыло обрамлений кавычками индексов массивов... может это у тебя константы?
Попробуй в начале всех своих страничек поставить ini_set('display_errors', 1); error_reporting(E_ALL);. Пока не избавишься от всех нотисов - код невалидный.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
BuShaRt
Дата 13.9.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



Цитата

Попробуй в начале всех своих страничек поставить ini_set('display_errors', 1); error_reporting(E_ALL);


 smile 
боже... сколько ошибок повылезало...
PM MAIL   Вверх
BuShaRt
Дата 19.9.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



Как теперь?
mysql_real_escape_string  еще не юзал, ее отнес отдельно к целому классу работы с БД, которым щас и занимаюсь...
Да, и не ужели mysql_real_escape_string  полностью защищает от иньекция?

Код

function GoIndex ($pages)
    {    
        //Создание класса и глобализация необходимых переменных
        $html = new WorkHTML (); global $link; global $messages;
        //Проверка значения $pages
        $page = ''; $valpage = '';
        //Если $pages = exit    
        if ($pages=='exit'){
            //Отчистка сесси и переход на главную страницу
            session_destroy();
            header("Location: index.php");
            }

        switch ($pages){
        
        //Если $pages = reg, rule
        case 'reg':
        case 'rule': 
            //Заносим в массив $page[] HTML странички 
            $valpage = file ("html/index_".$pages.".html");
            foreach ($valpage as $val) $page .= $val;
            //Преостановка выполнения функции Switch
            break;
        
        //Если $pages = index, sys, mail
        case 'index':
        case 'sys': 
        case 'mail': 
            //Выделение из таблици ban_indextext содержимово поля text соотвествующего выбранной странице
            $query="SELECT text FROM ban_indextext WHERE nametext='$pages'";
            $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
            //Занесение текста в переменную $page
            $row = mysql_fetch_array($result);
            $page =  $row['text'];
            //Преостановка выполнения функции Switch
            break;
                                
        //Если $pages = top
        case 'top':
            //Загружаем шаблоны таблицы                
            $sh_table = file ("html/index_sh_toptable.html");
            $sh_row = file ("html/index_sh_rowtable.html");
            //Выдиляем все данные из таблицы ban_user и сотртируем их по полю push
            $query="SELECT * FROM ban_user ORDER BY `push` DESC";
            $result=mysql_query($query, $link) or die("Died inserting login info into db.  Error returned if any: ".mysql_error());
            //Запускаем просмотр данных в цикле 
            while ($table = mysql_fetch_array($result))
                {    
                    //Заносим данные в строки таблици заменой тегов вшаблоне требуемыми данными. Сохраняем HTML код в массиве $valpage[]
                    foreach ($sh_row as $val)
                        {
                            $val = preg_replace ("/<sitename>/",$table['sitename'],$val);
                            $val = preg_replace ("/<sitetitle>/",$table['title'],$val);
                            $val = preg_replace ("/<push>/",$table['push'],$val);
                            $valpage .= $val;    
                        }    
                }
            //Создание полноценной таблици и занесение ее HTML-кода в массив $page[] 
            foreach ($sh_table as $val) $page .= preg_replace ("/<printrow>/",$valpage,$val);
            //Преостановка выполнения функции Switch
            break;
                
        //Если $pages = не объявленному значению        
        default: 
            $page = "Такой страници не существует";        
                    
        }
        //Передача свобранных параметров классу, генерирующему целостный HTML код странички
        $html->GreatHTML($_SESSION["loggedIn_index"],$pages,$page);
        //Завершение работы программы
        exit;
    }    

PM MAIL   Вверх
smartov
Дата 20.9.2006, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 2
Всего: 259



Цитата(BuShaRt @  19.9.2006,  20:00 Найти цитируемый пост)
Да, и не ужели mysql_real_escape_string  полностью защищает от иньекция?

Если правильно юзать.
PM MAIL   Вверх
BuShaRt
Дата 20.9.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: -1
Всего: 6



smartov

Код

    //Метод экранирования запроса
    function quote_smart($value) {
         // если magic_quotes_gpc включена, то снимаем экранированние
     if (get_magic_quotes_gpc()) $value = stripslashes($value);
        //Если переменная не число, то окружаем кавычками и экранируем
     if (!is_numeric($value)) $value = "'" . mysql_real_escape_string($value) . "'";
        return $value;
    }


Вот так =)

А потом 

Код

$query = sprintf("SELECT text FROM ban_indextext WHERE nametext=%s ",
            $mysql->quote_smart($pages));

PM MAIL   Вверх
IZ@TOP
Дата 22.9.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 1
Всего: 73



BuShaRt, опять же, есть небольшое замечание: в некоторых случаях preg_replace лучше заменить на str_replace. А насколько я вижу, тебе именно это лучше и сделать, так как у тебя не регулярка а простая строка идет на замену - зачем лишний раз процессорное время тратить?

Добавлено @ 13:34 
Цитата(BuShaRt @  19.9.2006,  22:00 Найти цитируемый пост)
Да, и не ужели mysql_real_escape_string  полностью защищает от иньекция?

Дело в том что эта функция экранирует данные согласно синтаксису mysql и данных касаемых конкретного коннекта.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
G0rinich
Дата 4.10.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 21.8.2006

Репутация: нет
Всего: 1



http://siteservice.ru/
Linker 3.0
файл linker_files/add_form.php строка 14

if(($banner || $link) && $ok==1) $ok=1;
PM MAIL   Вверх
smartov
Дата 5.10.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 2
Всего: 259



УберРеаллыПрисвоить smile встречал тоже такие строки smile
PM MAIL   Вверх
mr.fox
Дата 8.10.2006, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия

Репутация: нет
Всего: 2



Cейчас этого кадра поймал..

Код



 Создал базу данных и тд.
Теперь пытаюсь вывести всю информацию что в ней есть.


<?php
 mysql_connect($dbhost,$dbuser,$dbpassword ) OR DIE("Error");
 mysql_select_db($dbName) or die(mysql_error());
 $querry = "select * from Main";
 mysql_query($query) or die(mysql_error());
?>

мне выводит Query was empty.... Не могу понять в чем ошибка.... Доки читал но что-то не помогает...

Кто знает в чем проблема помогите плз.


http://forum.woweb.ru/topic25160s0.html?

я валяюсь
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Избранное | Следующая тема »


 




[ Время генерации скрипта: 0.1032 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.