Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Roman2288
1 / 1 / 1
Регистрация: 27.05.2015
Сообщений: 83
1

Оцените качество кода новостного сайта

10.10.2015, 17:47. Просмотров 847. Ответов 12
Метки нет (Все метки)

Пишу для практики небольшой новостной сайт. Пока на стадии написания авторизации. Суть у меня пока такая: Есть главный файл index.htm в нем только форма для входа и одновременно(пока) для регистрации, в поля вводятся пара логин/пароль, проверяется наличие данной пары в бд, если нету то записывается. Использовал сессию для сохранения вводимых данных, в show.htm просто пока для себя отображаю, что было введено пользователем, проверка входных параметров в этом же файле. Оцените по возможности. Укажите на ошибки, дайте какое - нибудь наставление или натолкните на правильную мысль.) Файлы пхп разместил в отдельной директории. В Htm файлах стараюсь только подключать нужные файлы. Оцените код)
ndex.htm
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="content-type" content="text/html" />
    <meta name="author" content="admin" />
 
    <title>вход</title>
</head>
<body>
    <form action="php/session.php" method="post">
        <label>Логин:<br /><input type="text" name="login" value="<?php echo filter_var($_SESSION['login'], FILTER_SANITIZE_SPECIAL_CHARS); ?>" /><br /></label>
        <label>Пароль:<br /><input type="password" name="pass" value="<?php filter_var($_SESSION['pass'], FILTER_SANITIZE_SPECIAL_CHARS); ?>" /><br /></label>
        <label><button type="submit">Войти</button></label>
    </form>
</body>
</html>
session.php
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
$whitelist = array(
        'login' => 'login',
        'pass' => 'pass'
);
$incoming = array_keys(array_intersect_key($_POST, $whitelist)); //Объясните эту строку, я не совсем понимаю, что //она делает
foreach($whitelist as $key){
    $_SESSION[$key] = $_POST[$key];
}
header('Location: show.htm');
show.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
session_start();
$login = filter_var($_SESSION['login'], FILTER_SANITIZE_SPECIAL_CHARS);
$pass = filter_var($_SESSION['pass'], FILTER_SANITIZE_SPECIAL_CHARS);
require_once ('db.php');
?>
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="content-type" content="text/html" />
    <meta name="author" content="admin" />
    <title>Результат</title>
</head>
<body>
<table>
    <tr>
        <?php echo $login; ?>
    </tr>
    <tr>
        <?php echo $pass; ?>
    </tr>
</table>
    <form action="../index.htm" method="post">
        <input type="hidden" name="login" value="<?php echo $login; ?>" />
        <input type="hidden" name="pass" value="<?php echo $pass; ?>" />
        <button type="submit">Редактровать</button>
    </form>
<?php require_once('users.php'); ?>
</body>
</html>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2015, 17:47
Ответы с готовыми решениями:

Выбор метода ресайза картинок для новостного сайта
Ребята помогите советом начинающему. Делаю новостной сайт, конечно, рассчитываю...

Оценить качество кода написанного фреймворка
Прошу оценить то что пока написал: https://github.com/DeadMoras/tc-framework...

Литература по написанию новостного парсера
Всем доброго времени суток. С чего вообще начать писать парсер новостей с...

Сканирование кода сайта
Здравствуйте. Я ооооочень начинающий в программировании на PHP, но мне очень...

Получение HTML кода произвольного сайта
Здравствуйте. Не могу понять где происходит затык. Пытаюсь получить HTML код...

12
Roman2288
1 / 1 / 1
Регистрация: 27.05.2015
Сообщений: 83
12.10.2015, 18:10  [ТС] 2
Просмотров пол сотни) Кто - нибудь прокомментируйте мой код) Выразите свое мнение, покритикуйте меня.
0
tolimadokara
745 / 413 / 91
Регистрация: 24.10.2012
Сообщений: 3,023
12.10.2015, 18:38 3
Лучший ответ Сообщение было отмечено Roman2288 как решение

Решение

Цитата Сообщение от Roman2288
PHP
1
$incoming = array_keys(array_intersect_key($_POST, $whitelist)); //Объясните эту строку, я не совсем понимаю, что //она делает
честно говоря, и я тоже не знаю но, вот

http://php.net/manual/ru/function.array-keys.php

(PHP 4, PHP 5)

array_keys — Возвращает все или некоторое подмножество ключей массива
http://php.net/manual/ru/function.array-intersect-key.php

(PHP 5 >= 5.1.0)

array_intersect_key — Вычислить пересечение массивов, сравнивая ключи
php.net вам в помощь если какая то функция не понятная.

это Ваш комментарий в коде?
1
Roman2288
1 / 1 / 1
Регистрация: 27.05.2015
Сообщений: 83
12.10.2015, 19:28  [ТС] 4
да, мой)
0
tolimadokara
745 / 413 / 91
Регистрация: 24.10.2012
Сообщений: 3,023
12.10.2015, 19:41 5
вроде форма - как форма. скрипт - как скрипт. возможно вам стоит как то красивей оформлять код, если это возможно

http://habrahabr.ru/post/38214/
http://framework.zend.com/manual/1.1...ing-style.html
http://svyatoslav.biz/misc/psr_translation/

Вот я никогда не использовал встроенный механизм сессий в php через $_SESSION. Мне это как то не понять. Всегда создавал cookie в браузере пользователю и сохранял строку сессии в таблице. И все работало. Хорошо это либо не правильно кто его знает.
1
Roman2288
1 / 1 / 1
Регистрация: 27.05.2015
Сообщений: 83
12.10.2015, 20:57  [ТС] 6
хм. Ну я для практики пробую. А так лучше подготовленные выражения, конечно, использовать и PDO , естественно на ООП, что мне пока сложно освоить без должной практики. Потом на yii2 можно попробовать тоже самое проделать.
0
Jewbacabra
Эксперт PHP
3443 / 2864 / 1289
Регистрация: 24.04.2014
Сообщений: 8,690
12.10.2015, 22:25 7
Цитата Сообщение от Roman2288 Посмотреть сообщение
//Объясните эту строку, я не совсем понимаю, что //она делает
Сам написал и не понял что делает?
Получает ключи из пост запроса, которые определены в массиве $whitelist. Вот только в 8 строчке вместо $whitelist должно быть $incoming.
Нет смысла постоянно фильтровать переменные из сессии - клиент в них не может сам положить значения, проще 1 раз отфильтровать и положить в сессию уже отфильтрованное.
Нет проверок на существование в сессии ключей login и pass
И как я понимаю самое интересное происходит внутри db.php, а его тут нет
И мне кажется что логичнее пользователя добавлять до редиректа.

Не по теме:

Цитата Сообщение от tolimadokara Посмотреть сообщение
Вот я никогда не использовал встроенный механизм сессий в php через $_SESSION. Мне это как то не понять.
Если нравится создавать себе трудности, а потом героически их преодолевать, то почему бы и нет.

1
Jodah
12.10.2015, 22:32
  #8

Не по теме:

Цитата Сообщение от tolimadokara Посмотреть сообщение
Вот я никогда не использовал встроенный механизм сессий в php через $_SESSION. Мне это как то не понять. Всегда создавал cookie в браузере пользователю и сохранял строку сессии в таблице. И все работало. Хорошо это либо не правильно кто его знает.
Собственно, механизм сессий работает также, только сам за вас генерирует сессию и определяет пользователя. Из плюсов - удобство хранения временной информации вроде корзины или id/логина/пароля (шифрованного, конечно) в массиве и обращаться к ним через $_SESSION['user_id']. Главное неудобство - невнятное время работы, ограниченное слишком малыми сроками, да ещё и закрытием браузера. Для меня это критично, поэтому делаю как вы - только куки.

0
Roman2288
1 / 1 / 1
Регистрация: 27.05.2015
Сообщений: 83
13.10.2015, 07:50  [ТС] 9
Вот db.php )
PHP
1
2
3
4
5
<?php
$mysqli = mysqli_connect("localhost", "root", "", "users");
if (mysqli_connect_errno($mysqli)) {
    echo "Не удалось подключиться в бд: ", mysqli_connect_error();
}
Добавлено через 49 секунд
users.php
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$SelectFromDb = "SELECT * FROM people WHERE name = '$login'";
    $res = mysqli_query($mysqli,$SelectFromDb);
    $num = mysqli_num_rows($res);
        if($num == 0){
    $querry = "INSERT INTO people(name, pass, email) VALUES('$login', '$pass', '$email')";
    $result = mysqli_query($mysqli, $querry) or die("Ошибка записи!");
        }
        else {
            echo include('400.php');
        }
Добавлено через 10 минут
2 - ую строку в users.php исправил на
PHP
1
$SelectFromDb = "SELECT * FROM people WHERE name = '". $login . "'"; //надежней будет думаю)
0
Jewbacabra
Эксперт PHP
3443 / 2864 / 1289
Регистрация: 24.04.2014
Сообщений: 8,690
13.10.2015, 10:00 10
Цитата Сообщение от Roman2288 Посмотреть сообщение
надежней будет думаю)
одинаково, надежней было бы через подготовленные запросы
1
g3nchik
6 / 6 / 0
Регистрация: 17.08.2012
Сообщений: 170
13.10.2015, 19:44 11
Нужно экранировать символы в $login, $pass, $email при вставке..
Либо же юзать PDO, что более мудрое решение.
И не нужно этого:
PHP
1
"SELECT * FROM people WHERE name = '$login'"
Более осмысленно было бы просто показывать кол-во юзеров
PHP
1
"SELECT COUNT(1) FROM people WHERE name = '$login'"
1
Roman2288
1 / 1 / 1
Регистрация: 27.05.2015
Сообщений: 83
13.10.2015, 21:20  [ТС] 12
Можно ли здесь где - то использовать функции или классы? Что - то, чтобы приблизиться к ООП и стандартам написания php - скриптов :-) Ну очень мне хочется развиваться в этом направлении, стараюсь как могу)
0
Jewbacabra
Эксперт PHP
3443 / 2864 / 1289
Регистрация: 24.04.2014
Сообщений: 8,690
13.10.2015, 22:08 13
Для начинающих правда будет несколько сложновато, но можно попробовать:
http://www.ozon.ru/context/detail/id/5648968/
http://www.ozon.ru/context/detail/id/2457392/
1
13.10.2015, 22:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2015, 22:08

Загрузка опр. участка кода с другого сайта
Доброго времени суток , помогите пожалуйста справиться с задачей: нужно чтобы...

Копировать часть кода php на другую страницу сайта
Здравствуйте. Задача вывести единицы измерения цены товара, которые...

Парсер на PHP (вытащить строчку из кода сайта по номеру этой строки)
Подскажите пожалуйста, вот если, например, есть сайт (http://site.ru/) и если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru