За последние 24 часа нас посетили 18096 программистов и 1700 роботов. Сейчас ищут 1533 программиста ...

Универсальная форма отправки данных в базу mysql

Тема в разделе "PHP и базы данных", создана пользователем Temeshov, 4 апр 2007.

  1. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Здравствуйте!
    Столкнулся с проблемой: Необходимо сделать форму отправки данных в mysql.
    Есть форма, скрипт отправки данных в sql тоже имеется. Но нужно сделать так, чтобы в строку запроса вставлялись данные из формы.


    Как сделать, чтобы заполнив поля в форме и нажав кнопку "сохранить" данные занеслись в соответствующую таблицу базы данных? Заранее спасибо!
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну ты же отсылаешь какому-то скрипту данные, вот в нём и обрабатывай то что пришло из формы (в $_GET или $_POST это уже от тебя зависит)
    пусть есть 2 переменные в массиве $_POST: $_POST['one'] и $_POST['two']
    после установления соединения с БД
    Код (PHP):
    1. <?
    2. $one=mysql_real_escape_string($_POST['one']);
    3. $two=mysql_real_escape_string($_POST['two']);
    4. $query="INSERT INTO `table` (`field_one`,`field_two`) VALUES ('$one','$two')";
    5. mysql_query($query);
    6. ?>
    а тут читал?
     
  3. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Спасибо, что откликнулся!
    Я так и понял, что нужно передать данные скрипту... Просто не совсем понятно, почему не получается (свой код пока выкладывать не буду, может сам разберусь).

    Мне нужно понять, скрипт должен быть размещен в другом файле и форма должна открыть этот файл и передать значения в виде переменных, или есть возможность запустить скрипт, написанный в том же файле, что и код формы?


    Я на форуме встретил такой код:

    Код (Text):
    1. <?php include("temp.php");
    2.    ?>
    3. <html>
    4.  <head>
    5.  <meta http-equiv="Content-Language" content="en" />
    6.  <meta name="GENERATOR" content="Zend Studio" />
    7.  <meta http-equiv="Content-Type" content="text/html; charset=cp1251" />
    8.  <title>test</title>
    9.  </head>
    10.  <body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99">
    11.      <form name="form1" method="post" action="">
    12.      <input type="checkbox" name="checkbox[1]" value="1">
    13.      <input type="checkbox" name="checkbox[2]" value="2">
    14.      <input type="checkbox" name="checkbox[3]" value="3">
    15.      <br>
    16.      <input type='submit' value=' Послать '>
    17.      </form>
    18.  </body>
    19.  </html>
    20.  <?php
    21.  
    22.  if (!isset($_POST['checkbox'])) die();
    23.  
    24.  $arr=array_map("intval",$_POST['checkbox']);
    25.  $query.="WHERE id in (".implode(",",$arr).")";
    26.  echo $query;
    27.  ?>
    Я ошибаюсь, или здесь в одном файле указан и код формы и код скрипта отправки данных в базу?
     
  4. ZZZubec

    ZZZubec Активный пользователь

    С нами с:
    28 мар 2007
    Сообщения:
    140
    Симпатии:
    0
    слова из песни: "Пусть всё будет так как ты захочешь, пусть твои глаза, как прежде горят...
    Это как душе угодно, можно в одном файле, а можно и в бесконечно многих файлах.

    не совсем в базу, он просто выводит на экран что-то в этом духе: WHERE id in( on,,on )
    на сколько мне не изменяют глаза, это лишь подготовительный момент (с выводом результата на экран). Очевидно в последующем должена идти строка: mysql_query( "тадам, тасям... $query;" );
    ну и конечно строка echo $query в последствии коментируется...
     
  5. ZZZubec

    ZZZubec Активный пользователь

    С нами с:
    28 мар 2007
    Сообщения:
    140
    Симпатии:
    0
    Re: Форма отправки данных в базу mysql

    будет время, я выложу нормальный скрипт, ща пока не до него 8)
    это вовсе не сложно, просто очевидно всем тоже некогда 8)

    вот, нашел времечко:
    данный скрипт проверяет инфу и записывает в базу если такого пользователя ещё нет.
    +отправляет письмо, на указанный почтовый адрес.
    (и есче): функция DeleteSymbols() удалаяет из принятых значений, лишние символы, она здесь не описывается, потому что она подключена гораздо выше.
    PHP:
    1. <?
    2. echo "<TITLE>Игра Колония - Регистрация</TITLE>";
    3.  
    4. if ( !isset( $submit ) ) {
    5.  
    6.   echo "
    7.        <font color=#AAAA00><form method="post" action="index.php?panel=$panel">
    8.        <br>
    9.        <table border=0>
    10.        <tr>
    11.          <td>Ваше логин:<br><input type=text size=20 name="Login" class="fields"></td><td>&nbsp;</td>
    12.        </tr>
    13.        <tr>
    14.          <td>Ваше пароль:<br><input type=text size=20 name="Password" class="fields"></td><td>&nbsp;</td>
    15.        </tr>
    16.        <tr valign=top>
    17.          <td>Адрес (e-mail):<br><input type=text size=20 name="Email" class="fields"></td>
    18.        </tr>
    19.        <tr>
    20.          <td><input name="submit" type="submit" value="Зарегистрироваться" class="fields"></td>
    21.        </tr>
    22.        </table>
    23.        </form></font>";
    24. } else {
    25.   if ( $Login != "" && $Password != "" && $Email != "" ) {
    26.     $Login = DeleteSymbols( $Login );
    27.     $Password = DeleteSymbols( $Password );
    28.     $Email = DeleteSymbols( $Email );
    29.     $date = substr( GetData(), 0, 8 );
    30.  
    31.     if ( mysql_connect( $DBhost, $DBuser, $DBpassword ) ) {
    32.       if ( mysql_select_db( $DBName ) ) {
    33.         $flag = 0;
    34.         if ( $result = mysql_query( "SELECT * FROM reg_users WHERE Login='$Login'" ) ) {
    35.           while ( $row = mysql_fetch_assoc ( $result ) ) {
    36.             $flag = 1;
    37.           }
    38.         }
    39.         if ( $flag == 0 ) {
    40.           $mess = "Вы или кто-то от Вашего имени произвели регистрацию в игре Колония, на сайте $gateway.\r\nLogin: $Login\r\nPassword: $Password\r\nСпасибо за регистрацию!.\r\n\r\nЕсли не Вы регистрировались в игре, то не отвечайте на это сообщение. Или напишите письмо администратору: $AdminEmail";
    41.           SendEmail( $Email, "Регистрация в игре Колония на сайте $gateway", $mess );
    42.  
    43.           $attr = 0;
    44.           if ( $Login == $AdminLogin ) $attr = 255;
    45.           $Password = md5( "$Password" );
    46.           if ( mysql_query( "INSERT INTO reg_users VALUES( '', '$Login', '$Password', '$Email', '0', '$attr' );" ) ) {
    47.             echo "<font color=#AAAA00>Регистрация прошла успешно, на ваш почтовый ящик было выслано уведомление. Для входа в игру необходимо перейти на <a href=$gateway>главную страницу</a>.</font>";
    48.           } else echo mysql_error();
    49.         } else {
    50.           echo "<font color=#AAAA00>Пользователь с таким логином уже сущществует, вернитесь <a href=index.php?panel=registration>назад</a> и попробуйте заного.</font>";
    51.         }
    52.       }
    53.     }
    54.   } else {
    55.     echo "<font color=#AAAA00>Для регистрации необходимо заполнить все поля, вернитесь <a href=index.php?panel=registration>назад</a> и попробуйте заного.</font>";
    56.   }
    57. }
    58. ?>
    59.  
     
  6. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Спасибо, буду пробовать.
    Пока сам не сделаешь, все равно не научишься... ;)
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ZZZubec, как-то этот скрипт... попахивает register_globals = On
    [sql]SELECT * FROM reg_users WHERE Login='$Login'"[/sql] ИМХО излишне, достаточно и одно поле проверить
    35 строку вообще не понял зачем ;)
    а что будет, если я после регистрации F5 нажму?
    и на последок, а вдруг где-нибудь понадобится добавить пару строк с header? :)
     
  8. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Люди добрые, четвертый день бьюсь, читаю мануалы, учебники, интернет...

    Нашел очень хороший пример: http://phpclub.ru/detail/article/phpintro. Но там описывается, как сделать запрос из одного файла, а результат получаем в другом. Это впринципе нормально, но хотелось узнать, как можно все сделать одним скриптом, написанным в одном файле. Это так, для общего развития ;)

    Заранее спасибо, если кто поможет наглядным примером!
     
  9. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    У меня форма отправки данных создается динамически, т.к. поля формы создаются на основе столбцов в таблице базы данных. Например в таблице 8 столбцов - в форме появляется 8 Текстовых полей, создаю 9 столбец в таблице - появляется 9 текстовых полей, и т.д. каждому полю присваивается имя, соответствующее имени столбца таблицы BD.

    Код (Text):
    1.  
    2. <?php
    3.  
    4. // Здесь подгружаем дизайн и переменные, необходимые для подключения к базе:
    5. include("header.php");
    6. require_once("temp.php");
    7.  
    8. echo "$menusotr";
    9.  
    10.  
    11. // Выводим заголовок таблицы:
    12. echo "<div align=center>";
    13. echo "<b><font color=#C0C0C0>Список сотрудников компании</font><b><br><br>";
    14. echo "<table border=2 cellpadding=4 bordercolordark=#000000 bordercolorlight=#87BEDC bgcolor=#FFFFFF style=\"border-collapse: collapse\">";
    15. echo "<tr>";
    16.  
    17. $fields = mysql_list_fields("$db", "sotrudniki");
    18. $columns = mysql_num_fields($fields);
    19.  
    20. echo "<td background=images/head_td.gif height=41><b>Поля базы</td>";
    21. echo "<td background=images/head_td.gif height=41><b>Данные</td></tr>";
    22.  
    23. for ($i = 1; $i < $columns; $i++) {
    24. $zagol = mysql_field_name($fields, $i);
    25. echo "<tr><td>$zagol</td><td><input type=text name=$zagol size=20></td></tr>";
    26. }
    27.  
    28. echo "<tr><td colspan=2><form method=\"submit\" action=\"adduser2.php\"><input type=\"submit\" value=\"Добавить в базу данных\" size=\"50\" name=\"B1\"></td></tr></tr>";
    29.  
    30. echo "</table>";
    31.  
    32. ?>

    Отсюда вопрос:

    Как сделать запрос к базе данных, если заранее не известно, сколько в ней столбцов и их название???

    Код (Text):
    1.  
    2. /* составить запрос для вставки информации о клиенте в таблицу */
    3. $query = "INSERT INTO $userstable VALUES('$zagol1','$zagol2', '$zagol3' и т.д. )";
    4. /* Выполнить запрос. Если произойдет ошибка - вывести ее. */
    5. mysql_query($query) or die(mysql_error());
    6. echo "Информация о вас занесена в базу данных.";

    Впринципе понятно, что нужно вставить код, который выдает количество и имена столбцов в базе, но как получить переменные с названием столбца и вставить их в запрос к базе?
     
  10. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Temeshov
    1.
    2.
    какое-то шаманство ты задумал,
    посмотри что даст запрос [sql]SHOW TABLE STATUS[/sql] но только зачем?
    ты ведь форму составляешь из определённой таблицы, её имя ты знаешь, так в чём проблема?
     
  11. Anonymous

    Anonymous Guest

    SELECT * ? =)
     
  12. ZZZubec

    ZZZubec Активный пользователь

    С нами с:
    28 мар 2007
    Сообщения:
    140
    Симпатии:
    0
    яб даже сказал не шаманство, а террористический акт против БД :lol:
     
  13. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Нет, постойте! Никаких террористических актов делать не хотелось!!! База еще пригодится... ;)

    Может я конечно что-то и шаманю, но только по неопытности.

    Напишу пример, чтобы лучше понять проблему:

    В базе данных есть таблица "users". Я (предположим) не знаю, сколько в ней столбцов и как они называются. Но мне нужно вывести форму для внесения данных в эти столбцы. Затем, при нажатии кнопки "Сохранить" данные из формы вставляются в соответствующие столбцы таблицы.

    Как сделать форму, в которой отображабтся все столбцы таблицы я знаю (код приводил выше).

    Я не могу понять, как сделать запрос:

    $query = "INSERT INTO users VALUES('$zagol1','$zagol2', '$zagol3' и т.д. )"; - здесь должны идти имена всех столбцов таблицы, например если в таблице базы данных есть три столбца с именами: 'famaliya','imya', 'otchestvo', то запрос должен выглядеть как
    $query = "INSERT INTO users VALUES('$famaliya','$imya', '$otchestvo')";

    Но как сюда вставить эти данные???
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ой, а где вы все берёте такую хорошую траву? :D
    это как? «тут помню, тут не понню» (с) получается.
    так же, как и при генерировании формы узнай количество и имена полей, потом циклом создай запрос:
    PHP:
    1.  
    2. <?php
    3. // $list - массив с именами полей
    4.  
    5. $query = 'INSERT INTO `users` VALUES (';
    6. for($i=0;$i<count($list);$i++)
    7.     $query.= "'".$_POST[$list[$i]]."',";  // если передаёшь методом GET, то замени на $_GET[$list[$i]]
    8. $query = substr($query,0,strlen($query)-1).')';
    9. mysql_query($query);
    10. ?>
    11.  
    удовлетворил любопытство?
    А теперь весь этот бред забудь! Ибо ересь.

    Ситуация высосана из пальца, если ты пишешь скрипт, то явно для каких-то целей => ознакомится с содержимым БД можно и заранее. Форму проще-простого написать ручками и предоставить пользователю, а не гонять ради это машину.
    Хотя, может у тебя идея такая, что пользователю для заполнения подсовывается одна, случайно выбранная из тысяч, форма, тогда, конечно, так и делай.
    А знаешь, что здесь самое неприятное?
    1. как сгенерировать подписи к полям, что бы пользователь понял, что от него хотят?
    2. а вот возьмёт и не совпадёт, то, что ввёл пользователь с разрядностью или типом полей, и как быть?

    так что попробуй лучше сам, руками написать форму и уже из полученных из неё данных делать запрос в таблицу, количество и насвания полей которой известны
     
  15. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Luge, спасибо за ответ!

    1. Подписи к полям будут такие же, как и заголовки столбцов в таблице.
    2. В данном случае все поля тектовые, поэтому особых проблем возникнуть не должно. Но над этим еще подумаю.

    Нет, я не собираюсь подсовывать одну из тысячи форм, просто идея была такая: Мы заливаем этот скрипт на определенный сервер. И сотрудник вводит в эту форму данные. Потом (через какое-то время) администратор (не я), захочет добавить в данную таблицу еще какой-нибудь столбец (например данные о детях), и нужно, чтобы сотруднику выводилась форма с новым полем "данные о детях". При этом php код не переписывался.

    Может ситуация и правда высасана из пальца, но по моему это было бы удобно. Не переписывать каждый раз код, если админу захочется добавить в базу дополнительный столбец.
     
  16. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Все сделал!!!! Ура. :)
    Спасибо всем!


    Файл: adduser.php

    Код (Text):
    1. <?php
    2.  
    3. include("header.php");
    4. require_once("temp.php");
    5. global $host, $user, $password, $db;
    6.  
    7. echo "$menusotr";
    8.  
    9. // Выводим заголовок таблицы:
    10. echo "<div align=center>";
    11. echo "<b><font color=#C0C0C0>Список сотрудников компании</font><b><br><br>";
    12. echo "<table border=2 cellpadding=4 bordercolordark=#000000 bordercolorlight=#87BEDC bgcolor=#FFFFFF style=\"border-collapse: collapse\">";
    13. echo "<tr>";
    14.  
    15. $fields = mysql_list_fields("$db", "sotrudniki");
    16. $columns = mysql_num_fields($fields);
    17.  
    18. echo "<FORM ACTION=\"add_user.php\" METHOD=\"POST\">";
    19. echo "<td background=images/head_td.gif height=41><b>Поля базы</td>";
    20. echo "<td background=images/head_td.gif height=41><b>Данные</td></tr>";
    21.  
    22. for ($i = 1; $i < $columns; $i++) {
    23. $zagol = mysql_field_name($fields, $i) . "\n";
    24. echo "<tr><td>$zagol</td><td><input type=text name=$zagol size=20></td></tr>";
    25. }
    26.  
    27. echo "<tr><td colspan=2><INPUT TYPE=\"submit\" VALUE=\"Отправить запрос!\"></td></tr></tr>";
    28.  
    29. echo "</table>";
    30. ?>

    Файл add_user.php

    Код (Text):
    1. <?php
    2.  
    3. require_once("temp.php");
    4. global $host, $user, $password, $db;
    5.  
    6.  
    7. // Подключаемся к mysql серверу
    8. $link = mysql_connect($host, $user, $password);
    9.  
    10. // Выбираем нашу базу данных
    11. mysql_select_db($db, $link);
    12.  
    13. $fields = mysql_list_fields("$db", "sotrudniki");
    14. $columns = mysql_num_fields($fields);
    15.  
    16. $query = 'INSERT INTO `sotrudniki` VALUES (0,';
    17. for ($i = 1; $i < $columns; $i++) {
    18. $zagol = mysql_field_name($fields, $i);
    19.  
    20. $query.= "'".$_POST[$zagol]."',";
    21. }
    22.  
    23. $query = substr($query,0,strlen($query)-1).')';
    24.  
    25. mysql_query($query) or die(mysql_error());
    26. include("header.php");
    27. require_once("temp.php");
    28. echo "$menusotr";
    29. echo "<br><br><br><br>Информация о вас занесена в базу данных.";
    30.  
    31.  
    32. ?>

    Т.е. получилась универсальная форма добавления данных в любую таблицу базы данных. Все что нужно поменять, это имя таблицы (в данном случае это таблица sotrudniki).


    Кроме мнения, что это бред, еще есть замечания?
     
  17. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    только если сделал как я последний раз написал, то проэкранировать $_POST не забудь,
    т.е. будет форма в которой перед полем будет пояснительная надпись famaliya?
    нет, ну ещё транслитом пользователь поймёт, а если твой скрипт будет на базе с полями, которые называютяся как-то вроде US_INF_FIRSTNAME, то что, будешь это пользователю выводить?
    ИМХО, если админ в состянии добавить поле в БД, то поправить форму и запрос ему труда уже не составит
     
  18. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Что значит "проэкранировать $_POST не забудь"???

    Данные будут транслитом, но сейчас я хочу сделать так, чтобы эти данные менялись на русские названия (как в php nuke) заголовки заменяются на данные, содержащиеся в файле lang-russian.php

    Я понимаю, что у вас всех недоумение по поводу того, что админ может добавить поле в БД, но не может изменить форму запроса. Но такое может быть, по крайней мере у нас. Я уважаю вашу критику, но нам так надо. Спасибо.
     
  19. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Что-то у меня сегодня с логикой не то, получается, что (теоретически) не зная количества и названия полей создаётся форма и запрос, и одновременно с этим в lang-russian.php должны быть русские эквиваленты названиям таблицы, о веселуха.

    моё первое сообщение посмотри. И всё-таки прочитай http://phpfaq.ru/slashes, хотя наверное весь phpfaq
     
  20. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Я этот сайт себе в закладки уже поместил! Там очень много полезной информации, спасибо.
    Про экранирование понял.

    Вообще планируется подключить данный скрипт к базе в которой простые заголовки полей типа "imya", "otchestvo" и т.д.
    Про логику я уже думал, но ведь можно что-нибудь придумать? Когда придумаю - напишу.
     
  21. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Придумал следующее:

    Есть таблица в базе данных "russian", в ней два поля "eng" и "rus" соответственно.
    Заносим в таблицу "eng" имена полей таблиц базы данных, а в "rus" их русские названия.

    При выводе формы скрипт смортит таблицу "russian" и ищет там перевод, если не находит то выводит имя таблицы в транслите (проверено на практике - работает без проблем).

    Далее, в скрипте, который будет добавлять новые таблицы или новые поля в уже существующие таблицы, дописываем код, который будет спрашивать у пользователя имя нового поля в транслите и его русское название и добавлять эти значения в табл. "russian".

    Есть замечания?

    p.s. Данный код разрабатывается для внутреннего сайта компании, так что тысяч обращений в день не будет (всего 10-15 пользователей). Это для тех, кто считает, что я издеваюсь над базой данных.
     
  22. Anonymous

    Anonymous Guest

    Temeshov, это нормально, на самом деле. У меня есть надстройка над системой биллинга, там похожий принцип используется, для построения справочников автоматически — заголовку столбца и имени таблицы сопоставляется осмысленный русский эквалиент.
     
  23. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    Есть еще несколько вопросов:

    В базе данных мы указываем всем полям определенные критерии, например максимальное количество символов или формат поля (текст, числа или дата, и т.д.).

    На данный момент меня интересует, как можно узнать какой тип данных необходим для ввода в данное поле и какое количество символов разрешено.

    Т.е. когда скрипт формирует "универсальную форму" отпраки данных, хотелось бы чтобы полям присваивались максимальные значения длинны
    Код (Text):
    1. echo"<input type=text name=test maxlength=13>";
    Или если поле имеет числовые данные, то и в форму можно было бы ввести только числовые данные, в противном случае выдавалось бы предупреждение.

    И отдельная тема про формат даты! В базе данных дата хранится в виде ГГГГ-ММ-ДД, а мы все привыкли вводить дату как ДД.ММ.ГГГГ Как быть? В голову лезет только одна мысль: выводить три поля формы типа "введите день" "введите месяц" "введите год", а потом скрипт сам подставляет данные как надо, но это не удобно.

    Возникает ожидаемый вопрос "ЧТО ДЕЛАТЬ?" ;)
     
  24. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    тут уже на тему даты и mysql были дебаты :D
    [sql]SHOW COLUMNS FROM имя_таблицы[/sql]
    а у гугла спросить слабо?
     
  25. Temeshov

    Temeshov Активный пользователь

    С нами с:
    4 апр 2007
    Сообщения:
    18
    Симпатии:
    0
    У гугла? Да не слабо, есть много разной инфы, что получается ищу там... но я этот форум тоже через гугл нашел, вот и спарашиваю...

    За ссылку про даты, спасибо.