Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 943
от 09.04.2008, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 472, Экспертов: 42
В номере:Вопросов: 9, Ответов: 15

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 130459: Здравствуйте уважаемые эксперты. Я сейчас делаю сайт на котором будут размещены всевозможные афоризмы и прочие текстовые приколы. Вроде все работает нормально, но рано или поздно возникнет проблема постраничного вывода. Сейчас у меня 16 страниц, ...
Вопрос № 130537: Защита от sql-инэкций,что ето какое и как ето реализовать?...
Вопрос № 130539: Перевірка отриманого файла виконується тільки на візуальний тип файла. На дійсний тип, і на розмір - відс Здраствуйте, есть проверка полученого файла, но я знаю только на визуальний тип, а что такое действительний тип ??? Ето всьо насчет загрузки...
Вопрос № 130543: Здраствуйте, знаю что вопрос может не к вам, но вы отвечаете точно и как всегда правильно и с интузиазмом.. Как лутше реализовать на майескюель: Есть рубрики, человек вибирает некотрое количество ну дает запрос и вибрание рубрики записиваютс...
Вопрос № 130544: Здраствуйте, мне сказали что у меня такая ошибка: Использивание не инициализированих констант под разумевая, строчковие масиви и переменние что ето такое, и как ето исправить....
Вопрос № 130546: Здраствуйте как в явускрипт, передать пхп переменние....
Вопрос № 130549: $_SERVER[REMOTE_ADDR], просто для подтверждения... ето так вичисляется, ып пользователя которий сейчас подлючился к даной странице....
Вопрос № 130552: Здраствуйте: мовное кодирование полей в мскюель, как мне поставить УТФ-8, использую пхпмай админ....
Вопрос № 130563: Здравствуйте уважаемые эксперты. У меня к вам 2 вопроса. 1)При заполнении полей в БД мне нужно сделать проверку данных, т.е. чтобы пользователь вводил только символы, без цифр. Конечно желательно, чтобы эта проверка выполнялась для всех полей...

Вопрос № 130.459
Здравствуйте уважаемые эксперты.
Я сейчас делаю сайт на котором будут размещены всевозможные афоризмы и прочие текстовые приколы. Вроде все работает нормально, но рано или поздно возникнет проблема постраничного вывода. Сейчас у меня 16 страниц, но когда их станет больше они будут не умещаться на странице сайта, растягивая ее. Конечно можно использовать <br> (например, скажем для каждой 15 страницы), но когда их будет много, список будет занимать добрую половину экрана. Пожалуйста подскажите как быть?
Отправлен: 03.04.2008, 22:53
Вопрос задал: Семенов Владислав Геннадьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Anti_SP
Здравствуйте, Семенов Владислав Геннадьевич!

Я обычно для постраничного вывода использую такую схему:
<?php
$max_page = ceil($num_rows/$onpage);
//выяснение общего кол-ва страниц,
//$num_rows - общее кол-во элементов,
//$onpage - кол-во элементов на странице

$page = intval($_GET['p']) ? intval($_GET['p']) : $max_page;
if($page<1) $page=1;
if($page>$max_page) $page=$max_page;

//установка номера страницы,
//если не указана - то ставим последнюю

$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.']';
};
//собственно формируем ссылки на страницы( если текущая - ссылку не ставим)
//Можно еще адаптировать, чтобы были переходы на первую/последнюю
//и предыдущюю/след., но это Вы уже сами.

echo '<div style=""width:100%;text-indent:0px;padding:0px;"><center>"'.$page_list.'</center></div>';

//собственно выводим наш список страниц.

?>

Успехов

Приложение:

Ответ отправил: 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
Комментарий оценки:
просто и доступно. пасиба

Отвечает: Паутов Сегей Владимирович
Здравствуйте, Tmishka!

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)

Отвечает: Паутов Сегей Владимирович
Здравствуйте, Tmishka!

на мой взгляд будет проще создать еще одну таблицу, с полями 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
столбец headingID

В последнем - только числа-идентификаторы пользователей и рубрик. Один пользователь может выбрать несколько рубрик и одна рубрика может быть выбрана несколькими пользователями.

Например, в таблице 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)

Отвечает: Иван Сергеевич
Здравствуйте, Tmishka!

Проще всего их записывать в тело документа:

<?
$x = "Какая-то переменная";
?>
language='JavaScript'>
<?
echo "var x = ".$x;
?>
</script>

Таким образом, переменная $x, объявленная в PHP, запишется и в скрипте документа.
Ответ отправил: Иван Сергеевич (статус: 6-ой класс)
Ответ отправлен: 04.04.2008, 14:13
Оценка за ответ: 5
Комментарий оценки:
Хороший, пример, я впринципе так и использовал

Отвечает: Прим Палвер
Здравствуйте, Tmishka!
echo "jsvar=".$phpvar;
или так:
echo "jsvar='".$phpvar."'";
Ответ отправил: Прим Палвер (статус: 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
Комментарий оценки:
Спасибо за помощь. Все работает.


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.72.8 от 05.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное