Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проверка данных
 
 автор: ubahuba   (06.06.2014 в 17:37)   письмо автору
 
 

Всем привет. Нужен Ваш совет. Я делаю проверку наличия страниц через ф-цию in_array() . Если нет совпадений в БД, то подключаю 404 страницу. Так вот мой вопрос: нужно ли в таком случае делать различные проверки типа "волшебных кавычек" и прочее? Проверяю только на существование GET-переменной (isset() ) и проверяю пуста ли она. Заранее спасибо.

  Ответить  
 
 автор: tvv123456   (06.06.2014 в 19:08)   письмо автору
 
   для: ubahuba   (06.06.2014 в 17:37)
 

А можно кусочек кода? А то "проверяю через ф-ию in_array()" и "...нет совпадений в БД" и "... проверки типа волшебные(я так понимаю имеется ввиду magic_quotes) ...", - данные фразы провоцируют очень много вопросов

  Ответить  
 
 автор: ubahuba   (06.06.2014 в 19:11)   письмо автору
 
   для: tvv123456   (06.06.2014 в 19:08)
 


if (isset ($_GET["sector"]) AND isset ($_GET["genre"]) AND isset ($_GET["year"])) {
        $sector = $_GET["sector"];
        $genre = $_GET["genre"];
        $year = $_GET["year"];
        if (!empty ($sector)) {
            $sql = "SELECT
                        subdirection
                    FROM menu
                    WHERE subdirection IN ('Док. фильмы', 'Мульт. фильмы', 'Худ. фильмы')";

            $result = mysqli_query ($link, $sql);

            $i = 0;
            while ($row = mysqli_fetch_assoc ($result)) {
                $allowed[$i] = $row["subdirection"];
                $i++;
            }

            if (in_array($sector, $allowed)) {
                if (!empty ($genre)) {
                    $sql = "SELECT direction FROM menu WHERE subdirection = '$sector'";

                    $result = mysqli_query ($link, $sql);

                    $i = 0;
                    while ($row = mysqli_fetch_assoc ($result)) {
                        $allowed[$i] = $row["direction"];
                        $i++;
                    }

                    if (in_array($genre, $allowed)) {
                        if (!empty ($year)) {
                            $sql = "SELECT
                                        `year`
                                    FROM film
                                        JOIN year_film ON film.id_film = year_film.id_film
                                        JOIN `year` ON year_film.id_film = year.id_year
                                        JOIN menu_film ON film.id_film = menu_film.id_film
                                        JOIN menu ON menu_film.id_menu = menu.id_menu
                                    WHERE subdirection = '$sector'
                                    AND direction = '$genre'";

                            $result = mysqli_query ($link, $sql);

                            $i = 0;
                            while ($row = mysqli_fetch_assoc ($result)) {
                                $allowed[$i] = $row["year"];
                                $i++;
                            }

                            if (in_array($year, $allowed)) {
                                include ("php/parts/letter.php");
                                include ("php/parts/navigation.php");

                                $film = "SELECT
                                            film.id_film,
                                            film.meta_keywords,
                                            title,
                                            DATE_FORMAT(added, '%d/%m/%Y') AS `date`,
                                            DATE_FORMAT(added, '%T') AS `time`,
                                            CONCAT(SUBSTRING(description, 1, 286), '...') AS short_description,
                                            duration,
                                            poster,
                                            (`like` - dislike) AS difference,
                                            voter,
                                            viewer,
                                            `year`,
                                            direction,
                                            subdirection,
                                            quality,
                                            dub
                                         FROM film
                                            JOIN menu_film ON film.id_film = menu_film.id_film
                                            JOIN menu ON menu_film.id_menu = menu.id_menu
                                            JOIN year_film ON film.id_film = year_film.id_film
                                            JOIN `year` ON year_film.id_film = year.id_year
                                            JOIN quality_film ON film.id_film = quality_film.id_film
                                            JOIN quality ON quality_film.id_quality = quality.id_quality
                                            JOIN dub_film ON film.id_film = dub_film.id_film
                                            JOIN dub ON dub_film.id_dub = dub.id_dub
                                         WHERE menu.direction = '$genre'
                                         AND menu.subdirection = '$sector'
                                         AND `year` = $year
                                         GROUP BY film.id_film DESC
                                         LIMIT $position, $number_of_pages";

                                $films = mysqli_query ($link, $film);

                                while ($row = mysqli_fetch_assoc ($films)) {
                                    echo "<section style=\"background-image: url(images/site/$picture[name])\">
                                            <table cols=\"1\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
                                                <tr>
                                                    <td>
                                                        <table cols=\"1\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
                                                            <tr>
                                                                <td><h3><a href=\"?sector=$row[subdirection]&genre=$row[direction]&film=$row[title]\" title=\"$row[title] $row[meta_keywords]\">$row[title]</a></h3></td>
                                                            </tr>
                                                            <tr>
                                                                <td><strong>Добавлено: </strong>$row[date]<strong> в </strong>$row[time]</td>
                                                            </tr>
                                                        </table>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td>
                                                        <div class=\"hr\"></div>
                                                        <table cols=\"2\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
                                                            <tr>
                                                                <td rowspan=\"9\" valign=\"top\"><img class=\"section\" src=\"images/films/$row[poster]\" title=\"$row[title]\" alt=\"$row[title] $row[meta_keywords]\"></td>
                                                                <td valign=\"top\"><strong>Описание: </strong>$row[short_description]</td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>Год выпуска: </strong><a href=\"?sector=$row[subdirection]&genre=$row[direction]&year=$row[year]\" class=\"set\">$row[year]</a></td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>Страна: </strong>";
                                                                $country = "SELECT country
                                                                                FROM film
                                                                                    JOIN country_film
                                                                                        ON film.id_film = country_film.id_film
                                                                                    JOIN country
                                                                                        ON country_film.id_country = country.id_country
                                                                                WHERE country_film.id_film = $row[id_film]";

                                                                $countries = mysqli_query ($link, $country);

                                                                $i = 1;
                                                                while ($country = mysqli_fetch_assoc ($countries)) {
                                                                    echo "<a href=\"?sector=$row[subdirection]&genre=$row[direction]&country=$country[country]\" class=\"set\">$country[country]</a>";
                                                                    if ($i < mysqli_num_rows ($countries)) {
                                                                        echo ", ";
                                                                        $i++;
                                                                    }
                                                                }
                                                            echo "</td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>Направление: </strong>";
                                                                $direction = "SELECT direction, subdirection
                                                                                FROM film
                                                                                    JOIN menu_film
                                                                                        ON film.id_film = menu_film.id_film
                                                                                    JOIN menu
                                                                                        ON menu_film.id_menu = menu.id_menu
                                                                                WHERE menu_film.id_film = $row[id_film]";

                                                                $directions = mysqli_query ($link, $direction);

                                                                $i = 1;
                                                                while ($direction = mysqli_fetch_assoc ($directions)) {
                                                                    echo "<a href=\"?sector=$direction[subdirection]&genre=$direction[direction]\" class=\"set\">$direction[direction]</a>";
                                                                    if ($i < mysqli_num_rows ($directions)) {
                                                                        echo ", ";
                                                                        $i++;
                                                                    }
                                                                }
                                                            echo "</td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>Продолжительность: </strong>$row[duration]</td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>Озвучивание: </strong>$row[dub]</td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>Качество: </strong>$row[quality]</td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>Режиссер: </strong>";
                                                                $director = "SELECT famous.name AS director
                                                                                FROM film
                                                                                    JOIN famous_film
                                                                                        ON film.id_film = famous_film.id_film
                                                                                    JOIN famous
                                                                                        ON famous_film.id_famous = famous.id_famous
                                                                                WHERE famous_film.id_film = $row[id_film] AND status = 'director'";

                                                                $directors = mysqli_query ($link, $director);

                                                                $i = 1;
                                                                while ($director = mysqli_fetch_assoc ($directors)) {
                                                                    echo "<a href=\"?director=$director[director]\" class=\"set\">$director[director]</a>";
                                                                    if ($i < mysqli_num_rows ($directors)) {
                                                                        echo ", ";
                                                                        $i++;
                                                                    }
                                                                }
                                                            echo "</td>
                                                            </tr>
                                                            <tr>
                                                                <td valign=\"top\"><strong>В ролях: </strong>";
                                                                $actor = "SELECT famous.name AS actor
                                                                            FROM film
                                                                                JOIN famous_film
                                                                                    ON film.id_film = famous_film.id_film
                                                                                JOIN famous
                                                                                    ON famous_film.id_famous = famous.id_famous
                                                                            WHERE famous_film.id_film = $row[id_film] AND status = 'actor'";

                                                                $actors = mysqli_query ($link, $actor);

                                                                $i = 1;
                                                                while ($actor = mysqli_fetch_assoc ($actors)) {
                                                                    echo "<a href=\"?actor=$actor[actor]\" class=\"set\">$actor[actor]</a>";
                                                                    if ($i < mysqli_num_rows ($actors)) {
                                                                        echo ", ";
                                                                        $i++;
                                                                    }
                                                                }
                                                            echo "</td>
                                                            </tr>
                                                        </table>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td>
                                                        <div class=\"hr\"></div>
                                                        <table cols=\"3\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">
                                                            <tr align=\"center\">
                                                                <td><a class=\"vote\" href=\"#\"><img class=\"vote\" src=\"images/site/vote/like.png\"></a>$row[difference]<a class=\"vote\" href=\"#\"><img class=\"vote\" src=\"images/site/vote/dislike.png\"></a></td>
                                                                <td><strong>Проголосовало: </strong>$row[voter]</td>
                                                                <td><strong>Просмотрело: </strong>$row[viewer]</td>
                                                            </tr>
                                                        </table>
                                                    </td>
                                                </tr>
                                            </table>
                                        </section>";
                                }

                                include ("php/parts/navigation.php");
                            }

                            else {
                                include ("php/parts/errors/404.php");
                            }
                        }

                        else {
                            include ("php/parts/errors/404.php");
                        }
                    }

                    else {
                        include ("php/parts/errors/404.php");
                    }
                }

                else {
                    include ("php/parts/errors/404.php");
                }
            }

            else {
                include ("php/parts/errors/404.php");
            }
        }

        else {
            include ("php/parts/errors/404.php");
        }
    }

  Ответить  
 
 автор: tvv123456   (06.06.2014 в 19:36)   письмо автору
 
   для: ubahuba   (06.06.2014 в 19:11)
 

Подсвечивайте пожалуйста код тегом <? перед началом кода
mysqli Не пользовал, но что касается запросов к базе, то магические кавычки лучше отключать
, а запросы к базе обрабатывать таким образом: если тип переменной участвующей в запросе целое число, то указывать это явно, например, “SELECT ….WHERE id=”.(int)$id, а если это строка, то примерно так: “SELECT …. WHERE str=’”.mysql_real_escape_string($str).”’”; Но так как вы используете mysqli, то насколько я знаю, все запросы и так обрабатываются, то главное чтобы php не наставил лишних бэкслешей

  Ответить  
 
 автор: ubahuba   (06.06.2014 в 20:34)   письмо автору
 
   для: tvv123456   (06.06.2014 в 19:36)
 

Так все-таки делать проверку? А что запрос проверяется на соответствие в in_array это не имеет значения вовсе?

  Ответить  
 
 автор: moonfox   (06.06.2014 в 20:39)   письмо автору
 
   для: ubahuba   (06.06.2014 в 20:34)
 

экранизация внешних данных имеет быть при вставки ее в запросы к мусклу
ну и при вставке в тело во избежании xss атак

  Ответить  
 
 автор: ubahuba   (06.06.2014 в 20:40)   письмо автору
 
   для: moonfox   (06.06.2014 в 20:39)
 

