[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: задача twin'а
Raito-kun
Недавно заметил задачу Твина на корректную обработку данных. Решил попробовать свои силы. Как-никак уже почти два месяца изучаю PHP. Столкнулся с небольшими проблемами по поиску, т.к. никогда его не реализовывал. Итак, собственно код :
<?[SPAN=darling][SPAN=darling]php[/SPAN][/SPAN]

session_start();

$host = "host";
$dbuser = "user";
$dbpass = "pass";

$db = "db";

$connect = [SPAN=darling]mysql[/SPAN]_connect($host, $dbuser, $dbpass) or die("connection failed");
[
SPAN=darling]mysql[/SPAN]_select_db($db, $connect) or die("db selection failed");

[
SPAN=darling]mysql[/SPAN]_query("SET NAMES cp1251;");


if($_GET['submit_search'])
    if(isset($_GET['search'])){
                    $search = $_GET['search'];

                    $search = htmlspecialchars($search);
                    $search = trim($search);
                    $search = [SPAN=darling]mysql[/SPAN]_real_escape_string($search);

                    $q = "SELECT * FROM `names`
                    WHERE `name` LIKE '%"
.$search."%'";

                    $query = [SPAN=darling]mysql[/SPAN]_query($q) or die("search query failed");
                    $num = [SPAN=darling]mysql[/SPAN]_num_rows($query);

                    if($num){
                        echo "<b>Найдено пользователей:".$num."</b><br />";
                        echo "<UL>";
                        while($assoc = [SPAN=darling]mysql[/SPAN]_fetch_assoc($query)){
                            echo "<LI>".$assoc['name']."<br />";
                        }
                        echo "</UL>";
                    }
                    else
                    echo "<b><font size=5 color=red>Ничего не найдено</font></b>";
                    echo "<HR>";

    }
if($_POST['submit_register']){
            if(isset($_POST['register']) && $_POST['register']!="" && $_SESSION['reg'] < $_GET['r']){
                    $reg = $_POST['register'];

                    $reg = htmlspecialchars($reg);
                    $reg = trim($reg);
                    $reg = [SPAN=darling]mysql[/SPAN]_real_escape_string($reg);

                    $query = [SPAN=darling]mysql[/SPAN]_query("
                    INSERT INTO `names` (`name`)
                    VALUES ('
$reg');
                    "
) or die("reg query failed");

                    $_SESSION['reg'] = $_GET['r'];
            }
    }

if(isset($_GET['id'])){
    $getted_id = $_GET['id'];
    $user_info_query = [SPAN=darling]mysql[/SPAN]_query ("
    SELECT * FROM `names` WHERE `id` = '
$getted_id'
    "
) or die("select query failed");
    $user = [SPAN=darling]mysql[/SPAN]_fetch_assoc($user_info_query);

    echo "<b><font size=5>Дата регистрации пользователя <font color = blue>".$user['name']."</font>:".$user['date']."</font></b>";
    }

$query = [SPAN=darling]mysql[/SPAN]_query ("
SELECT * FROM `names` ORDER BY `id` DESC
"
) or die("select query failed");

echo "<UL>";
while($info=[SPAN=darling]mysql[/SPAN]_fetch_assoc($query)){

    echo "<LI> <a href = index.php?id=".$info['id'].">".$info['name']."</a><br />";

    }
echo "</UL>";



echo "Поиск<br />";
echo "<form name = searching method = GET action =".$_SERVER['PHP_SELF'].">";
echo "<input type = text name = search ><br />";
echo "<input type = submit name = submit_search value = 'Поиск'>";
echo "</form>";
echo "<br />";

$timestamp = time();

echo "Регистрация<br />";
echo "<form name = registration method = POST action = index.php?r=".$timestamp." >";
echo "<input type = text name = register ><br />";
echo "<input type = submit name = submit_register value = 'Зарегестрировать'>";
echo "</form>";



Проблема : баги с поиском. нашел по крайней мере 2: непонятно почему при поиске "g" находит помимо правильных результатов "<Jensen & partners>", поиск бэкслэша результата не даёт.

Разъясните, если не трудно, дыры приложения(если такие есть), помимо указанной, правильно ли реализована регистрация: защита от SQL-инъекции и F5?

Просьба сильно камнями не кидаться, код написан за день, еще додумываю.
Текущая рабочая версия :
Твина : здесь
Постановка задачи : Задача



Спустя 7 часов, 25 минут, 10 секунд (29.07.2009 - 08:27) sergeiss написал(а):
Вот смотри. Ты написал
SQL
$search = $_GET['search'];
if(isset($search)){
...

Но это некорректно!!! Потому что переменная $search будет определена всегда. Ты же ее только что определяешь. А эта функция проверяет, была ли определена переменная, или ее нет вообще.
Поэтому надо проверять либо величину, находящуюся в $search, либо наличие в гете этой величины:
PHP
if( isset( $_GET['search'] )

Это сравнение будет корректным, потому что если такой параметр не был передан в адресной строке, то и не будет такого элемента массива.

Далее.
Это сё??? blink.gif
PHP
$query mysql_query ("
SELECT * FROM `names` ORDER BY `id` DESC
"
) or die("select query failed");

$num mysql_num_rows($query);

Тебе нужно получить количество? Так и пиши запрос
SQL
select count(*) from ....


Более глубоко не смотрел, перечисленное выше - это то, что сразу "бросилось в глаза".

Спустя 4 часа, 27 минут, 31 секунда (29.07.2009 - 12:55) Raito-kun написал(а):
Спасибо, sergeiss, по поводу isset не заметил даже. Исправил.
А это:
PHP
$query mysql_query ("
SELECT * FROM `names` ORDER BY `id` DESC
"
) or die("select query failed");

используется дальше после цикла. просто цикл влепил между запросом и его использованием и испортилась наглядность(а $num убрал, этот параметр мне нужен был для отладки). Исправил наглядность:
PHP
$query mysql_query ("
SELECT * FROM `names` ORDER BY `id` DESC
"
) or die("select query failed");

echo 
"<UL>";
while(
$info=mysql_fetch_assoc($query)){

    echo 
"<LI> <a href = index.php?id=".$info['id'].">".$info['name']."</a><br />";

    }
echo 
"</UL>";

Все-таки не пойму почему поиск работает криво. Особенно интересен результат поиска "g".

Спустя 4 минуты, 21 секунда (29.07.2009 - 12:59) Kuliev написал(а):
Raito-kun
PHP
$sql = ("SELECT * FROM `names` ORDER BY `id` DESC");
$result = ($sql) or die(mysql_error() ."<br/>"$sql);


Спустя 2 часа, 32 минуты, 35 секунд (29.07.2009 - 15:32) twin написал(а):
Для двух месяцев вполне недурно.
Но. Задача не решена.
1. Есть уязвимость в плане инъекций.
1. Скрипт зависим от настройки magic_quotes
2. Не защищен от F5
3. Данные при поиске не возвращаются в поле.

Это ключевые моменты, которые определяют корректность обработки данных.

По стилю.
Нет единого стиля написания кода. Вот тут запрос с конкатенацией и перезаписью:
PHP
$q = "SELECT * FROM `names`
                    WHERE `name` LIKE '%"
.$search."%'";

А ниже совсем иначе. Это очень путает при беглом просмотре, а значит отнимает больше времени на разбор кода. Это же касается и разнообразия кавычек.
Переменные не отражают сути, это тоже путает. Вот это
PHP
$user = mysql_fetch_assoc($user_info_query);

никакой не юзер, а ряд результата запроса. Нужно так его и назвать:
PHP
$row = mysql_fetch_assoc($user_info_query);


По оптимальности.
1.Тут совсем незачем использовать сессию. Это лишнее ресурсопотребление.
2. Конструкция echo , да еще и в таких количествах, тут явный перебор. Незачем напрягать php процессор, если можно сделать вывод обычным html/

Ну для начала хватит, на кое что указали sergeiss и Kuliev

А вообще за смелость и желание разобраться огромный респект. smile.gif
Жду работу над ошибками. Объяснять ничего не буду, потому что это должно родиться само.

Спустя 12 часов, 23 минуты, 15 секунд (30.07.2009 - 03:55) Raito-kun написал(а):
спасибо за комментарии. посидел, подумал. нашел ответы на свои вопросы. нашел уязвимость, вроде единственную, и исправил. сделал возврат поиска в форму. Решил проблему с поиском бэкслэша. частично исправил стилевые ошибки. текуий код:
PHP
<?php

session_start
();

$host = "host";
$dbuser = "user";
$dbpass = "pass";

$db = "db";

$connect = mysql_connect($host, $dbuser, $dbpass) or die("connection failed");
mysql_select_db($db, $connect) or die("db selection failed");

mysql_query("SET NAMES cp1251;");


if(
$_GET['submit_search'])
    if(isset($_GET['search'])){
                    $search = $_GET['search'];

                    $search = htmlspecialchars($search);
                    $search = trim($search);
                       $search = str_replace("\\","\\\\",$search);
                    if(!get_magic_quotes_gpc())
                        $search = mysql_real_escape_string($search);

                    $query = mysql_query("
                    SELECT * FROM `names`
                    WHERE `name` LIKE '%$search%'
                    "
) or die("search query failed");
                    $num = mysql_num_rows($query);


                    if($num){
                        echo "<b>Найдено пользователей:".$num."</b><br />";
                        echo "<UL>";
                        while($assoc = mysql_fetch_assoc($query)){
                            echo "<LI>".$assoc['name']."<br />";
                        }
                        echo "</UL>";
                    }
                    else
                    echo 
"<b><font size=5 color=red>Ничего не найдено</font></b>";
                    echo "<HR>";

    }
if(
$_POST['submit_register']){
            if(isset($_POST['register']) && $_POST['register']!="" && $_SESSION['reg'] < $_GET['r']){
                    $reg = $_POST['register'];

                    $reg = htmlspecialchars($reg);
                    $reg = trim($reg);
                    if(!get_magic_quotes_gpc())
                        $reg = mysql_real_escape_string($reg);

                    $query = mysql_query("
                    INSERT INTO `names` (`name`)
                    VALUES ('$reg');
                    "
) or die("reg query failed");

                    $_SESSION['reg'] = $_GET['r'];
            }
    }

if(isset(
$_GET['id'])){
    $getted_id = intval($_GET['id']);
    $user_info_query = mysql_query ("
    SELECT * FROM `names`
    WHERE `id` = '$getted_id'
    "
) or die("select query failed");
    $row = mysql_fetch_assoc($user_info_query);

    echo "<b><font size=5>Дата регистрации пользователя <font color = blue>".$row['name']."</font>:".$row['date']."</font></b>";
    }

$query = mysql_query ("
SELECT * FROM `names`
ORDER BY `id` DESC
"
) or die("select query failed");

echo "<UL>";
while(
$info=mysql_fetch_assoc($query)){

    echo "<LI> <a href = index.php?id=".$info['id'].">".$info['name']."</a><br />";

    }
echo "</UL>";

$timestamp = time();

?>

<html>
<head>
    <title>Exercise 1 : protection</title>
</head>

<body>

Поиск<br />
<form name = searching method = GET action =<?php echo $_SERVER['PHP_SELF']; ?>>
<input type = text name = search value = "<?php echo $_GET['search']; ?>"><br />
<input type = submit name = submit_search value = 'Поиск'>
</form>
<br />

Регистрация<br />
<form name = registration method = POST action = index.php?r=<?php echo $timestamp; ?>>
<input type = text name = register ><br />
<input type = submit name = submit_register value

Понял почему находится "<Jensen & partners>" при поиске "g". Ибо в базе символ ">" преобразован в сущность "&gt". Пока в поиске решения. magic_quotes меня добивает. просто пишу на локалхосте,все отлично работает, а скинув на сайт даже не смотрел, что там они включены. и сейчас из-за них проблема с поиском. думаю, исправляю. насчет F5 : как раз для защиты ввел сессии(может это выглядит по-идиотски, сам ненавижу писать/читать халтурный код, но пока не придумал иной защиты) и вроде работает. при регистрации и нажатии F5 второй регистрации не происходит. Эта версия доступна по тому же адресу

Спустя 18 часов, 28 минут, 48 секунд (30.07.2009 - 22:24) twin написал(а):
Читабельность на много лучше, а вот по коду пока хромает. Уязвимость от инъекций не ушла, от XSS тоже. Реализация проверки magic_quotes неверная.
Но уже гараздо ближе к теме. Вот когда решишь полностью, никто тебе страшен не будет.
А остальные пусть завидуют biggrin.gif

PS Маленькая подсказка. От F5 лучше защищаться перенаправлением, а не сессией.

Спустя 1 день, 4 часа, 48 минут, 12 секунд (1.08.2009 - 03:12) Raito-kun написал(а):
Пока что реализовал правильную обработку наличия magic_quotes on
функцией
PHP
if (get_magic_quotes_gpc()) {
   function stripslashes_deep($value){
       if(is_array($value))
       {
          $value = array_map('stripslashes_deep', $value);
       }
       else if(!empty($value) && is_string($value))
       {
          $value = stripslashes($value);
       }
       return $value;
   }
   $_GET     = stripslashes_deep($_GET);
   $_POST    = stripslashes_deep($_POST);
}

пока изучаю защиту от XSS, т.к. инъекция уже не проходит. вот интересно. и у меня и у вас некорректен поиск символа "%". точнее, поиск "процента" выдаёт полный список пользователей. prooflink. с чем это может быть связанно?

Спустя 6 часов, 19 минут, 19 секунд (1.08.2009 - 09:31) twin написал(а):
Цитата
Пока что реализовал правильную обработку наличия magic_quotes on
Вооот. Это гут. Только учти на будущее, что под "раздачу" попадает еще и массив $_COOKIE, потому эта директива и называется - gpc
А процент связан не столько с обработкой данных, сколько с особенностями оператора SQL LIKE Эту проблему можно конечно решить, но она настолько специфична и несущественна, что в данном контексте наверное не стоит сильно заостряться.

Спустя 1 день, 18 часов, 1 минута, 17 секунд (3.08.2009 - 03:32) Raito-kun написал(а):
по поводу расшифровки gpc не знал, спасибо. нашел еще что от magic_quotes чистят $_SESSION переменные. это правильно?
уже достаточно вымотан этой задачей. перечитал кучу статей по защите от XSS, везде одно и тоже htmlspecialchars(), strip_tags() и прочее. вроде бы все что нужно включено в скрипт, но меня за целый день так и не осенило что не так с поиском символа %22 он же двойная кавычка("). Благодаря именно этому символу и возможен XSS. ув. twin, если не трудно, хотя бы намекните где загвоздка в коде. почему все спец.символы обрабатываются нормально, только с двойной кавычкой беда sad.gif
по вашему совету убрал сессии, сделал редирект. текущий код:
Свернутый текст
PHP
<?php

$host 
"host";
$dbuser "user";
$dbpass "pass";

$db "db";

$connect mysql_connect($host$dbuser$dbpass) or die("connection failed");
mysql_select_db($db$connect) or die("db selection failed");

mysql_query("SET NAMES cp1251;");

if (
get_magic_quotes_gpc()) {
   function 
stripslashes_deep($value){
       if(
is_array($value))
       {
          
$value array_map('stripslashes_deep'$value);
       }
       else if(!empty(
$value) && is_string($value))
       {
          
$value stripslashes($value);
       }
       return 
$value;
   }
   
$_GET     stripslashes_deep($_GET);
   
$_POST    stripslashes_deep($_POST);
}

if(
$_GET['submit_search'])
    if(isset(
$_GET['search'])){
                    
$search $_GET['search'];

                    
$search trim($search);
                    
$search htmlspecialchars($search);
                    
$search str_replace("\\","\\\\",$search);
                    
$search mysql_real_escape_string($search);

                    
$query mysql_query("
                    SELECT * FROM `names`
                    WHERE `name` LIKE '%$search%'
                    "
) or die("search query failed");
                    
$num mysql_num_rows($query);


                    if(
$num){
                        echo 
"<b>Найдено пользователей:".$num."</b><br />";
                        echo 
"<UL>";
                        while(
$assoc mysql_fetch_assoc($query)){
                            echo 
"<LI>".$assoc['name']."<br />";
                        }
                        echo 
"</UL>";
                    }
                    else
                    echo 
"<b><font size=5 color=red>Ничего не найдено</font></b>";
                    echo 
"<HR>";

    }
if(
$_POST['submit_register']){
            if(isset(
$_POST['register']) && $_POST['register']!=""){
                    
header("location: ".$_SERVER['PHP_SELF']."?r=".$_GET['r']);

                    
$reg $_POST['register'];

                    
$reg trim($reg);
                    
$reg htmlspecialchars($reg);
                    
$reg mysql_real_escape_string($reg);

                    
$query mysql_query("
                    INSERT INTO `names` (`name`)
                    VALUES ('$reg');
                    "
) or die("reg query failed");

            }
}

if(isset(
$_GET['id'])){
    
$getted_id intval($_GET['id']);
    
$user_info_query mysql_query ("
    SELECT * FROM `names`
    WHERE `id` = '$getted_id'
    "
) or die("select query failed");
    
$row mysql_fetch_assoc($user_info_query);

    echo 
"<b><font size=5>Дата регистрации пользователя <font color = blue>".$row['name']."</font>:".$row['date']."</font></b>";
    }

$query mysql_query ("
SELECT * FROM `names`
ORDER BY `id` DESC
"
) or die("select query failed");

echo 
"<UL>";
while(
$info=mysql_fetch_assoc($query)){
    echo 
"<LI> <a href = index.php?id=".$info['id'].">".$info['name']."</a><br />";
    }
echo 
"</UL>";

$timestamp time();

?>

<html>
<head>
    <title>Exercise 1 : protection</title>
</head>

<body>

Поиск<br />
<form name = searching method = GET action =<?php echo $_SERVER['PHP_SELF']; ?>>
<input type = text name = search value = "<?php echo $_GET['search']; ?>"><br />
<input type = submit name = submit_search value = 'Поиск'>
</form>
<br />

Регистрация<br />
<form name = registration method = POST action = index.php?r=<?php echo $timestamp?>>
<input type = text name = register ><br />
<input type = submit name = submit_register value = 'Зарегестрировать'>
</form>

Главное если сделать echo $search." ".$_GET['search']; в середине поиска, то результат правильный (" "). Но почему же эта двойная кавычка не хочет возвращаться в форму? sad.gif

Спустя 3 часа, 26 минут, 47 секунд (3.08.2009 - 06:59) kirik написал(а):
Цитата (Raito-kun @ 2.08.2009 - 19:32)
по поводу расшифровки gpc не знал, спасибо. нашел еще что от magic_quotes чистят $_SESSION переменные. это правильно?

Ну смотри, если расшифровка gpc это Get, Post, Cookies, то нужно ли чистить Session? smile.gif

Цитата (Raito-kun @ 2.08.2009 - 19:32)
перечитал кучу статей по защите от XSS, везде одно и тоже htmlspecialchars(), strip_tags() и прочее.

Для защиты от XSS вполне хватит одной htmlspecialchars(), так как html тэги отображаться уже не будут. Про двойную кавычку, нужно обратится к справочнику на php.net (или другой справочник), где можно будет прочитать:
Цитата
В режиме по умолчанию, ENT_COMPAT, преобразуются двойные кавычки, одиночные остаются без изменений. В режиме ENT_QUOTES преобразуются и двойные, и одиночные кавычки. а в режиме ENT_NOQUOTES и двойные, и одиночные кавычки остаются без изменений.

Спустя 4 часа, 37 минут, 55 секунд (3.08.2009 - 11:37) twin написал(а):
Цитата
если не трудно, хотя бы намекните где загвоздка в коде

Всё очень просто. Одно правило: все, что выдается в браузер, должно обрабатываться функцией htmlspecialchars()
<input type = text name = search value = "<?[SPAN=darling]php[/SPAN] echo htmlspecialchars($_GET['search']); ?>">

А по сей причине совсем некчиму эту функцию применять при работе с запросами. Если ты сейчас посмотришь в базу, то увидишь, что юзер <Вася> превратился у тебя в юзера &lt;Вася&gt;, а он и обидеться может biggrin.gif
Так что строчки
$reg = htmlspecialchars($reg);
и
$search = htmlspecialchars($search);

Это явный перебор, к тому же ты используешь после них
mysql_real_escape_string()
.
Вот если убрать первые две и добавить в инпут обработку, то все будет корректно, красиво и правильно.

Спустя 4 минуты, 15 секунд (3.08.2009 - 11:41) twin написал(а):
Еще маленький штрих вот тут

PHP
if($_POST['submit_register']){
            if(isset(
$_POST['register']) && $_POST['register']!=""){
                    
header("location: ".$_SERVER['PHP_SELF']."?r=".$_GET['r']);

                    
$reg $_POST['register'];

                    
$reg trim($reg);
                    
$reg htmlspecialchars($reg);
                    
$reg mysql_real_escape_string($reg);

                    
$query mysql_query("
                    INSERT INTO `names` (`name`)
                    VALUES ('$reg');
                    "
) or die("reg query failed");

            }
}



редирект лучше делать после запроса и ставить после него exit(); чтобы скрипт не молотил пустоту. Это лишний ресурс.

Спустя 10 часов, 27 минут, 29 секунд (3.08.2009 - 22:09) Raito-kun написал(а):
УРА! Я счастлив) Всё получилось) Пример действительно очень познавательный! Твин, вы заслуживаете уважения за размещение этой задачи на форуме и разъяснения, благодаря которым стало возможно разобраться в корректной обработке данных, а также узнать хорошие приемы в веб-программировании rolleyes.gif. Самоучители такого не дают однозначно. Спасибо всем экспертам за помощь и дополнения!
Код:
Свернутый текст
PHP
<?php

$host 
= "host";
$dbuser = "user";
$dbpass = "pass";

$db = "db";

$connect = mysql_connect($host, $dbuser, $dbpass) or die("connection failed");
mysql_select_db($db, $connect) or die("db selection failed");

mysql_query("SET NAMES cp1251;");

if (get_magic_quotes_gpc()) {
   function stripslashes_deep($value){
       if(is_array($value))
       {
          $value = array_map('stripslashes_deep', $value);
       }
       else if(!empty($value) && is_string($value))
       {
          $value = stripslashes($value);
       }
       return $value;
   }
   $_GET  = stripslashes_deep($_GET);
   $_POST = stripslashes_deep($_POST);
}

if(
$_GET['submit_search'])
    if(isset($_GET['search'])){
                    $search = $_GET['search'];

                    $search = trim($search);
                    $search = str_replace("\\","\\\\",$search);
                    $search = mysql_real_escape_string($search);

                    $query = mysql_query("
                    SELECT * FROM `names`
                    WHERE `name` LIKE '%$search%'
                    "
) or die("search query failed");
                    $num = mysql_num_rows($query);


                    if($num){
                        echo "<b>Найдено пользователей:".$num."</b><br />";
                        echo "<UL>";
                        while($assoc = mysql_fetch_assoc($query)){
                            echo "<LI>".htmlspecialchars($assoc['name'])."<br />";
                        }
                        echo "</UL>";
                    }
                    else
                    echo 
"<b><font size=5 color=red>Ничего не найдено</font></b>";
                    echo "<HR>";

    }
if(
$_POST['submit_register']){
            if(isset($_POST['register']) && $_POST['register']!=""){


                    $reg = $_POST['register'];
                    $reg = trim($reg);
                    $reg = mysql_real_escape_string($reg);

                    $query = mysql_query("
                    INSERT INTO `names` (`name`)
                    VALUES ('$reg');
                    "
) or die("reg query failed");

                    header("location: ".$_SERVER['PHP_SELF']."?r=".$_GET['r']);
                    exit();

            }
}

if(isset(
$_GET['id'])){
    $getted_id = intval($_GET['id']);
    $user_info_query = mysql_query ("
    SELECT * FROM `names`
    WHERE `id` = '$getted_id'
    "
) or die("select query failed");
    $row = mysql_fetch_assoc($user_info_query);

    echo "<b><font size=5>Дата регистрации пользователя <font color = blue>".htmlspecialchars($row['name'])."</font>:".$row['date']."</font></b>";
    }

$query = mysql_query ("
SELECT * FROM `names`
ORDER BY `id` DESC
"
) or die("select query failed");

echo "<UL>";
while(
$info=mysql_fetch_assoc($query)){
    echo "<LI> <a href = index.php?id=".$info['id'].">".htmlspecialchars($info['name'])."</a><br />";
    }
echo "</UL>";

$timestamp = time();

?>

<html>
<head>
    <title>Exercise 1 : protection</title>
</head>

<body>

Поиск<br />
<form name = searching method = GET action =<?php echo $_SERVER['PHP_SELF']; ?>>
<input type = text name = search value = "<?php echo htmlspecialchars($_GET['search']); ?>"><br />
<input type = submit name = submit_search value = 'Поиск'>
</form>
<br />

Регистрация<br />
<form name = registration method = POST action = index.php?r=<?php echo $timestamp; ?>>
<input type = text name = register ><br />
<input type = submit name = submit_register value

Тест: url (временами сайт не работает - хостинг бесплатный)

Спустя 26 минут, 40 секунд (3.08.2009 - 22:36) twin написал(а):
Ну вот... И я внес небольшую лепту... А то страшно по сети ходить стало уже biggrin.gif

Спустя 13 дней, 11 часов, 49 минут, 3 секунды (17.08.2009 - 10:25) ApuktaChehov написал(а):
А можно мне тоже выложить свой вариант?

Спустя 35 минут, 2 секунды (17.08.2009 - 11:00) glock18 написал(а):
Выкладывай ))

А твину действительно респект. Хороший подбор требований. Этакий "денвер" ))) (джентльменский набор веб разработчика)

