KostaShah

Рейтинг
17
Регистрация
11.06.2012

Если эта кука должна сохраняться в поле ref в таблице user то вот эту строку

mysql_query("INSERT INTO `user` (`login`, `password`, `email`,  

`name`, `parent`, `class`, `level`, `exp`, `hp`) VALUES ('{$_POST['m_login']}',
'".md5($_POST['m_password'])."', '{$_POST['m_email']}', '{$_POST['m_name']}',
'{$_POST['parent']}', 'a', 0, 0, 99)");

замените на

mysql_query("INSERT INTO `user` (`login`, `password`, `email`,  

`name`, `parent`, `class`, `level`, `exp`, `hp`,`ref`) VALUES ('{$_POST['m_login']}',
'".md5($_POST['m_password'])."', '{$_POST['m_email']}', '{$_POST['m_name']}',
'{$_POST['parent']}', 'a', 0, 0, 99,'$_COOKIE[ref]')");

LEOnidUKG прав. SQL - это отдельный язык, отдельная архитектура, или даже, если хотите, философия. С ним не начинают работать так "с наскока". Если вы с ним не знакомы, найдите хорошую, основательную книжку (а лучше несколько), где не только описываются команды и их синтаксис, а преподаётся теория, начиная с азов реляционных баз данных. Стоит выделить на его изучение значительное время. Потом это окупится.

bbon:
только не 14400кб, а 14.4 кбит/сек

Ваша правда, ошибся.

bbon:
отключаешь в браузере картинки, несколько секунд - и готово

При продолжительном листании, несколько секунд на страницу могут так проесть печёнку...

Dinozavr:
это шутка? любая неоптимизированная картинка рвёт все эти потуги с кодировкой, как тузик грелку

Это не шутка, это из личного опыта. Я делал сайты без неоптимизированных картинок, и когда задумывался, не сделать ли сайт в UTF-8, то я взвешивал плюсы и минусы. Плюс: если на сайте будет текст на каком-то другом языке... Но его там не будет! Минус: в два раза больше объём данных, и для передачи (трафика) и для хранения в базе данных. А больший объём в базе данных - это и чуть менее быстрая её работа.

bbon:
Основной трафик, что тогда, что сейчас создают двоичные файлы, но никак не текст

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

bbon:
а китайцы-то не знают об этом

А у китайцев не буквы :p

Кроме того, ASCII с американцами имеют мало отношения к заданному вопросу. UTF-8 была разработана в 1992 году. Почему же до сих пор огромное количество интернет-сайтов работает на национальных кодировках, учитывая, что подавляющее большинство из них были построены или кардинально перестроены когда UTF-8 уже надёжно поддерживалась браузерами? О чём могли думать эти миллионы вебмастеров, если не о скорости загрузки их страниц?

Alkoshenko:
зачем всё так сложно? Почему не придумают одну кодировку на все языки?

Придумали! Она называется: UTF-8. Предвижу следующий вопрос: зачем придумали все остальные кодировки? :-) Дело в том, что раньше (в прошлом веке) компьютеры были слабенькие, каналы связи - тоненькие, ну в общем, всё было плохо, и приходилось экономить. Для того, чтобы можно было показать в одной кодировке все возможные буквы всех земных алфавитов, требуется по 2 байта места на каждую букву. А если задаваться целью показать только два алфавита (русский и английский, например), то достаточно одного байта на букву. Вот и представьте, если когда-то в прошлом веке страница, размером в 1 килобайт грузилась в браузер минуту, а страница в два килобайта - две минуты. Захотели бы вы заставлять пользователя ждать загрузки вашей страницы лишнюю минуту ради того, чтобы у вас была возможность, если когда-нибудь понадобиться, написать словечко по японски?

С кодировками в MySQL важно понимать следующее: кодировка, она же charset, она же (почти) Collation - задаётся на уровне полей. Кодировка таблицы - это кодировка "по умолчанию", которая будет использована при добавлении в таблицу нового поля, если не будет указана его кодировка в явном виде. Так же, кодировка базы данных - это кодировка по умолчанию, которая будет использована в качестве кодировки таблицы, при создании таблицы, если при этом не указывается другая кодировка. Поэтому удобно и правильно - задать нужную кодировку сразу после создания базы данных (пока она пустая). Тогда дальше (при добавлении таблиц) можно будет о ней не задумываться.

Важно чтобы кодировка полей базы данных соответсвтвовала кодировке ваших интернет-страниц. То есть, к примеру, если вы создали базу данных в UTF-8, то следите за тем, чтобы во-первых, ваш текстовый редактор, которым вы редактируете PHP-скрипты, сохранял файлы в этой же кодировке, и во-вторых, чтобы в разметке этих страниц указывалось: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> или <meta charset="utf-8" /> для HTML5.

Ещё есть кодировка сервера, и кодировка соединения. В обычном случае, когда речь идёт об использовании шаредного хостинга, у вас нету возможности установить эти величины по умолчанию. И если они на сервере не установлены в UTF-8, то вам нужно добавить одну строчку кода в то место, где у вас устанавливается соединение с базой данных, то есть примерно после строки, содержащей "mysql_connect", нужно добавить строчку:

mysql_query('SET NAMES utf8');

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