Спасибо. А какими вы пользуетесь ф-циями для защиты?

  Ответить  
 
 автор: moonfox   (06.06.2014 в 20:48)   письмо автору
 
   для: ubahuba   (06.06.2014 в 20:40)
 

вообще внешние данные пост гет лучше обрабатывать если производите значимые манипуляции с ними
http://ua2.php.net/manual/en/mysqli.real-escape-string.php
http://ua2.php.net/manual/ru/function.htmlspecialchars.php
http://ru.wikipedia.org/wiki/Cross-Site_Scripting

сейчас придет confirm он вам лучше растолкует)

  Ответить  
 
 автор: tvv123456   (06.06.2014 в 22:29)   письмо автору
 
   для: ubahuba   (06.06.2014 в 20:34)
 

> А что запрос проверяется на соответствие в in_array это не имеет значения вовсе?

честно тяжело так просматривать чужой код, да еще без подсветки.
Но опять же насколько я понял вы берете эти шаблоны из БД. Для меня это просто бессмысленное расходование ресурса БД
Я никогда не проверял запрос на соответствие каким-либо шаблонам. SQL-инъекция самый плохой вариант, что может быть при обращении к БД, но если вы корректно обрабатываете данные поступившие от юзверя, то данная опасность вам не грозит.

  Ответить  
 
 автор: ubahuba   (06.06.2014 в 22:40)   письмо автору
 
   для: tvv123456   (06.06.2014 в 22:29)
 

А как Вы предлагаете проверять есть ли данная страница на сайте в таком случае?

  Ответить  
 
 автор: moonfox   (07.06.2014 в 00:13)   письмо автору
 
   для: ubahuba   (06.06.2014 в 22:40)
 

у вас ссылки ввида host.ru/about ?
маску вы в БД храните.
значит при обращение к хосту под ссылкой типа /hjkhjkhgkjgjktgiy6767657
вы ищите сей урл в базе, чтоб выбрать параметры, не нашли - выдали 404

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования