[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: задача twin'а - 2
ApuktaChehov
PHP
<?php
//Функция фильтрации данных
function inputclean($input){
    $input=htmlspecialchars($input);
    $input=trim($input);
    $input = substr($input, 0, 250);
    return $input;
}
//Определяем константы
define ("DBName","testdb");
define ("HostName","localhost");
define ("UserName","root");
define ("Password","");

//Подключаемся
$db_connect=mysql_connect(HostName,UserName,Password) or die (mysql_error());

//Выбираем базу
mysql_select_db(DBName, $db_connect) or die(mysql_error());

//Устанавливаем кодировку запроса
mysql_query("SET NAMES cp1251");

//Обработка запроса поиска
if(isset($_GET['find_submit'])){

    //Фильтруем данные
    if (!get_magic_quotes_gpc()) {
        $_GET['find_name']=mysql_real_escape_string($_GET['find_name']);
    }
    
    
//Формируем запрос
    $find_ogj=mysql_query("select * from names WHERE name LIKE '%".$_GET['find_name']."%'") or die (mysql_error());
    
    
//выводим результат
    echo("Найдено <b>".mysql_num_rows($find_ogj)." </b>пользователей:<br />");
    for ($i=;$i<mysql_num_rows($find_ogj); $i++){
        $find=mysql_fetch_array($find_ogj);
        $nm=$i+1;
    
        
//Фильтруем то что пришло
        $find['name']=inputclean($find['name']);
        echo("<b>$nm)</b> ".$find['name']."<br />");
    }
    echo("<hr/><br />");
}

//Обработка запроса регистрации пользователей
if(isset($_POST['submit'])){
    
    
//Фильтруем данные
    if (!get_magic_quotes_gpc()) {
        $_POST['user_name']=mysql_real_escape_string($_POST['user_name']);
    }
    
    
//Формируем запрос на запись
    mysql_query("INSERT INTO `names` (`name`) VALUES ('".$_POST['user_name']."')") or die (mysql_error());
    
    
//Переадресация
    header("location: ".$_SERVER['PHP_SELF']."");
    exit();
}

//Формируем запрос на чтение
$ob=mysql_query("select * from names") or die (mysql_error());

//выводим результат
for ($i=;$i<mysql_num_rows($ob); $i++){
    $f=mysql_fetch_array($ob);
    //Фильтруем то что пришло
    $f['name']=inputclean($f['name']);
    echo("<li>".$f['name']."<br />");
}
if(!isset(
$_GET['find_name'])){
    $_GET['find_name']="";
}
$_GET['find_name']=inputclean($_GET['find_name']);
?>
<html>
<head>
<title>Тест</title>
</head>
<body>
<form action="index.php" name="form" method="get">
<input name="find_name" size="30"/ value="<?= $_GET['find_name']?>"><br />
<input type="submit" name="find_submit" value="Найти">
</form><br />
<form action="index.php" name="form" method="post">
<input name="user_name" size="30"/><br />


Не влазит чучуть. sad.gif



Спустя 2 минуты, 53 секунды (17.08.2009 - 12:56) ApuktaChehov написал(а):
Вот конец:
<input type="submit" name="submit" value="Зарегистрироваться">
</form>
</body>
</html>

Спустя 33 минуты, 7 секунд (17.08.2009 - 13:29) stepan написал(а):
Оформление не правильно дальше даже смотреть не стал

Спустя 22 минуты, 48 секунд (17.08.2009 - 13:52) ApuktaChehov написал(а):
А что не так?

Спустя 33 минуты, 47 секунд (17.08.2009 - 14:25) stepan написал(а):
Ну если тебе курирует twin то он наверняка тебя заставлял вот это считать, так выучи вот эти правила как отчи наши,
Цитата

Требования к оформлению php кода

1. Не лнпить код к левому краю. Делаем отступ табулятором.
Не так:

<?php
if($var == 0)
{
echo 'Ноль';


а так:

<?php
    if($var == 0)
    {
    echo 'Ноль';
    } 

2. Использовать только длинные теги
Не так:

<?
?>
<?=$page ?> 

а так:

<?php
?>
<?php echo $page ?> 

3. Все переменные объявлять явно.
не так:

<?php
    if(isset($_GET['page'])){$page = $_GET['page'];} 

а так:

<?php
    $page = isset($_GET['page'])?$_GET['page']:NULL; 

4. Избегать лишних фигурных скобок.
Писать не так:

<?php
    if(isset($_GET['page']))
    {
    echo $_GET['page'];
    } 

а так:

<?php
    if(isset($_GET['page']))
    echo $_GET['page']; 

5. Открывающую фигурную скобку ставить не после выражения а под ним. Закрывающую строго под открывающей.
не так:

<?php
    if(isset($_GET['page'])){echo $_GET['page'];}

    if(isset($_GET['page'])){
    echo $_GET['page'];
    } 

а так:

<?php

    if(isset($_GET['page']))
    {
    echo $_GET['page'];
    } 

6. Вложенные выражения сдвигать вправо табулятором.
Не так:

<?php
    if(isset($_GET['page1']))
    {
    echo $_GET['page1'];
    if(isset($_GET['page2']))
    echo $_GET['page2'];
    } 

а так:

<?php
    if(isset($_GET['page1']))
    {
    echo $_GET['page1'];

        if(isset($_GET['page2']))
        echo $_GET['page2'];
    } 

7. Не писать переменные в двойных кавычках, использовать конкатенацию. По возможности использовать апострофы, а не двойные кавычки
Не так:

<?php
    echo "<a href='$page' >Ссылка</a>"; 

а так:

<?php
    echo '<a href="'.$page.'" >Ссылка</a>'; 

8. Операторы отделять пробелами.
Не так:

<?php
    if($_GET['page']==NULL) 

а так:

<?php
    if($_GET['page'] == NULL) 

9.Переменные писать в нижнем регистре, константы в верхнем, функции с маленькой буквы, классы с двума заглавными.
не так:

<?php
    echo $Page;
    echo Page;
    class createlist
    function Listpage()


?> 

а так:

<?php
    echo $page;
    echo PAGE;
    class CreateList
    function listpage()
?> 

10. Использовать сквозные переменные.
Если это название поля в форме, то так же должны называться переменные в php и поля в таблицах баз данных.

<?php

    $page = isset($_GET['page'])?$_GET['page']:NULL;
?>
<input name="page" type="text" />

Ну вот основные десять заповедей.

Ах, да. Обязательно комментируем каждую строчку. Ну хотя бы функцию. Как минимум.

Спустя 2 минуты, 58 секунд (17.08.2009 - 14:28) twin написал(а):
По задаче.
Решена не полностью, список выведен не в виде ссылок, нет вывода даты регистрации.
Основная ошибка
Отработка директивы magic_quotes не верная, по этой причине имена с кавычками или апострофпми возвращаются в форму искаженными, если она включена
Мелкие недостатки.
1. Скрипт жестко привязан к файлу (в action формы указан конкретный адрес)
2. Обе формы имеют одинаковый атрибут name.
3. Нет явного объявления переменных, что может вызвать нотис.
4. Применение функции substr() излишне, так как тип поля varchar сам по себе не допустит такого превышения.
5. Цикл организован неоптимально, гораздо уместнее тут был бы while.

По стилю.
1.Операторы в запросах написаны как попало, половина в верхнем регистре, половина в нижнем. Обратные кавычки то используются, то нет. Это сбивает с толку, делая код плохо читаемым
2. Названия переменных не отражают сути.


Рекомендации по стилю.
1. Операторы желательно выделять пробелами, тогда это аккуратнее и на много читабельнее:
PHP
for ($i = 0; $i < mysql_num_rows($ob); $i++)

2. Напрасно используешь шор-теги, гораздо надежнее php дескрипторы.
3. Лучше привыкать к кодировке UTF-8.

Положительные моменты.
1. Код разделен на логические блоки, это красиво и правильно.
2. Снабжен комментариями. Респект.
3. Функции применяются к месту, на своих местах. Это уже огромный плюс.

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

Попробуй исправить недочеты и ошибки, их не так уж и много)

Спустя 3 минуты, 8 секунд (17.08.2009 - 14:31) ApuktaChehov написал(а):
Понял, сейчас поправлю.

Спустя 1 минута, 34 секунды (17.08.2009 - 14:33) twin написал(а):
Цитата
Ну если тебе курирует twin то он наверняка тебя заставлял вот это считать, так выучи вот эти правила как отчи наши,

Отче наш biggrin.gif Это молитва такая.
А вообще я требую такого стиля на своих курсах, что бы был у всех единый. Стиль это дело индивидуальное, хотя если пишешь не только для себя, любимого, то кое каких общих правил придерживаться крайне желательно.
К ним относятся в основном пункты 3, 8, отчасти 10.
Остальные просто удобны и красивы на мой взгляд, но тут не курсы, я ничего никому не навязываю.

Спустя 1 день, 1 час, 26 минут, 10 секунд (18.08.2009 - 15:59) ANG3 написал(а):
twin , дай сылку на твою задачу, там где поиск по сайту нужно было сделать. Хочу попробовать, что-то тему найти не могу.

Спустя 2 часа, 45 минут, 49 секунд (18.08.2009 - 18:45) twin написал(а):

Спустя 1 минута, 11 секунд (18.08.2009 - 18:46) Gabriel написал(а):
опередил:)

Спустя 1 день, 14 часов, 19 минут, 3 секунды (20.08.2009 - 09:05) ApuktaChehov написал(а):
Доработанный вариант
PHP
<?php
    
//Функция фильтрации данных
    function inputclean($input)
        {
            $input = htmlspecialchars($input);
            $input = trim($input);
            return $input;
        }
        
    
//Определяем константы
    define ("DBNAME","testdb");
    define ("HOSTNAME","localhost");
    define ("USERNAME","root");
    define ("PASSWORD","");

    //Подключаемся
    $db_connect = mysql_connect(HOSTNAME,USERNAME,PASSWORD) or die (mysql_error());

    //Выбираем базу
    mysql_select_db(DBNAME, $db_connect) or die(mysql_error());

    //Устанавливаем кодировку запроса
    mysql_query("SET NAMES cp1251");
            
    
//Обработка запроса поиска
    if(isset($_GET['find_button']))
        {
            //Обаработка данных при включенном get_magic_quotes_gpc
            if (get_magic_quotes_gpc())
                $_GET['find_name'] = stripslashes($_GET['find_name']);
                
            
//Фильтруем данные
            $_GET['find_name'] = mysql_real_escape_string($_GET['find_name']);
            
            
//Формируем запрос
            $find_ogj = mysql_query("SELECT * FROM names WHERE name LIKE '%".$_GET['find_name']."%'") or die (mysql_error());
    
            
//выводим результат
            echo('Найдено <b>'.mysql_num_rows($find_ogj).' </b>пользователей:<br />');
                while($find_name = mysql_fetch_assoc($find_ogj))
                    {
                        $find_name['name'] = inputclean($find_name['name']);
                        echo "<li>".$find_name['name']."<br />";
                    }
            echo("<hr/><br />");
        }

    //Обработка запроса регистрации пользователей
    if(isset($_POST['reg_button']))
        {
            //Обаработка данных при включенном get_magic_quotes_gpc
            if (get_magic_quotes_gpc())
                $_POST['user_name'] = stripslashes($_POST['user_name']);
                
            
//Фильтруем данные
            $_POST['user_name'] = mysql_real_escape_string($_POST['user_name']);
    
            
//Формируем запрос на запись
            mysql_query("INSERT INTO `names` (`name`) VALUES ('".$_POST['user_name']."')") or die (mysql_error());
    
            
//Переадресация
            header("location: ".$_SERVER['PHP_SELF']."");
            exit();
        }
        
    
//Обрабатываем события при нажатии на ссылку пользователя
    if(isset($_GET['id']))
        {
            //Обаработка данных при включенном get_magic_quotes_gpc
            if (get_magic_quotes_gpc())
                $_GET['id'] = stripslashes($_GET['id']);
                
            
//Фильтруем данные
            $_GET['id'] = mysql_real_escape_string($_GET['id']);
                
            
//Формируем запрос на чтение
            $user_array1 = mysql_query("SELECT * FROM names WHERE id='".$_GET['id']."'") or die (mysql_error());

                //выводим результат
                while($info = mysql_fetch_assoc($user_array1))
                    {
                        $info['name'] = inputclean($info['name']);
                        echo ("Дата регистрации пользователя <b><font color=#0000ff>".$info['name']."</font> - ".$info['date']."</b>");
                    }
        }
    //Формируем запрос на чтение
    $user_array1 = mysql_query("SELECT * FROM names") or die (mysql_error());

    //выводим результат
    while($info = mysql_fetch_assoc($user_array1))
        {
            $info['name'] = inputclean($info['name']);
            echo "<li><a href = index.php?id=".$info['id'].">".$info['name']."</a><br />";
        }
        
    
//Определяем переменные
    $_GET['find_name'] = !empty($_GET['find_name']) ? $_GET['find_name'] : NULL;
    
    
