Создание профиля зарегистрированного пользователя

Этот урок хотелось бы посвятить созданию личного профиля для зарегистрированных пользователей (дополнение к уроку ). Теперь пользователи смогут добавить свой аватар, изменить имя и фамилию, добавить место проживания и день рождения. Для этого в таблицу users добавим несколько полей:

Теперь создадим страницу профиля profile.php и добавим на странице index.php ссылку на нее

Echo "
Мой профиль"; Теперь код самой страницы profile.php

Профиль <?php echo $login; ?>

Профиль



"; echo "".$array["name_user"]." ".$array["lastname"]."
"; switch ($array["birthdate_month"]){//Превращаем номер месяца в название case "1" : $month = "Января"; break; case "2" : $month = "Февраля"; break; case "3" : $month = "Марта"; break; case "4" : $month = "Апреля"; break; case "5" : $month = "Мая"; break; case "6" : $month = "Июня"; break; case "7" : $month = "Июля"; break; case "8" : $month = "Августа"; break; case "9" : $month = "Сентября"; break; case "10" : $month = "Октября"; break; case "11" : $month = "Ноября"; break; case "12" : $month = "Декабря"; break; } echo "Дата регистрации: ".$array["reg_date"]."
"; echo "Пол: ".$array["sex"]."
"; echo "День рождения: ".$array["birthdate_day"]." ".$month." ".$array["birthdate_year"]."
"; echo "Страна: ".$array["country"]."
"; echo "Город: ".$array["city"]."
"; if($_GET["id"] == $id_user){//Редактировать профиль может только хозяин echo "Редактировать профиль"; } }else{ print << Вход:
Логин: Пароль:
РегистрацияВосстановление пароля HERE; } ?>

Естественно перейдя на эту страницу, мы увидим стандартную аватарку noAvatar.jpg и возможно имя и фамилию, если пользователь при регистрации указал их, остальные пункты будут пусты. В самом конце этой страницы есть ссылка на страницу редактирование профиля edit.php . Код этой страницы очень легок и состоит из форм для ввода данных. Из-за довольно большого объема приводить здесь полностью я его не буду, а приведу лишь часть, полностью взять его можно будет в исходных файлах.

Все остальные формы аналогичны и будут ссылаться на один обработчик save_edit.php , который и будет вносить изменения в базу данных. Он также имеет достаточно большой код, и здесь я его тоже приводить не буду, а лишь немного расскажу, что в нем происходит (полностью код вы также с можете в исходных файлах). Первым делом мы создаем аватарку, если пользователь ее загрузил конечно, в противном случае оставляем стандартную. Если это так, то первым делом мы загружаем в папку avatars (кстати, создайте эту папку и поставьте ей права на запись 755) предварительно проверив с разрешенными расширениями. Затем создается новое изображение форматом зависящее от выбранного режима: $rezim = 1 создается квадратная картинка, $rezim = 2 картинка пропорциональная исходной. Также надо задать ширину создаваемого изображения $w и качество $quality . Созданное изображение мы сохраняем в формате jpg с помощью функции imagejpeg и генерируем для него случайное имя. Теперь нужно удалить старое изображение и обновить в базе данных на новое. На этом с изображениями все.

Все остальные пункты данного файла предназначены для обновления личных данных о пользователя и представляют собой простые запросы к базе данных для обновления полей. Предварительно перед обновлением проверяется существование входящих переменных и их безопасность с помощью stripslashes и htmlspecialchars . Если обновление происходит успешно, то мы сразу перенаправляем пользователя на страницу профиля.
Теперь сделаем так чтобы вошедший пользователь смог видеть всех остальных зарегистрированных пользователей. Для этого создадим страницу user.php , которая в цикле будет выводить всех пользователей.

FirePHP - это расширение для firebug, которое в связке со своим маленьким php-классом, позволяет транслировать в консоль firebug"а данные от php, например всякие var_dump и прочую отладочную информацию. Главный плюс этого расширения в том, что вся трансляция отладочной информации происходит через заголовки и не замусоривает страницы и вообще никак не ломает логику работы приложения. Официальный сайт: http://firephp.org/ .

Основная идея.

Общий алгоритм профилирования заключается в следующем:
  1. В начале страницы включаем профайлинг с помощью xhprof_enable()
  2. В конце страницы выключаем профайлинг с помощью xhprof_disable() и сохраняем собранные данные с помощью save_run()
  3. Далее с помощью php-класса firephp передаем ссылку на данные профайлинга на клиентскую часть
  4. В консоли firebug"а открываем нужную нам информацию
  5. Радуемся:)
Еще хочется сказать, что, конечно, ручное добавление этих функций в свои php-скрипты - это здорово. Но хочется, чтобы эта информация всегда была под рукой во время разработки, и при этом не попадала на боевые сервера. Мы решаем эту задачу следующим образом:

В наших проектах почти во всех скриптах в начале подключается рабочий файлик с загрузчиком классов, подключением функций и прочими нужными штуками. Поэтому включение профайлинга мы вынесли в этот файл. А для того, чтобы иметь возможность включать/выключать отладочный режим по своему желанию добавили проверку на конфигурационную константу, плюс обернули эти проверки в некие мета-тэги, которые автоматически удаляются при сборке проекта. Тоже самое относится и к выключению профайлинга и записывании информации в заголовки с помощью firephp - эти задачи решает одна функция, которая вызывается в конце каждого php-скрипта и так же обернута в мета-тэги. Выглядит это примерно так:

// В конфиг-файле приложения прописаны вот такие константы

/** Режим работы среды окружения * */
define("APPLICATION_ENV" , "dev" ); // dev - отладка | pro - продакшин
/** Путь до профайлера */
define("XHPROF_ROOT" , __DIR__ . "/ExtProcs/debug/xhprof-0.9.2" );

/***************************************************************************************
* Далее в файлике, который подгружается в начале каждого скрипта запускаем профайлинг
* DEV_START и DEV_END - это наши мета-тэги, все что между ними вырезается при сборке
***************************************************************************************/

//-- DEV_START
//-- в режиме отладки подключаем debug библиотеки

