« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга

Тестирование 64-битных приложений

ПнВтСрЧтПтСбВс
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          
    Популярное
Функция GetKeyNameText

Начало работы с Visual Studio.Net

Тесты

Работа с инифайлами. Объект Inifiles.

Функция UnregisterClass

Преимущества разработки web страницы по схеме - html+flash

chmod - изменение режима доступа к файлам

Функция AccessResource

Функция IsCharUpper

Быстрое создание CSS шаблона в Photoshop




    Архив файлов



    Сообщества



    Документация

Статьи:: Интернет технологии :: PHP :: Нашествие данных (приемы по обработке данных сразу оптом)


отправить ссылку другу версия для печати  Обсудить на форуме

Нашествие данных (приемы по обработке данных сразу оптом)



Доброго времени суток всем!
Вот решил выложить на пробу небольшой туториал с приемами по обработке данных сразу оптом. Очень интересно насколько актуален материал в условиях повсеместного распространения CMS и при огромном множестве других туториалов. И насколько программисты в теме насчет таких способов и как часто используют. Очень хотелось бы послушать ваши комментарии!!



P.S. Заранее прошу прощения, если где-то форматирование будет сбиваться и станет некорректным! На всякий случай приложил еще файл со статьей

Итак, вы переживаете настоящее нашествие данных! Их просто слишком много??!! Окидывая взглядом такое полчище невольно опускаются руки и возникают мысли , как же все это обрабатывать?
Но, уже на второй взгляд, вы деловито выбираете то, что уж точно должно быть, то, что желательно, и то, что уж совсем опционально. Также вариант избавиться от чего-то лишнего, словом частично переосмыслить модель.
Первый способ именно для "желательных" данных. Что же такое, на мой взгляд "желательные" данные? Это данные, с которыми я не планирую никакой логики, ну разве что, кроме проверки вхождений (есть в них какая-нибудь нужная мне информация) и никаких действий, только вывести и редактировать. Ни сравнений, ни ключей, ни главных “ролей” в моем коде. Представим самый неабстрактный и обыденный пример. Какой-нибудь сайт знакомств с множеством всякой всячины, типа автопортрета (любимые книги, фильмы, места, девизы...) Эти данные не являются обязательными, они также не участвуют в поиске анкет пользователей, и мне кажется, не несут какой-либо программной логики. Но они красят человека-пользователя, дают ему шанс выделиться, дополнить рассказ о себе мельчайшими деталями. А другим пользователям найти того единственного человека, отличающегося не только по нику, имени и фотографиям.
Если эти данные нам не нужны, просто-напросто свалим их в кучу. Схема такова, данные предстают перед пользователями либо для редактирования, либо для просмотра, а нам они вовсе как бы не требуется, поэтому свалим их во что-нибудь более простое: строчку, массив, или сериализацию, приведем к такой форме, которую несложно хранить и извлекать. В моем примере я выбрал именно сериализацию, просто потому что, это стандартная функция PHP, она позволила свернуть мне мой массив данных в "a byte-stream representation of value that can be stored anywhere". Эмм, то, что легко и везде храниться. В моем примере сериализация сохраняется в поле в БД MySQL, хотя нет никаких препятствий для использования файлов.
Еще один момент, на который хотелось бы особо обратить внимание, что все данные формы, доступны через массив $_POST, можно особо не заморачиваться - сразу сериализовать весь массив, сохранить его в БД, при необходимости совершить обратную процедуру, и последовательно, поэлементно выводить значения массива для редактирования или просмотра. Если вас чем-то не устраивает эта схема, учтите, что если вы назовете парочку ваших полей в HTML-форме name="dannie[]", то в PHP они будут объединены как массив (это позволит локализовать ваши "желательные" данные, особо не заморачиваясь).
Что-то я многовато наговорил, но так уж получилось! Могу утешить, что код будет совсем простым)))
Пример состоит из двух файлов : вывод для пользователя (a_form.php) и обработка изменений (a_edit.php)

a_form.php

 

CODE

