Вопрос № 130459: Здравствуйте уважаемые эксперты.
Я сейчас делаю сайт на котором будут размещены всевозможные афоризмы и прочие текстовые приколы. Вроде все работает нормально, но рано или поздно возникнет проблема постраничного вывода. Сейчас у меня 16 страниц, ...Вопрос № 130537: Защита от sql-инэкций,что ето какое и как ето реализовать?...Вопрос № 130539: Перевірка отриманого файла виконується тільки на візуальний тип файла. На дійсний тип, і на розмір - відс
Здраствуйте, есть проверка полученого файла, но я знаю только на визуальний тип, а что такое действительний тип ??? Ето всьо насчет загрузки...Вопрос № 130543: Здраствуйте, знаю что вопрос может не к вам, но вы отвечаете точно и как всегда правильно и с интузиазмом..
Как лутше реализовать на майескюель:
Есть рубрики, человек вибирает некотрое количество ну дает запрос и вибрание рубрики записиваютс...Вопрос № 130544: Здраствуйте, мне сказали что у меня такая ошибка:
Использивание не инициализированих констант под разумевая, строчковие масиви и переменние
что ето такое, и как ето исправить....Вопрос № 130546: Здраствуйте как в явускрипт, передать пхп переменние....Вопрос № 130549: $_SERVER[REMOTE_ADDR], просто для подтверждения... ето так вичисляется, ып пользователя которий сейчас подлючился к даной странице....Вопрос № 130552: Здраствуйте:
мовное кодирование полей в мскюель, как мне поставить УТФ-8, использую пхпмай админ....Вопрос № 130563: Здравствуйте уважаемые эксперты.
У меня к вам 2 вопроса.
1)При заполнении полей в БД мне нужно сделать проверку данных, т.е. чтобы пользователь вводил только символы, без цифр. Конечно желательно, чтобы эта проверка выполнялась для всех полей...
Вопрос № 130.459
Здравствуйте уважаемые эксперты.
Я сейчас делаю сайт на котором будут размещены всевозможные афоризмы и прочие текстовые приколы. Вроде все работает нормально, но рано или поздно возникнет проблема постраничного вывода. Сейчас у меня 16 страниц, но когда их станет больше они будут не умещаться на странице сайта, растягивая ее. Конечно можно использовать <br> (например, скажем для каждой 15 страницы), но когда их будет много, список будет занимать добрую половину экрана. Пожалуйста подскажите как быть?
Я обычно для постраничного вывода использую такую схему:
<?php
$max_page = ceil($num_rows/$onpage);
//выяснение общего кол-ва страниц,
//$num_rows - общее кол-во элементов,
//$onpage - кол-во элементов на странице
//установка номера страницы,
//если не указана - то ставим последнюю
$page_list = "";
for($i=$max_page; $i>0; $i--)
{
if($i!=$page) $page_list .= '<a href="'.SITE_URL.SITE_PAGE.'?p='.$i.'">['.$i.']</a>';
else $page_list .= '['.$i.']';
};
//собственно формируем ссылки на страницы( если текущая - ссылку не ставим)
//Можно еще адаптировать, чтобы были переходы на первую/последнюю
//и предыдущюю/след., но это Вы уже сами.
Ответ отправил: Anti_SP (статус: 1-ый класс)
Ответ отправлен: 04.04.2008, 06:11 Оценка за ответ: 4 Комментарий оценки: Спасибо, очень развернутый ответ, но не по теме. Функцию вывода списка страниц я уже написал. А вопрос заключался в том, как ее модифицировать, чтобы она не растягивала страницу (скрывала часть элементов списка).
Вопрос № 130.537
Защита от sql-инэкций,что ето какое и как ето реализовать?
Отправлен: 04.04.2008, 13:16
Вопрос задал: Tmishka (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: PVS@Lviv
Здравствуйте, Tmishka!
SQL-инъекция это изменение текста sql-запроса при его формировании путём передачи параметров содержащих служебные символы sql'я. Например формируем запрос на удаление:
$del_id=$_POST['del_id'];
$sql="delete from our_table where id_column=$del_id";
на первый взгляд всё нормально, но представим ситуацию: злоумышленник проанализировал нашу страницу и создал свою, которая вместо числа посылает такую строку "10 or (1 = 1)" . Всё! Данных в таблице нет.
Таким образом защита следующая:
1)строгое преобразование параметров к нужному типу
2)замена или экранирование служебных символов (кавычки, проценты, нижние подчёркивания, !!не забыть!! символы из расширения синтаксиса конкретной СУБД) в строчных параметрах
Ответ отправил: PVS@Lviv (статус: Специалист)
Ответ отправлен: 04.04.2008, 13:31 Оценка за ответ: 5 Комментарий оценки: просто и доступно. пасиба
1. Что такое SQL-injection и с чем его едят :)
представьте себе такую ситуацию.Экранирование спецсимволов отключено (а такое бывает на многих хотингах). Есть таблица с пользователями users, со следующей структурой: id, user, pass, mail. Например у нас есть страница с полями ввода логина и пароля. Введенные данные с этой страницы попадают в скрипт, который в свою очередь проверяет вводимые данные и если есть такой пользователь, то пускаем его в аккаунт (соответственно если пользователя нет, то говорим что введен неправильный логин или пароль)... т.е. сам
запрос в бд будет выглядеть примерно следующим образом:
$sql = "SELECT * from users WHERE user='".$_REQUEST['user']."' and pass='".$_REQUEST['password']."';
далее идет обработка запроса, если хоть что-то вернулось отличное от 0, значит пользователь существует, если вернулось 0 рядов, начит пользователя нет, и перенапрвляем его куда нибудь с фразой логин и пароль введены неверно.
вот на данном этапе остановимся, и представим что появился мега хацкер, и решил залогинится под первым попавшимся логином... ему это удастся в случае если он сможет изменить запрос. например, если он в поле "логин" или "пароль" введет следующую строку:
' or 1=1 or 1='
В результате (если в скрипте отсутствует какое либо экранирование спецсимволов, или отсутствие обработки самих переменных) в скрипте меняется сам запрос и он становится следующим...
SELECT * from users WHERE user='' or 1=1 or 1='' and pass='';
Исходя из этого мы видим, что база данных получив такой запрос выдаст всех пользователей, а скрипт после запроса пустит человека ниочем не догадываясь, что сделал что-то не так..
2. дабы избежать подобных ситуаций, существует единственно верное правило (про которое многие забывают), НИКОГДА НЕ ВЕРЬТЕ ДАННЫМ, КОТОРЫЕ ПРИШЛИ ИЗВНЕ! всегда проверяйте типы, и то, что должно быть в переменных. В вышеприведенном случае можно избежать простой ф-цией обработки данных.
$_REQUEST['user'] = mysql_real_escape_string ($_REQUEST['user']);
$_REQUEST['password'] = mysql_real_escape_string ($_REQUEST['password'])
$sql = "SELECT * from users WHERE user='".$_REQUEST['user']."' and pass='".$_REQUEST['password']."';
Ответ отправил: Паутов Сегей Владимирович (статус: 1-ый класс)
Ответ отправлен: 04.04.2008, 13:52 Оценка за ответ: 5 Комментарий оценки: но незнаю, етод метод инэкции у меня в защите не прошол, но ответ от пред. експерта прошол на уро, но всьоже ответ верний, и обширний + разнеснения, пасиб
Вопрос № 130.539
Перевірка отриманого файла виконується тільки на візуальний тип файла. На дійсний тип, і на розмір - відс
Здраствуйте, есть проверка полученого файла, но я знаю только на визуальний тип, а что такое действительний тип ??? Ето всьо насчет загрузки файлов-рисунков на сервер...
Отправлен: 04.04.2008, 13:22
Вопрос задал: Tmishka (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: PVS@Lviv
Здравствуйте, Tmishka!
вероятно имеется в виду что проверка проводится по расширению, а не по содержимому
Ответ отправил: PVS@Lviv (статус: Специалист)
Ответ отправлен: 04.04.2008, 13:32 Оценка за ответ: 5 Комментарий оценки: Пасиба, ето просто, благодарю.
Вопрос № 130.543
Здраствуйте, знаю что вопрос может не к вам, но вы отвечаете точно и как всегда правильно и с интузиазмом..
Как лутше реализовать на майескюель:
Есть рубрики, человек вибирает некотрое количество ну дает запрос и вибрание рубрики записиваются к нему в базу.
Тоесть у меня в БД есть таблица с рубриками, Другая таблице где есть пользователи, как мне лутше отмечать в пользователях, хто какую и сколько рубрик вибрал ...
Отправлен: 04.04.2008, 13:48
Вопрос задал: Tmishka (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
на мой взгляд будет проще создать еще одну таблицу, с полями id_пользователя, id_рубрики.
т.е. у вас будет таблица, в которой у вас будет хранится id пользователя и рубрика(рубрики), которую(которые) он выбрал.
Ответ отправил: Паутов Сегей Владимирович (статус: 1-ый класс)
Ответ отправлен: 04.04.2008, 14:01 Оценка за ответ: 5 Комментарий оценки: спасиб, тоже так думал
Отвечает: Иван Сергеевич
Здравствуйте, Tmishka!
Когда одной записи в таблице может соответствовать несколько записей другой и наборот, необходимо создать новую таблицу. В ней будут храниться первичные ключи обеих этих таблиц.
Пример в приложении. В таблицу Подписка вносятся ИД пользователя и ИД рубрики. Таким образом, мы сможем записать каждому пользователю несколько рубрик, и каждая рубрика может быть выбрана несколькими пользователями.
Приложение:
Ответ отправил: Иван Сергеевич (статус: 6-ой класс)
Ответ отправлен: 04.04.2008, 14:04 Оценка за ответ: 5 Комментарий оценки: спасиб, тоже так думал
Отвечает: Прим Палвер
Здравствуйте, Tmishka!
Возможно, я неверно понял вопрос, но попробую
(дублируйте свои вопросы на украинском, если позволят администраторы, здесь ведь очень много пользователей из Украины - поймут).
Таблица users:
столбец userID
столбец username
столбец useremail
и другие данные, которые у пользователя в единственном экземпляре.
Таблица headings (рубрики - я не силён в английском):
столбец headingID
столбец headingurl (или headingtext - что там у Вас)
В последнем - только числа-идентификаторы пользователей и рубрик. Один пользователь может выбрать несколько рубрик и одна рубрика может быть выбрана несколькими пользователями.
Например, в таблице usersheadings:
столбец userID: 1, 1, 3, 4, 4, 7
столбец headingID: 2, 3, 2, 2, 5, 2
Означает, что пользователь 1 выбрал рубрики 2 и з, пользователь 3 выбрал рубрику 2, пользователь 4 выбрал рубрики 2 и 5, пользователь 7 выбрал рубрику 2
Можно и обратно - плясать от рубрик: какую рубрику сколько (и какие) пользователей выбрало.
P.S. У меня тоже большая часть времени уходит на рисование схем проектов таблиц на бумажке :)
Ответ отправил: Прим Палвер (статус: 2-ой класс)
Ответ отправлен: 04.04.2008, 14:13 Оценка за ответ: 5 Комментарий оценки: спасиб, тоже так думал, вам дважди 5 за разнеснение и прочие коментарии
Вопрос № 130.544
Здраствуйте, мне сказали что у меня такая ошибка:
Использивание не инициализированих констант под разумевая, строчковие масиви и переменние
что ето такое, и как ето исправить.
Отправлен: 04.04.2008, 13:50
Вопрос задал: Tmishka (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Miklucho
Здравствуйте, Tmishka!
Инициализировать переменную - это значит объявить ее где-либо, до ее использования в программе.
Например такой скрипт:
$c = 1;
$a = $b + $c;
Является неверным, т.к. переменная $b еще нигде ранее не обявлялась (т.е. ей не присваивалось значения). Необходимо написать так:
$c = 1;
$b = 1;
$a = $b + $c;
А переменная $a инициализируется в процессе выполнения операции сложения и отдельно ее объявлять не требуется.
Ответ отправил: Miklucho (статус: Практикант)
Ответ отправлен: 04.04.2008, 14:27
Вопрос № 130.546
Здраствуйте как в явускрипт, передать пхп переменние.
Отправлен: 04.04.2008, 14:03
Вопрос задал: Tmishka (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Таким образом, переменная $x, объявленная в PHP, запишется и в скрипте документа.
Ответ отправил: Иван Сергеевич (статус: 6-ой класс)
Ответ отправлен: 04.04.2008, 14:13 Оценка за ответ: 5 Комментарий оценки: Хороший, пример, я впринципе так и использовал
Ответ отправил: Прим Палвер (статус: 2-ой класс)
Ответ отправлен: 04.04.2008, 14:17 Оценка за ответ: 5 Комментарий оценки: пасиба, даже не догадивался о таком варианте...
Вопрос № 130.549
$_SERVER[REMOTE_ADDR], просто для подтверждения... ето так вичисляется, ып пользователя которий сейчас подлючился к даной странице.
Отправлен: 04.04.2008, 14:21
Вопрос задал: Tmishka (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Иван Сергеевич
Здравствуйте, Tmishka!
Да, это IP-адрес, с которого клиент смотрит страницу
Ответ отправил: Иван Сергеевич (статус: 6-ой класс)
Ответ отправлен: 04.04.2008, 14:28 Оценка за ответ: 5 Комментарий оценки: я догадивался, но боялся ошибится
Отвечает: Miklucho
Здравствуйте, Tmishka!
Да, $_SERVER['REMOTE_ADDR'] это ip-адрес пользователя зашедшего на вашу страницу.
Ответ отправил: Miklucho (статус: Практикант)
Ответ отправлен: 04.04.2008, 14:33 Оценка за ответ: 5 Комментарий оценки: Спасиб, за силку дважди
Отвечает: Прим Палвер
Здравствуйте, Tmishka!
Или так: getenv('REMOTE_ADDR')
Разрабатываете систему банов? :)
Это значение можно записать в БД напротив сообщения пользователя и при редактировании смотреть, какие IP шалят. Ну или просто Вам интересно, откуда к Вам заходят - тоже фиксируете.
Конечно, далеко не все имеют его постоянный, так можно забанить кучу невиновных :) К тому же можно найти в нете способы замаскировать свой IP под другой. Но вычисление такого случая занимает пару страниц кода.
Ответ отправил: Прим Палвер (статус: 2-ой класс)
Ответ отправлен: 04.04.2008, 14:38 Оценка за ответ: 5 Комментарий оценки: Кулл, которие шалят, более интересует
Вопрос № 130.552
Здраствуйте:
мовное кодирование полей в мскюель, как мне поставить УТФ-8, использую пхпмай админ.
Отправлен: 04.04.2008, 14:34
Вопрос задал: Tmishka (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Прим Палвер
Ух ты! Вы вопросов задаёте ещё больше, чем я.
Я ставлю для текстов cp1251_general_ci (там ниже есть ещё украинский - я не пробовал, хотя в моей базе есть сообщение на украинском - cp1251_general_ci нормально его передаёт)
Нужно обязательно УТФ8?
Пробуйте utf8_unicode_ci - в самом конце списка.
Но не знаю и не гарнтирую.
Ответ отправил: Прим Палвер (статус: 2-ой класс)
Ответ отправлен: 04.04.2008, 14:48
Вопрос № 130.563
Здравствуйте уважаемые эксперты.
У меня к вам 2 вопроса.
1)При заполнении полей в БД мне нужно сделать проверку данных, т.е. чтобы пользователь вводил только символы, без цифр. Конечно желательно, чтобы эта проверка выполнялась для всех полей всех таблиц. Как это сделать?
2)Что такое "сессия" и где приминяется?
Отправлен: 04.04.2008, 16:21
Вопрос задала: KInika (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Miklucho
Здравствуйте, KInika!
Для проверки ввода без цифр используйте функцию из приложения.
Приложение:
Ответ отправил: Miklucho (статус: Практикант)
Ответ отправлен: 04.04.2008, 16:35 Оценка за ответ: 5 Комментарий оценки: Спасибо за помощь. Все работает.