Спустя 1 час, 10 минут, 9 секунд (17.08.2009 - 12:10) Guest написал(а):
PHP
<?php
//Функция фильтрации данных
function inputclean($input){
    
$input=htmlspecialchars($input);
    
$input=trim($input);
    
$input substr($input0250);
    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']=htmlspecialchars($_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 />
<input type="submit" name="submit" value="Зарегистрироваться">
</fo

Спустя 3 минуты, 34 секунды (17.08.2009 - 12:13) ApuktaChehov написал(а):
Блин. Это был я. Что ж у меня все время авторизация слетает mad.gif

P.S.
В конце, в место вот этого:
PHP
$_GET['find_name']=htmlspecialchars($_GET['find_name']);

вот это:
PHP
$_GET['find_name']=inputclean($_GET['find_name']);

Спустя 31 минута, 16 секунд (17.08.2009 - 12:45) twin написал(а):
Лучше отдельную ветку открой. А так в куче все ответы будут - некрасиво.
А я посмотрю и там уже отвечу.

Спустя 1 месяц, 16 дней, 8 часов, 24 минуты, 47 секунд (3.10.2009 - 21:09) Pinoplast написал(а):
Задачка познавательная ставлю 5 wink.gif

Спустя 13 часов, 49 минут, 40 секунд (4.10.2009 - 10:59) Michael написал(а):
Цитата (Pinoplast @ 3.10.2009 - 18:09)
Задачка познавательная ставлю 5 wink.gif

Pinoplast, а ну ка вперед - выполнять задачку.user posted image
А оценку twin тебе будет выставлять rolleyes.gif .

Спустя 4 часа, 50 минут, 44 секунды (4.10.2009 - 15:50) Pinoplast написал(а):
Судовольствием выполнил бы. но я пишу свой проект, а там весь этот гиморой на каждом шагу, с чем сталкуюсь с тем и копаюсь, щас статистику по сайту пишу wink.gif

Спустя 6 минут, 42 секунды (4.10.2009 - 15:57) Michael написал(а):
Pinoplast, ну вот откуда знаешь, что сделаешь
все правильно у себя - а тут потренируешься и бока увидишь.

P.S. Статистика может и подождать, на то она и статистика, что никому не надо.

Спустя 15 минут, 19 секунд (4.10.2009 - 16:12) glock18 написал(а):
Цитата
P.S. Статистика может и подождать, на то она и статистика, что никому не надо.

smile.gif зря, вы батенька. грамотная статистика говорит о многом тем, кому это интересно

Спустя 3 минуты, 55 секунд (4.10.2009 - 16:16) Pinoplast написал(а):
Если б твин еще доплачивал для стимула чтоб решать я б писал biggrin.gif , а так что не лежыт к душе то и не пишеться.

PS не люблю критики!!!

Спустя 2 минуты, 18 секунд (4.10.2009 - 16:18) Pinoplast написал(а):
Луше кошельки по ломать малость Я 41001404975488 biggrin.gif

PS Это шутка!!!

Спустя 1 минута, 49 секунд (4.10.2009 - 16:20) Michael написал(а):
Та ладно, Pinoplast , не лежит душа - не надо - дело хозяйское.
А доплачивать - так это не twin уж точно должен... blink.gif

Спустя 3 минуты, 50 секунд (4.10.2009 - 16:24) Pinoplast написал(а):
Мне интересно где Твини работаеш, судя потому что где то чтила то приподом по програмированию, или я неправ???

Спустя 2 минуты, 2 секунды (4.10.2009 - 16:26) glock18 написал(а):
Это интересный подход... типа стипендию тебе за обучение что ли платить?

Спустя 1 минута, 12 секунд (4.10.2009 - 16:27) Pinoplast написал(а):
Цитата (glock18 @ 4.10.2009 - 13:26)
Это интересный подход... типа стипендию тебе за обучение что ли платить?

biggrin.gif да я так пошутил!!! хотя от стипухи в 1 wmz в месяц не отказался бы biggrin.gif

Спустя 25 минут, 14 секунд (4.10.2009 - 16:52) twin написал(а):
Я готов платить за обучение.
Только не основам, а более серьёзным вещам. И платить я могу за реальную работу, если тот, кто учится, будет мне помогать решать коммерческие задачи. На сегодняшний день из тех, с кем я готов был бы иметь финансовые отношения, это как раз те люди, кто решил задачу. По крайней мере видно, что это люди, которые действительно хотят постичь азы и тонкости. И не жалеют на это ни сил ни времени.
А халявщикам от php - фу. biggrin.gif

Спустя 4 минуты, 3 секунды (4.10.2009 - 16:56) Pinoplast написал(а):
Твини то ты преподом работаеш или нет?

Спустя 48 минут, 21 секунда (4.10.2009 - 17:45) twin написал(а):
Я сам еще учусь. Просто у меня были хорошие преподы и я знаю как научить других)))

Спустя 19 минут, 35 секунд (4.10.2009 - 18:04) Pinoplast написал(а):
А где учишся если не сикрет?

Спустя 7 минут, 33 секунды (4.10.2009 - 18:12) twin написал(а):
У вас и учусь biggrin.gif

Спустя 22 минуты, 3 секунды (4.10.2009 - 18:34) Pinoplast написал(а):
А серезно где учился или учишся wink.gif колись!!!

Спустя 1 час, 55 минут, 52 секунды (4.10.2009 - 20:30) nemo написал(а):
Зделай перерыв! - Скушай Twin!

(Он все сделает за тебя laugh.gif)

Спустя 1 год, 9 месяцев, 20 дней, 16 часов, 58 минут, 40 секунд (25.07.2011 - 13:28) 03x1 написал(а):
Щас попробую решить)

Спустя 38 минут, 13 секунд (25.07.2011 - 14:07) Raito-kun написал(а):
Цитата
Щас попробую решить)

отличный некропост. вспомнил свои начинания.

Спустя 5 месяцев, 2 дня, 1 час, 29 минут, 20 секунд (27.12.2011 - 15:36) Dagot написал(а):
Стиль кончено стремно читаемый
Быстрый ответ:

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