[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: решение задачи twina
ZSH
С условиями можно ознакомиться здесь

PHP
<?php

mysql_connect
('localhost','root','root');             //подключение к БД
mysql_select_db('name');
mysql_query('SET NAMES cp1251');


@
$login = $_REQUEST['login']; 
@$id = $_REQUEST['id'];
@
$poisk = $_REQUEST['poisk'];
if (get_magic_quotes_gpc())                           //если включен get_magic_quotes_gpc
    {    $login = stripslashes($login);
        $id = stripslashes($id);                          //удаляем слеши
        $poisk = stripslashes($poisk);
    }
if(
$id) Date_register($id);                           //запрос поиска даты регистрации                         
if($poisk) Poisk_login($poisk);                       //запрос поиска имени пользователей                                      
if($login)                                            
    
{                                                   
        $login 
= trim($login);                            //проверка на пробелы
        if($login != '') Save_login($login);              //и вызов функции регистрации
    }
                                                       
Screen_login
();                                       //вывод зарегистрированых на экран
                                                                                                        



                                        
//ФУНКЦИЯ ПОИСКА ДАТЫ РЕГИСТРАЦИИ

function Date_register($id)                           //$id номер переданный по ссылке
{    
    $id 
= mysql_real_escape_string($id);                //экранируем перед запросом БД
    $date = mysql_query('SELECT * FROM name WHERE id ="'.$id.'"');  //запрос БД
    $date = mysql_fetch_array($date);                               //результат БД в массив
    echo'<h3>Пользователь </h3><h3 style=color:blue>'.htmlspecialchars($date['name'],ENT_QUOTES).'</h3>
             <h3> зарегистрирован </h3><h3 style=color:blue>'
.$date['date'].'</h3><hr>';
}
                                                     //имя и дата из массива на монитор

                                        //ФУНКЦИЯ ПОСКА ИМЕНИ ПО ЗАДАНЫМ СИМВОЛАМ

function Poisk_login($poisk)
{
                         
    $dat 
= mysql_real_escape_string($poisk);           //экранируем строку перед запросом БД
    $poisk = mysql_query('SELECT * FROM name WHERE name LIKE"%'.$dat.'%"'); //поиск в БД
    if($col = mysql_num_rows($poisk))                  //количество найденых
        {    
            echo
'<h3 style = color:green>Найдено '.$col.' зарегистрировных пользователей</h3>';
            $login = mysql_fetch_array($poisk);            //первый найденый в массив
            while($login)
                {                                            //цикл вывода на монитор
                    echo'<li>'.htmlspecialchars($login['name'],ENT_QUOTES).'</li>';
                    $login = mysql_fetch_array($poisk);
                }
        }    else    echo'<h3 style = color:red>Пользователей не найдено</h3>';
    echo'<hr>';                                        
}

                                        //ФУНКЦИЯ ВЫВОДА НА МОНИТОР ПОЛЬЗОВАТЕЛЕЙ


function Screen_login()
{
 
    $db 
= mysql_query('SELECT * FROM name ORDER BY id DESC');  //запрос к БД в обратном порядке
    $login = mysql_fetch_array($db);
    while($login)                                              //цикл перебора всех записей
        {    
            echo
'<li><a href = "'.$_SERVER['PHP_SELF'].'?id='.$login['id'].'">
                    '
.htmlspecialchars($login['name'],ENT_QUOTES).'</a></li>';
            $login = mysql_fetch_array($db);
        }    
}
                                        //ФУНКЦИЯ ЗАПИСИ ИМЕНИ В БД


function Save_login($login)
{
    
    $login 
= mysql_real_escape_string($login);
    mysql_query('INSERT INTO name(name)VALUES("'.$login.'")');
    header('location: '.$_SERVER['PHP_SELF']);                //запуск по новому
}




Спустя 6 минут, 55 секунд (18.08.2009 - 22:18) ZSH написал(а):
Поместилось все за исключением закрывающего PHP тега и HTML формы


Спустя 6 минут, 9 секунд (18.08.2009 - 22:24) Soldier Ghost написал(а):
Можно на форму взглянуть? скинь её другим сообщением

Спустя 7 минут, 20 секунд (18.08.2009 - 22:32) ZSH написал(а):
HTML
<form action = 'index.php' method = 'POST'>
<h4><b>Введите логин</b></h4>
<input type = 'text' name = 'login'>
<input type = 'submit' value = 'Регистрация'>
</form>
<form action = 'index.php' method = 'GET'>
<h4><b>Поиск</b></h4>
<input type = 'text' name = 'poisk' value = '<?php echo @htmlspecialchars($_REQUEST['poisk'],ENT_QUOTES); ?>'>
<input type = 'submit' value = 'Найти'>
</form>

Спустя 15 минут, 41 секунда (18.08.2009 - 22:47) twin написал(а):
Из минусов.
1. Инициализации переменных нет. Идет обращение к несуществующим переменным.
2. Подавление ошибок не очень хорошая черта в программировании.
3. Цикл while уж больно замудрен, можно гораздо проще это сделать.
4. Числовое значение для запроса обрабатывается как строковое, что не очень гут на самом деле.
5. Код написан не очень аккуратно.
6. В форме лучше использовать кавычки, нежели апострофы. Валиднее.

Плюсы.
1. Код разделен на функции. Хотя в таком скрипте это не обязательно, но хорошая привычка.
2. Условия задачи в основном выполнены, функции применяются правильно.
3. Код хорошо откомментирован и достаточно читабелен.
4. Чувствуется самостоятельное решение, не списанное по готовому. Респект.

Молодец, приятно посмотреть.)))