// Подгружаем firephp
require_once(__DIR__ . "/includes/ExtProcs/debug/firephp/FirePHP.class.php" );
//-- подгружаем профайлер
"/xhprof_lib/utils/xhprof_lib.php" );
require_once (XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php" );
// Инициализируем профайлинг с нужными флагами. Подробное описание флагов
// можно найти на php.net/manual/ru/xhprof.constants.php
xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
//-- DEV_END

// Ну и вот такая функция вызывается в конце каждого скрипта
// Ее вызов так же обернут в DEV_START и DEV_END

/**
* Создаем ссылку на результат профайлинга и выводим это в консоль
*/
function dev_boot_Down() {
if (APPLICATION_ENV === "dev" ) {
// Инициализируем экземпляр firephp
$firephp = FirePHP::getInstance(true );
// Выключаем профайлинг и сохраняем данные
$xhprof_data = xhprof_disable();
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing" );
// Формируем ссылку на данные профайлинга и записываем ее в консоль
$link = "http://" . $_SERVER["HTTP_HOST" ] . "/includes/ExtProcs/debug/xhprof-0.9.2/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n" ;
$firephp->info($link, "profiling data" );
}
}


* This source code was highlighted with Source Code Highlighter .

Не буду вдаваться в подробности установки данных расширений, ибо тут все просто. Скажу только про некоторые моменты настройки. В xhproof предусмотрена всего одна конфигурационная переменная - xhprof.output_dir, которая указывает на папку, куда будут сохраняться данные профайлинга. Поэтому убедитесь, что в указанную директорию у пользователя, из-под которого выполняются php-скрипты есть права на запись. Так что пропишите в свой php.ini что-то вроде этого:


extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

Так же не плохо поставить что-то типа dot или Graphviz для рисования графов вызовов. У меня под MacOS X стоит Graphviz.

Проделав вышеописанные процедуры мы получили возможность в любой момент прямо в браузере открыть и посмотреть на профайлинг любого нашего скрипта.

У вас родилась гениальная идея, вы воодушевлены и полны энергии, как вдруг внутри раздается скрипучий голосок: «И куда это мы так торопимся? Все равно ничего хорошего из твоей затеи не выйдет!»

Если вам это знакомо, значит, вы уже не раз сталкивались с внутренним критиком .

Что же это такое? Как наладить с ним отношения?

На первый взгляд, внутренний критик — довольно полезная способность психики, которая призвана анализировать и контролировать нашу деятельность на всех этапах: от момента обдумывания замысла и его целесообразности до финальной оценки результата.

Почему же он так деструктивен?

Почему внутренний критик — отрицательный герой

Вернемся в раннее детство, потому что именно там кроются причины деструктивных изменений.

Чаще всего, внешний контроль родителей позже становится стилем вашего внутреннего критика.

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

Гиперопека, излишний контроль и запреты, неверие в силы и способности ребенка — вот причины разрушительного стиля вашего внутреннего критика.

Вспомните, какие эмоции испытывали ваши родители, когда что-то вам запрещали или ругали вас? Ребенок часто «перетягивает» эмоции взрослых на себя.

И тут получается столкновение. Его детская непосредственность и радость от новизны содеянного перечеркиваются неодобрением самого дорогого человека на свете.

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

Скорее всего, это будут критерии ваших родителей и ближайших родственников, потому что именно их вам тщательно и методично вбивали в голову на протяжении всего детства.

И даже если сейчас у вас другие ориентиры, внутренний критик все равно будет вещать на старой волне.

Как превратить внутреннего критика в союзника

Что же можно сделать, чтобы ослабить негативное влияние внутреннего критика или даже сделать его своим другом ?

Давайте разберемся.

1. Осознайте свои эмоции

Прежде всего, осознайте свои эмоции в момент его активного включения и проследите, откуда они происходят.

Наверняка этот тип проявления критика возникает в строго определенных ситуациях. Отследите закономерности и выявите тот спусковой крючок, который запускает вашу реакцию.

Попробуйте назвать все эмоции, которые вы испытываете, и оценить их силу по любой удобной вам шкале.

Осознание и фиксирование эмоций приносит облегчение и зачастую дает ключ к разгадке потенциальных причин текущих негативных проявлений.

2. Переключите внимание с эмоций на тело

Переключите ваше внимание с эмоциональных переживаний на физические ощущения в теле:

  • В каком положении тело застыло?
  • Есть ли где-то напряженные участки?
  • Присутствуют ли болевые ощущения или, наоборот, онемение?

Продышите эти места, наполните их светом, отпустите все блоки и расслабьте мышцы.

3. Проведите границу между вами и вашим критиком

Разграничьте себя и внутреннего критика: он — не вы, его цели — не ваши цели.

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

4. Подружитесь со своим внутренним критиком

Примените технику, предложенную Джоном-Полом Флинтоффом (колумнист The Guardian).

Нарисуйте своего внутреннего критика и дайте ему имя. Напишите над ним его типичные реплики.

А теперь представьте, что ваш внутренний критик превращается в персонажа поддержки, например, во внутреннего учителя !

Нарисуйте, как он выглядит, какие слова вы от него ждете.

Попробуйте вести с новым персонажем внутренний диалог, и вы вскоре увидите, какие изменения произойдут в стиле общения вашего внутреннего лучшего помощника!

Превратив внутреннего критика в своего помощника, вы станете уверенней в себе.

Внутри вас произойдет объединение ранее конфликтующих частей личности. Вы обретете целостность и осознаете свою ценность.