Ayavryk:
Как-то сильно нагружено получится при приличной посещаемости. Мне проще будет вынести это на клиента. Если конечно буду реализовывать.

Уверяю вас, при современных вычислительных мощностях - это ерундовая нагрузка. Если будете реализовывать, я бы советовал запоминать для каждого пользователя номер последнего прочитанного им сообщения в каждой теме. Так сделано в SMF, и он отлично с этим справляется в довольно посещаемых форумах, и это очень удобно для пользователей. Просто "новые сообщения с последнего визита на форум" - мало что даёт. Может я вчера спешил, заглянул в одну темку, а сегодня не спешу, и хочу обстоятельно прочесть всё, что ещё не прочёл, но этот форум мне пометит новыми только темы, изменившиеся со вчера, хоть я может остальные 100 тем не прочёл. Обидно :(

---------- Добавлено 16.07.2012 в 06:45 ----------

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

Когда-то давно, как я упоминал, я активно общался на одном форуме. В те времена не было фейсбука, "одноклассников" и "в контакте", и люди общались в форумах. Многие (в т.ч. я) сидели на форуме часами, переходя из темы в тему. Пока напишешь что-то в одной теме, в другой уже появились новые сообщения. И, к стати, очень удобно было, что такая тема помечалась, хотя у меня длился всё тот же сеанс посещения форума.

Линии интернета были тогда узкими, страницы грузились очень долго. Порой весма раздражало, что приходислось по целой минуте ждать заргузки длинющей страницы, в которой появилось одно новое сообщение в 2 байта: "+1". И тогда я решил написать свой движок форума. Я задумался, и изобрёл две вещи: аякс, и голосования. Знаю, что это звучит смешно, и на самом деле аякс изобрёл конечно не я. Но термин аякс ввели в 2005 году, а дело было примерно в 2003. Тогда не было (хотя может и было, но я не искал) стандартных JS-библиотек для работы с аяксом, да и стандарта для XmlHttpRequest не было, был только проприетарный микрософтофский синтаксис работы с ним, и 99% рынка браузеров занимал IE. Поэтому я написал клиентскую сторону движка под IE, и форум работал только в нём.

Когда посетитель заходил на форум (начинал сеанс), открывал тему, то для него загружались 10 последних прочитанных им сообщений в этой теме + все непрочитанные. Все эти сообщения сохранялись в памяти его компьютера, в формате XML, в течение сеанса. Если он переходил в другую тему, а затем, когда в первой добавлялись новые сообщения, возвращался в неё, то с сервера подгружались только эти новые сообщения, и пользователю снова показывались 10 уже прочитанных (из памяти) + новые (с прокруткой к первому новому).

Что касается голосований, речь идёт не о темах-голосованиях, а о голосованиях за и против каждого сообщения. Сейчас похожая система, с голосованием за коментарии, реализована в большом количестве проектов, начиная с хабра. Но в отличие от коментариев, сообщения форума не сортировались по количеству голосов. Количество проголосовавших за сообщение (как бы, поддерживающих мысль, присоединяющихся), и против (возражающих, протестующих), указывалось в види миниатюрной графической диаграммы (двумя цветными дивами) под каждым сообщением. Это позволяло избавиться от таких неинформативных новых сообщений, как "+1" или "чушь". И если пользователю давали, к примеру, совет, то он мог легко увидеть, сколько людей одобряют этот совет, а сколько протестуют против него. И эти одобрения и протесты делались легко, одним кликом.

К сожалению, у меня не хватило запала переработать этот движок для кросс-браузерности, и я его бросил. Сейчас можно глянуть на него (только в IE) на одном, тоже брошеном, сайтике: http://bela-massage.info/forum/ . Если интересно, попробуйте открыть одну длинную тему, потом вторую, а потом вернуться в первую, и обратите внимание, сколько времени уйдёт на её показ.

post_title будет воспринято как имя поля таблицы, потому что оно заключчено в косые кавычки ``. Можно и без них, главное чтобы без одинарных или двойных ковычек. Для каждой строки будет взято значение из поля post_title, и подставлено вместо строки 'это заменится на заголовок' в тексте, находящемся в поле post_content этой же строки. Советую сделать копию таблицы, попробовать на ней, посмотреть что получится. Если то, что надо, тогда уже запускать на реальной таблице.

Вообще-то можно это сделать и SQL-запросом, без регулярных выражений. Дамп-то в любом случае сделайте, на случай если ошибёмся, и что-то не то заменится.


UPDATE wp_post SET post_content = CONCAT(LEFT(post_content,LOCATE('\n<b><u>Скриншоты:</u></b><br />\n',post_content)),RIGHT(post_content,LOCATE('<br /><br />',post_content,LOCATE('\n<b><u>Скриншоты:</u></b><br />\n',post_content))+12)) WHERE post_content LIKE '%\n<b><u>Скриншоты:</u></b><br />\n%'
Это вырежет из всех записей всё, что находится между указанными вами строками, включая эти строки. Советую сперва сделать копию таблицы, перекинуть туда пару сотен записей, и проверить запрос на них. Если всё получится как задумано, тогда уже палить по чистовику.

В первом, более простом варианте, тоже всё должно работать. Там тоже двумерный массив. Просто с синтаксисом вывода проблемка, как уже K_V_S указал.

Всего: 97