Спустя 47 минут, 6 секунд (18.08.2009 - 23:34) ZSH написал(а):
Ура!!!!!!! Заработал поиск с обратными слешами.
Перед запросом БД их нужно принудительно екранировать.

$dat = str_replace('\\','\\\\',$dat);

нашел в книге "PHP 5 наиболее полное руководство"
автор : Дмитрий Котеров, Алексей Костарев.
Неплохой учебник.

Спустя 14 минут, 51 секунда (18.08.2009 - 23:49) PandoraBox2007 написал(а):
PHP
$login = (!empty($_GET['login']))  ? mysql_escape_string($_GET['login']) : ''; // Escape mysql string 
$id    = (!empty($_GET['id']))     ? intval($_GET['id']) : ''; // Only digit number's
$poisk = (!empty($_POST['poisk'])) ? mysql_escape_string(addcslashes($_POST['poisk'], '%')) : ''; // LIKE SEARCH add Slashes or Escape

Спустя 23 часа, 52 секунды (19.08.2009 - 22:50) ZSH написал(а):
Цитата
Из минусов.
1. Инициализации переменных нет. Идет обращение к несуществующим переменным.
2. Подавление ошибок не очень хорошая черта в программировании.
3. Цикл while уж больно замудрен, можно гораздо проще это сделать.
4. Числовое значение для запроса обрабатывается как строковое, что не очень гут на самом деле.
5. Код написан не очень аккуратно.
6. В форме лучше использовать кавычки, нежели апострофы. Валиднее.

Cпасибо исправлю.

Цитата
$login = (!empty($_GET['login']))? mysql_escape_string($_GET['login']) : ''; // Escape mysql string
$id= (!empty($_GET['id'])) ? intval($_GET['id']) : ''; // Only digit number's
$poisk = (!empty($_POST['poisk'])) ? mysql_escape_string(addcslashes($_POST['poisk'], '%')) : ''; // LIKE SEARCH add Slashes or Escape


"коротко и сердито". Раньше не обращал внимание на такой способб а разобрался то понравилось.
Хорошая альтернатива для if else
хотелось бы узнать плюсы и минусы такого способа

кстати получился поиск со знаком %
str_replace('%','\%',$dat);
оказывается даные в БД хранятся по хитрому.

Спустя 7 часов, 23 минуты, 44 секунды (20.08.2009 - 06:14) twin написал(а):
Это называется тернарный оператор. Или короткая запись. Плюс очевиден - компактность и читабельность.

Правда PandoraBox2007 немного перемудрил на мой взгляд, потому что функции, которые приведены для примера, используются в запросах. А запросы могут находиться не только тут же рядом, но и в других файлах. Это несколько сбивает, ставя под сомнение, обработаны данные или нет. Все таки лучше применять функции к месту. То есть инициализацию делать так:

PHP
$login = !empty($_GET['login'])  ?  $_GET['login']  :  NULL;


а функции обработки применять непосредственно в (или перед) теле запроса. Как в принципе у тебя и было сделано.

Спустя 6 минут, 37 секунд (20.08.2009 - 06:20) twin написал(а):
Цитата
оказывается даные в БД хранятся по хитрому.

Данные там хранятся обычно, это связано не с особенностями хранения, а с оператором LIKE. Тут на лицо некое подобие SQL-инъекции, так как символ % используется как ограничитель маски, и будучи подставленным в запрос в чистом виде нарушает корректность (LIKE %%%)

Спустя 1 час, 53 секунды (20.08.2009 - 07:21) glock18 написал(а):
Поправлю.
% - спец. символ LIKE, обозначающий "любое количество любых символов".

