All of Soft: Все о софте
Программирование: PHP в вопросах и ответах. Часть I.
Колонка редактора Веб-дизайн Раскрутка Заработок Программирование Уроки Photoshop Уроки Flash Журнал Софт Юмор

Menu:


Лучший интернет магазин по лучшей цене!

RusForumz.ru
Огромное количество статей по веб-дизайну, раскрутке, анимации, оптимизации и программированию. Всем читать!
Подробнее

Ageofcomp.ru
Вторая, неофициальная часть форума RusForumz.com. Если хочется отдохнуть и развлечься, приходи на этот форум. Зажжём!
Подробнее

Jinfo.ru
Информационно-развлекательный портал обо всём, что интересно
Подробнее


БЫСТРЫЙ ПЕРЕХОД

PHP в вопросах и ответах. Часть I.

Автор: Дмитрий Бородин
Источник: php.spb.ru


Вопрос: Как определить версию браузера?
Ответ. Выполните эту программу и Вам все станет ясно:

<body text=white bgcolor=black>
<?php
echo "Ваш адрес (REMOTE_ADDR):
<font color=#ccccff><b><big>\n\n
".getenv("REMOTE_ADDR")."\n\n</big></b></font><br><br>";
echo "Ваша программа (HTTP_USER_AGENT): <font color=#ccccff><b>\n\n
".getenv("HTTP_USER_AGENT")."\n\n</b></font><br><br>";
echo "Предыдущая страница (HTTP_REFERER): <font color=#ccccff><b>\n\n
".getenv("HTTP_REFERER")."\n\n</b></font><br>";

?>

Соответственно делаем if (strstr(getenv("HTTP_USER_AGENT"),"MSIE")) echo "Вы используете Internet Explorer"; и другие проверки (в зависимости от того, с какой целью Вы решили разделять браузеры).


Вопрос: У меня есть веб-форма с кучей данных. Как упростить обработку кучи полей из формы?
Ответ. Используйте массивы!
Важно!< Не используйте констукцию if ($название_поля) {действия} для проверки, установлена ли переменная. Следует использовать if (isset($названия_поля)) { ... }

Чтобы работать было удобнее, делайте так:

<?php
<form ... >
   Имя:      <input type=text name=asd[]> <br>
   Фамилия:  <input type=text name=asd[]> <br>
   Отчество: <input type=text name=asd[]> <br>
   <input type=submit>
   </form>
?>

В принимающем файле осталось только пройтись по массиву:

<?php
   for ($i=0; $i<count($asd); $i++) {
      echo "$asd[$i]<br>";
   }
?>

Если Вам важен порядок переменных (вдруг юзер на странице не все заполнит), то делаем так:

<?php
   Имя:      <input type=text name=asd[name]> <br>
   Фамилия:  <input type=text name=asd[name2]> <br>
?>

Проверяем соответственно:

<?php 
   if ($asd[name]) {     // в PHP пишите так:  $asd['name']
      echo "Ваше имя - $asd[name]";
   }
?>

Если у Вас сложная структура и двухмерный массив ($asd['info']['name']), то делайте (в echo) вот так:

<?php 
 echo "Ваше имя - {".$asd[info][name]."}";
?>


Вопрос: Как преобразовать IP в число integer и обратно?
Ответ. Для чего нужно преобразовывать IP в число int? Чтобы он (IP адрес) занимал меньше места. IP в виде строки: "222.222.222.222" - 15 байт. В виде числа - 4 байта. Это число можно писать в базу данных или переменную в PHP. В PHP 4 есть встроенные функции ip2long (аналог нашей ip2int) и logn2ip). Проверено - все функции работают на ура. Нужно соблюдать тип полей при вставке IP в базу: либo INT (для +/-), либо UNSIGNED INT (только +).

А теперь сами исходники функций:

Функция ip2int преобразует ip-адрес в число (которое можно хранить в PHP, помещать в MySQL...)

Функция int2ip преобразует число в ip-адрес...

<?php
function int2ip($i) {
   $d[0]=(int)($i/256/256/256);
   $d[1]=(int)(($i-$d[0]*256*256*256)256/256);
   $d[2]=(int)(($i-$d[0]*256*256*256-$d[1]*256*256)/256);
   $d[3]=$i-$d[0]*256*256*256-$d[1]*256*256-$d[2]*256;
   return "$d[0].$d[1].$d[2].$d[3]";
}

function ip2int($ip) {
   $a=explode(".",$ip);
   return $a[0]*256*256*256+$a[1]*256*256+$a[2]*256+$a[3];
}
?>

Существует так же альтернативный вариант:

Можно переложить операции по переводу адресов на сам mySQL. Запрос select INET_ATON("209.207.224.40") вернет соответствующее число (3520061480). И наоборот, запрос select INET_NTOA(3520061480) вернет строку "209.207.224.40". mySQL переведет IP/число намного быстрее, чем функция на PHP или встроенная ip2long. Разумеется, нужно не select'ы делать (отдельным запросом), а использовать приведенные SQL функции прямо во время вставки/выборки.



База каталогов для авторегистрации в AllSubmitter 4.x