<?
// Настройки БД
require_once ("conf/connect.php");
// sql запрос для извлечения «желательных» данных пользователя под номером $_SESSION['id']
$query = "SELECT * FROM add_info where info_id ={$_SESSION['id']}";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
// мы достали из БД сериализация данных, для того, чтобы превратить их в объект, требуется обратная операция
$a=unserialize($row['info1']);
// Вопросы для удобства я включил в скрипт как массив, хотя они могут находиться где вам угодно... Кстати знакомые вопросы, неправда ли)) и очень полезные))
$query_a[0]="Ваше образование, институт:" ;
$query_a[1]="Что для вас наивысшее счастье?" ;
$query_a[2]="Ваш любимый музыкальный исполнитель:" ;
$query_a[3]="Какое качество вы особенно цените в человеке?" ;
$query_a[4]="Какую цель ставите перед собой сейчас?" ;
$query_a[5]="Работа, о которой вы мечтаете:" ;
$query_a[6]="Где бы вы хотели жить?" ;
$query_a[7]="Если бы у вас была масса свободного времени, чем бы вы занялись?" ;
$query_a[8]="Любимое блюдо?" ;
$query_a[9]="Ваш любимый исторический персонаж:" ;
$query_a[10]="Место в городе, где вы любите бывать:" ;
$query_a[11]="Есть ли у вас домашние животные?" ;
$query_a[12]="Ваш любимый город:" ;
$query_a[13]="Ваш любимый фильм:" ;
$query_a[14]="Любимое блюдо?" ;
$query_a[15]="Самое большое впечатление во время зарубежной поездки:" ;
$query_a[16]="Книга, которую вы сейчас читаете:" ;
$query_a[17]="Ваше любимое занятие?" ;
$query_a[18]="Кем из известных вам людей вы бы хотели быть?" ;
$query_a[19]="Ваш девиз:" ;
?>
<form action="a_edit.php" method=POST>
<?
// мы автоматически генерируем форму для редактирования, используя массив вопросов, и массив $a после десериализации, который содержит пользовательские ответы
for ($i=0;$i<count($query_a);$i++) // Хотелось бы воспользоваться foreach, но вывести два массива через один foreach без дополнительных преобразований у меня не получилось((
{
echo "<b>{$query_a[$i]}</b><br>";
echo "<textarea name="s1[]" cols=40 rows=10>{$a[$i]}</textarea><br>";
}
?>
// собственно и все мы отправляем данные второму скрипту, который их обрабатывает... здесь как раз используется фишка, что все данные будут в единственном массиве $s1, хотя в этом случае, наверное, проще было свернуть сразу массив $_POST
<input type="submit">
</form>
 


a_edit.php

 
CODE

<?
require_once ("conf/connect.php");
// заменим пользовательские кавычки на &quot; и постараемся сократить количество возможных сюрпризов к минимуму
for ($i=0;$i<count($s1);$i++) $s1[$i] = htmlentities ($s1[$i], ENT_NOQUOTES);
// здесь рекоммендую обратить внимание что можно воспользоваться foreach ($arr as &$value) Значок амперсанда означает, что &$value является ссылкой на элемент массива, то есть изменив его значение $value мы поменяем и сам элемент. В другом случае foreach здесь бесполезен

// сворачиваем данные
$s=Serialize($s1);
// создаем запрос для изменения. Здесь следует учесть что поле должно уже существовать, иначе запрос ничего не выполнит. Стоит позаботиться об этом заранее, например при регистрации, или самом первом редактировании, когда массив после десериализации пуст
$query ="UPDATE `add_info` SET `info1` = '{$s}' WHERE `info_id` ={$_SESSION['id']} LIMIT 1;";
mysql_query($s);
?>
 

Вот и все, пожалуй, с первым способом! Рекомендую все же прочитать о функциях Serialize , все ж новое - это хорошо забытое старое!

Второй способ. А второй способ удобен, когда данные нежелательно сваливать в кучу, на них основана логика, какие-то действия. Но их все же многовато, и хочется как-то автоматизировать процесс редактирования. Снова пример. Требуется простейший project manager для предприятия, изготовляющего стеклопакеты. Каждый заказ проходит через множество стадий сборки: раскрой, сборка, штапики, установка, доставка. Каждая стадия содержит по 3-4 даты и редактируется определенной группой пользователей, причем есть супервайзеры, которые могут редактировать все поля. Все заказы выводятся в календаре на месяц, по мере продвижения заказа меняется цвет, и устанавливаются галочки "выполнено".
Опять исходим из того, что при редактировании не нужно никакой особой логики, разве только чтобы проследить, что каждая группа редактировала только назначенную ей стадию. Значит, нам опять требуются форма для редактирования с уже хранимыми данными и скрипт, который эти данные обрабатывает. Вывод формы для редактирования можно автоматизировать по-разному. Например, функция mysql_list_fields позволит нам без особых сложностей получить список полей в таблице, и присвоить их именам уже полям в HMTL-форме, добавить к этому массив значений этих полей для заказа - и получается почти автоматически сгенерированная форма. К этому следует добавить логику ролей, то есть, чтобы для редактирования доступны были только данные, присущие группе. Зачем мы извлекали список полей таблицы? Просто для того, чтобы, генерируя запрос с UPDATE, мы могли автоматически подставлять ключи массива $_POST, которые одновременно являются и названиями полей в БД. Наверное, все же с примером будет понятней. Допустим, у нас есть "UPDATE orders SET pole1 = '1' , pole2 = '2'" и так далее. Представьте, что таких полей множество и называться они могут совсем по-разному, а не так упорядоченно. Если же мы используем функцию mysql_list_fields, то UPDATE можно сконструировать совсем просто, проходя foreach по массиву $_POST и добавляя в строчку для запроса следующее: $what_to_update.="{$fname} = '{$update}' , "; ,где $fname - это ключи массива $_POST, а $update - его значения. Ну, единственное, если вас беспокоит, что поля в HTML-форме носят названия полей БД (видна структура таблицы), можете воспользоваться приемом описанном в предыдущем способе, назвать все поля как "update[]", и пользоваться им как массивом значений. Правда, вам все же придется воспользоваться функцией mysql_list_fields, чтобы получить названия полей и сгенерировать UPDATE, но уже в скрипте для обработки, который недостижим для пользователя. Также советую расположить данные одной стадии рядышком, тогда группе можно задавать диапазон полей для редактирования, что еще более упростит задачу. Теперь приведу краткие выдержки из кода для наибольшей ясности и особо ленивых.
выдержка из order_form.php
 
CODE

<?
// автоматическая генерация HTML-формы… В переменной $access содержатся номера полей для редактирования группой, если пользователь может редактировать поле то значение переменной появится в элементе type=”text”. Все поля собираются в массив update, который используется в дальнейшем для создания запроса с UPDATE
for ($i=3;$i<=20;$i++)
if (strpos($access,";".$i.";"))
echo "<td><input type="text" size="9" value="{$row[$i]}" name="update[]"></td>";
else
echo "<td>{$row[$i]}</td>";
?>

 

выдержка из order_edit.php
 
CODE

<?
// для ясности я разбил формирования запроса с UPDATE по разным переменным
query="";
//начало запроса (стандартно)
$query_1="UPDATE orders SET ";
// окончание запроса (стандартно)
$query_2=" WHERE `orders`.`id` ={$id} LIMIT 1 ;";
$what_to_update="";
$fields = mysql_list_fields("baza1","orders",$link);
// основной текст запроса ...в переменную $what_to_update добавляется названия поля, а затем измененное значение из массива $update, переданное пользователем
for ($i = 0; $i <= 20; $i++)
if (isset($update[$i]))
// еще раз проверка чтобы пользователь не мог редактировать чужие поля
if (strpos($access,";".$i.";"))
{
$fname=mysql_field_name($fields, $i);
$what_to_update.="{$fname} = '{$update[$i]}' , ";
}
// отнимаем лишнюю запятую
$what_to_update=substr($what_to_update,0,-2);
// склеиваем запрос в одно целое и выполняем
$query=$query_1.$what_to_update.$query_2;
mysql_query($query);
//echo $query;
?>
 

Ну и напоследок краткий footer.php! Вполне вероятно вам придется столкнуться с ситуацией, когда вам нужно обработать данные с незнакомой формы, содержащей очень прилично JavaScript. Прежде чем с головой нырять в эти дебри, можете попробовать сначала action формы поменять на свой тестовый скрипт, а там вывести эти данные print_r($_POST). Функция print_r чрезвычайно удобна, она покажет вам весь в массив вместе с ключами и в вполне удобном виде. Тогда возможно и окажется, что этот незнакомый JavaScript все собирает в одну переменную res в каком-нибудь формате "ключ : значение". Извлечь данные в массив тогда можно функцией explode. Но, даже если создатели формы об этом не позаботились, не забывайте о чудесном foreach и $_POST, позволяющим вам извлекать ключи и значения, переданные пользователем. В любом случае желательно познакомиться через print_r($_POST) со всеми данными, чем выдирать их из кода формы по кусочкам. Также возможно, что $_POST будет содержать несколько вложенных массивов.
Тогда вам может пригодиться такой код:

 
CODE
<?
$message="";
// $_POST содержит список массивов
foreach ($_POST as $value)
// $value является также массивом
foreach ($value as $key => $value2)
// получаем ключ и значение
$message.="<b>{$key}</b> : {$value2} <br>";
?>
Вот, пожалуй и все! Хочется вам пожелать, чтобы вы любили ваши данные и программировали с удовольствием!

Автор: Кроваткин




Рубрика: PHP




8 веских причин сделать сайт на PHP.

PHP

В наше время многие пользователи Интернета превращаются в его строителей. Насмотревшись на чужие сайты, простой интернетчик начинает задумываться и о собственном "офисе" в этом мегаполисе. Но как? В какой программе? На каком языке? Именно на последний вопрос даёт развёрнутый ответ эта статья. А поскольку Вы её читаете, то видимо тоже заинтересованы в создании своего сайта.


Подробнее... | Рубрика: PHP | Добавлено: 08.09.2008

Обзор Google Chrome : Впечатления очевидца.

Вебмастеру

Обзор Google Chrome : Впечатления очевидца. Полный обзор Google Chrome Beta с точки зрения придирчивого программиста. Google Chrome, Браузер, Beta Огнеслав


Подробнее... | Рубрика: Вебмастеру | Добавлено: 08.09.2008

Инструменты Internet Explorer 8 Beta 2 для разработчиков.

Вебмастеру

В марте этого года мы уже писали об инструментах для разработчика в IE8 Beta 1, но IE8 Beta2 позволяет более полно использовать инструменты за счет значительных изменений в имеющихся функциях, а также новых возможностей. В принципе инструменты для разработчика должны обладать следующими свойствами: Быть интегрированными и простыми в использовании; Иметь визуальный интерфейсC их помощью можно быстро протестировать сайт.


Подробнее... | Рубрика: Вебмастеру | Добавлено: 05.09.2008

Остальные статьи:

Google Developer Day 2008 в Москве
ТОП 10 самых раздражающих факторов для программиста
Windows Server 7, 8 и 9
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2


Цитата дня (все,добавить):



    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование

Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 253
Пользователей: 1
  • admin