то есть строка "%", как и "%%" или "%%%" вернет все записи.
Для того, чтобы процент воспринимался как процент, его необходимо экранировать, как показал PandoraBox2007

Спустя 3 дня, 12 часов, 18 минут, 8 секунд (23.08.2009 - 19:39) ZSH написал(а):
ВСЕ :

PHP
<?php

mysql_connect
('localhost','root','root');                                //подключение к БД
mysql_select_db('name');
mysql_query('SET NAMES cp1251');

$login = (isset($_REQUEST['login'])) ? $_REQUEST['login'] : NULL;        //определение переменных
$id = (isset($_REQUEST['id'])) ? intval($_REQUEST['id']) : NULL;
$poisk = (isset($_REQUEST['poisk'])) ? $_REQUEST['poisk'] : NULL;

if (get_magic_quotes_gpc())                                              //если включен get_magic_quotes_gpc
 {
   $login = stripslashes($login);
   $id = stripslashes($id);                                              //удаляем слеши
   $poisk = stripslashes($poisk);
 }
if(
$id) Date_register($id);                                              //запрос поиска даты регистрации
if($poisk) Poisk_login($poisk);                                          //запрос поиска имени пользователей
if($login)
 {
   $login = trim($login);                                                //проверка на пробелы
   if($login != '') Save_login($login);                                  //и вызов функции регистрации
 }

Screen_login();                                                          //вывод зарегистрированых на экран

//ФУНКЦИЯ ПОИСКА ДАТЫ РЕГИСТРАЦИИ
function Date_register($id)                                              //$id номер переданный по ссылке
{
  $id = mysql_real_escape_string($id);                                   //обработка перед запросом БД
  $date = mysql_query('SELECT * FROM name WHERE id ="'.$id.'"')or die(mysql_error());//запрос БД
  $date = mysql_fetch_array($date);                                      //результат БД в массив
  echo'<h3>Пользователь </h3><h3 style=color:blue>'.htmlspecialchars($date['name'],ENT_QUOTES).'</h3>
       <h3> зарегистрирован </h3><h3 style=color:blue>'
.$date['date'].'</h3><hr>';
}
                                                                        //имя и дата из массива на монитор

//ФУНКЦИЯ ПОСКА ИМЕНИ ПО ЗАДАНЫМ СИМВОЛАМ
function Poisk_login($poisk)
{
  $dat = mysql_real_escape_string($poisk);                               //обработка строки перед запросом БД
  $dat = str_replace('\\','\\\\',$dat);
  $dat = str_replace('%','\%',$dat);
  $dat = str_replace('"','\"',$dat);
  $poisk = mysql_query('SELECT * FROM name WHERE name LIKE"%'.$dat.'%"');//поиск в БД
  if($col = mysql_num_rows($poisk))                                      //количество найденых
   {
     echo'<h3 style = color:green>Найдено '.$col.' зарегистрировных пользователей</h3>';
     while($login = mysql_fetch_array($poisk))                           //цикл вывода на монитор
      {
        echo'<li>'.htmlspecialchars($login['name']).'</li><hr>';
      }
   }else echo'<h3 style = color:red>Пользователей не найдено</h3><hr>';
}

//ФУНКЦИЯ ВЫВОДА НА МОНИТОР ПОЛЬЗОВАТЕЛЕЙ
function Screen_login()
{
  $db = mysql_query('SELECT * FROM name ORDER BY id DESC');              //запрос к БД в обратном порядке
  while($login = mysql_fetch_array($db))                                 //цикл перебора всех записей
   {
     echo'<li><a href = "'.$_SERVER['PHP_SELF'].'?id='.$login['id'].'">
         '
.htmlspecialchars($login['name'],ENT_QUOTES).'</a></li>';
   }
}

//ФУНКЦИЯ ЗАПИСИ ИМЕНИ В БД
function Save_login($login)
{
  $login = mysql_real_escape_string($login);
  mysql_query('INSERT INTO name(name)VALUES("'.$login.'")');             //записываем login в БД
  header('location: '.$_SERVER['PHP_SELF']);                             //запуск по новому
}

?>
<form action = "index.php" method = "POST">
      <h4><b>Введите логин</b></h4>
      <input type = "text" name = "login">
      <input type = "submit" value = "Регистрация">
</form>
<form action = "index.php" method = "GET">
      <h4><b>Поиск</b></h4>
      <input type = "text" name = "poisk" value = "<?php echo htmlspecialchars($poisk); ?>">
      <input type

Спустя 2 минуты, 59 секунд (23.08.2009 - 19:42) ZSH написал(а):
twin спасибо за задание очень поучительно.

Хочется еще.
Быстрый ответ:

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