//Фильтруем
    $_GET['find_name'] = inputclean($_GET['find_name']);
    
    
//Режим обратный слеш
    $_GET['find_name'] = str_replace('\\','',$_GET['find_name']);

Спустя 2 минуты, 7 секунд (20.08.2009 - 09:07) ApuktaChehov написал(а):
HTML
<html>
<head>
<title>Тест</title>
</head>
<body>
<form action="<?PHP echo($_SERVER['PHP_SELF']);?>" name="search_form" method="get">
<input name="find_name" size="30"/ value="<?PHP echo($_GET['find_name']);?>"><br />
<input type="submit" name="find_button" value="Найти">
</form><br />
<form action="<?PHP echo($_SERVER['PHP_SELF']);?>" name="reg_form" method="post">
<input name="user_name" size="30"/><br />
<input type="submit" name="reg_button" value="Зарегистрироваться">
</form>
</body>
</html>

Спустя 5 часов, 11 минут, 40 секунд (20.08.2009 - 14:19) twin написал(а):
Ну уже лучше. Хотя еще немножко не дотянуто.
1. Обратный слэш не только не ищется, но и не возвращается в форму.
2. Обычная практика, символ %. Работает некорректно
3. Блок вывода даты регистрации неоптимален. Во первых, целочисленное значение так и обрабатывается как строковое. Во вторых, при автоинкрементном поле id по определению не может быть результата, состоящего более чем из одной строки. По этому цикл там совсем не нужен.
4. Чисто косметически:
Цитата
//Фильтруем данные

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

За то по стилю очень большой прогресс. Приятно читать такой код. Все аккуратно (ну если бы еще форум не искажал маленько) и логично.

Вобщем почти зачод smile.gif На 4 с плюсом.

Спустя 13 минут, 32 секунды (20.08.2009 - 14:33) ApuktaChehov написал(а):
Цитата (twin @ 20.08.2009 - 11:19)
1. Обратный слэш не только не ищется, но и не возвращается в форму.

А нужно?

Я его специально срезал
PHP
$_GET['find_name'] = str_replace('\\','',$_GET['find_name']);
sad.gif

Спустя 3 минуты, 19 секунд (20.08.2009 - 14:36) ApuktaChehov написал(а):
Цитата (twin @ 20.08.2009 - 11:19)
2. Обычная практика, символ %. Работает некорректно
3. Блок вывода даты регистрации неоптимален. Во первых, целочисленное значение так и обрабатывается как строковое. Во вторых, при автоинкрементном поле id по определению не может быть результата, состоящего более чем из одной строки. По этому цикл там совсем не нужен.

2)Расскажи про %, а то я не в курсе вообще.

3)Цикл я убрал. Старано, как я не увидел этого... mad.gif
А вот про оптимальность и обработку значений не понял. Расскажи по подробнее.


Спасибо!

Спустя 1 час, 9 минут, 19 секунд (20.08.2009 - 15:45) twin написал(а):
Про процент тут посмотри.
Бэкслэш немного не там обрезал.
А числовые значения не нужно в запросах обрамлять апострофами. А что бы инъекций избежать, надо привести к целому. Удобно и быстро работает конструкция (int), но можно использрвать intval().


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.