Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
Наткнулся на топик "Вопрос по PHP". почитал, куча мусора да и там тема конкретная. Этим топиком предлагаю организовать централизированное обсуждение не только по самому PHP, но и о работе с базами данных, HTML, XML и.т.д, тоесть по всему, что сопутствует разработке более-менее большого проэкта.
P.S. Сам являюсь проф. разработчиком, имею довольно неплохой опыт, так что надеюсь смогу помочь.
Прошу, что бы в топе небыло лишнего флуда, а так же идиотских вопросов. По наиболее частым и насущьным составлю FAQ, так же добавлю примеры из своего опыта работы.
FAQ
Итак, PHP. Данный термин, исторически, имеет 2 расшифровки - Personal Home Pages - изначальное название, и современное - PHP: Hypertext Preprocesor, что более точно отображает его назначение.
Сфера примениени в данный момент в основном ограничевается WEB девелопингом, хотя последние версии имеют уже и консольную реализацию для написания системных скриптов, аля замена Perl. Однако он и разрабатывался специально именно для создания WEB проэктов, поэтому он имеет огромное кол-во присущех только ему возможностей и особенностей. В этом смысле нету больше ниодного похожего на PHP языка.
На данный момент выделяются две ветки PHP - PHP4 и PHP5. Основное их различие в версии движка, который они имеют в своей основе. В чём же само различие?
PHP4 в силу того, что имел старую версию Zend Engine не был в состоянии скольк либо серьёзно поддерживать ООП. Максимум что он мог, это поддержка классов, наледование. На этом его возможности исчерпывались.
PHP5 же имеет в своей основе новую версию Zend Engine 2.0, который является полностью ООП орентированным, что позволяет ему поддерживать практически все основные принципы ООП а так же была включена новая для PHP консрукция try {} catch {} для обработки ошибок, что не может не радовать.
Хочу сразу умерить пыл тех, кто думает, что PHP лёгкий для изучения... Увы, но реально как орех раскусить его с ходу могут люди, понимающие что такое программирование, обычно имевшие какой-то определённый опыт до PHP. Прочим же советую набратся терпения, читать литературу и пробовать. Чтение же документации обязательно всем на официальном сайте PHP, благо большая часть документации переведена на русский язык:
http://www.php.net/manual/ru/ Так же вообще, советую начать вот с этого:
http://phpfaq.ru/ - для начинающих прекрасное введение. К прочтению обязательно.
К прочтению обязательны все разделы до раздела "Справочник функций", в противном случае даже можете не задавать вопрос, всёравно вас отошлют туда, поскольку лучше мануала никто не объяснит. Мануал строили очень грамотные люди и непонять способен только дурак. Обращайтесь, если вы что-то не поняли уже после прочтения (всяк бывает )
Кстати, по этому мануалу очень многие обучаются PHP как по книге, и большая часть успешно.
Что же нам необходимо для работы с PHP? Минимум - WEB сервер Apache, сам РНР и текстовой редактор. Первое качается на http://www.apache.org , второе на http://www.php.net/downloads.php . Третье выбор вкуса, но я рекомендую один из самых лучших редакторов, создателями которого кстати являются росияне. К тому же для жителей СНГ регистрация бесплатна. http://www.ankord.com/ru/ Описаний как установить Apache + PHP просто немеренно, посему я тут выкладывать пока это не буду. Если уж очень плохо будет, тогда напишу.
Обычно с PHP все начинающие использую так же базу данных MySQL : http://dev.mysql.com . Она довольно проста в использовании и не имеет многих наворотов действительно крутых баз данных, но зато она быстрая и по большей части является намного более лучшим выбором для любого сайта, где нету сложной структуры и зависимостей (хотя лично я уже перехожу на более продвинутые продукты, PostgreSQL к примеру, но и проэкты соответственно становятся более сложными ).
Ну вот пожалуй всё. Остальное пожайлуста читать в мануале, поскольку там всё прекрасно описанно. О непонятных вопросах спрашивайте, буду отвечать.
Из книг посоветую прикупить что-нить из самоучителей от "Питера" или "BHV", и желательно как можно новее, поскольку пракически везде идут старые данные, а последнее время кое что поменялось, и это надо учитывать. Так что да поможет вам мануал, аминь!
Ниже ответы на наиболее частые вопросы, а так же камни преткновения многих начинающих.
1). Самая распространённая ошибка новичков является непонятки с register_globals. По большей части это вызвано тем, что в интернете очень много старого обучающего материала.
возмёи пример, вы вызываете ваш скрипт так: http://localhost/myscript.php?id=3 Правильно получить значение id так:
Код:
Доступ к данным при использовании метода POST, обычно используемого при отправке форм является аналогичным, за исключением того, что применяется массив $_POST
Тему прикрепил. Отредактировано модератором: Daemon. Дата: 20.07.2006 13:58
Последний раз редактировалось _Psih 22.07.2005 19:05, всего редактировалось 3 раз(а).
Статус: Не в сети Регистрация: 12.12.2004 Откуда: РБ
_Psih писал(а):
Самая распространённая ошибка новичков является непонятки с register_globals
Да уж, достойное начало для фака! Может, лучше начать с того, что это, для чего, чем реализуется, сцылки на учебники и т.д. и т.п. Я как раз задумал в этом направлении кругозор расширять.
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
zomba Ща сделаем Я караз ждал, пока кто-нить нужную идею подаст, а то не знал с чего начать Кстати, с register_globals парят мозги почти каждый день, посему и вписал
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
virus писал(а):
_Psih по личным причинам ненавижу кое-кого из авторов http://phpfaq.ru/ но что касается того как писать FAQ эти ребята профессионалы, и с их факом надо ознакомиться обязательно (возможно после его прочтения отпадёт даже желание изобретать велосипед)
надо будет глянуть, хотя если честно, вряд ли для себя я что-то новое прочитаю Да и php.net тож рулит
Добавлено спустя 7 минут, 52 секунды: Начал читать этот http://phpfag.ru ... Блин, ребята молодцы, для ламеров и не очень понимающих суть самое то! Парням, написавшим это респект Всё, любого идиота с идиотским вопросом сперва туда, пусть читает, потом уже спрашиват. Добавляю ссылочку в FAQ.
Народ, помогите : Делаю сайт на ПХП, а так как я его плохо знаю столкнулся с такой проблемой
У меня есть Шаблонная страница, и вроде всё нормально, но надо так чтобы на индексной странице
вверху была флэшка, а на всех остальных это был любой *jpg. Сами страницы вставляются в центр,
остальное шаблон...
_________________ Весь мир игра, а мы вней монстры...
Последний раз редактировалось Mutant-13 07.08.2005 18:47, всего редактировалось 2 раз(а).
Народ, помогите : Делаю сайт на ПХП, а так как я его плохо знаю столкнулся с такой проблемой У меня есть Шаблонная страница, и вроде всё нормально, но надо так чтобы на индексной странице вверху была флэшка, а на всех остальных это был любой *jpg. Сами страницы вставляются в центр, остальное шаблон...
проверяй имя скрипта, $_SERVER['SCRIPT_NAME'] помоему, если имя скрипта index.php - вставляй флешку, в противном случае JPEG'ки
У меня возникла пролблема:
база:
id-----Name-----Full-----date
1-----Name1---Tetatet--2005
2-----Name2---Tetatet2--2005
3-----Name3---Tetatet3--2005
Таблица приблизительно такого содержания.
Не могли бы объяснить, как сформировать ссылки с именами Name1,Name2,Name3, ведущих на страници с полным текстом (Tetetet)... большое спасибо... мануалы прочитала, но вопрос остался... Знаю как формировать ссылки, а как объяснять шаблону какую новость брать - нет...
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
Всё просто, на странице, где у нас список новостей со ссылками на них делаем выборку новостей из базы, и строим линк типа:
<a href="domain.com/shownews.php?id=1">Name1</a>
<a href="domain.com/shownews.php?id=2">Name2</a>
и.т.д.,
при нажатии на ссылку просто делаем выборку по id и выводим новость.
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
$sql = "SELECT FROM table WHERE id = '".addslashes($_POST['id'])."'";
Я делаю это так, addslashes нужен для того, что бы не смогли хакнуть базу.
Да, обычно предшествует проверка является ли id числом.
Можно так же проверить сперва, есть ли такая запись в базе, но вообще если выборка будет пустой, значит нету. Вообщем это уже твоя задача обработать ошибку как надо
_Psih Большое тебе спасибо. Не смогла ответить сразу, прости если обидела...
У меня появилось еще пару вопросов, надеюсь ответите:
1. Есть база, как определить и вывести значение максимального ID (auto ink)
2. На вашем сайте заметила интересный способ отображения новостей. Точнее такой способ присутствует на 70% сайтов, которые я посещаю. А именно: Каждая новая новость имеет у вас вид, как www.overclockers.ru/hardnews/19689.shtml. У меня при использовании базы получается выводить только как localhost\news?id=123. Тоесть обязательно присутствует ?id=ID НОВОСТИ. Вопрос, как этого избежать и сделать как у цивилизованных людей.
3. Собираюсь делать гостевую на базе, а не на файлах. Столкнулась с проблемой: Заголовки имени, времени и пр. отображаются корректно, а текст вводимый в textarea нет. У меня стоит ограничение на все в 250 символов - VarChar(250).
Прекрасно понимаю, что ответы могут быть 1000 и в 10000 раз больше и varchar тут не подходит. Вопрос, как заставить textarea отображаться корректно.
4. Опять к новостям... Есть id, заголовок и сам текст(вопрос 3).
на странице новости все они должны отображаться по 10 штук. То есть если новостей более 10, то появляется ссылка на вторую страницу, отображающую с 11 новости до 20. и так до бесконечности. Помогите... Порядок id может быть не постоянным (при удалении новости) - 1,2,3,5,8,12,659 ...
5. Есть 4 флага(name=one,name=two...). Cкрипт должен принять их значения $one=$_POST[one];... и сформировать переменную следующего класса: $one / $two / $three / $four . Проблема в том, чо неизвестно будет ли переменная пуста или нет и между ними должен быть только один слеш (/)...
Огромное спасибо...
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
ElMory 1). Элементарно, выполнить запрос к базе:
Код:
SELECT MAX(id_field_name) FROM table;
2). Тут посложнее будет, в основном это используется либо mod_rewrite (тут всё довольно сложно), либо просто есть физические фаилы, расположенные в нужных папках. Каждая новость - самостоятельная HTML страница.
3). Текст надо храниьть не в Varchar, а в TEXT. Их 4 вида: TINYTEXT - до 255 символов TEXT - до 65 килобайт текста MEDIUMTEXT - до 16 мегабайт текста LONGTEXT - до 4 гигабайтов текста http://dev.mysql.com/doc/mysql/ru/stora ... ments.html Самое целесобразное я считаю это тип TEXT.
4). Тоже довольно просто, только требуется немного смекалки и знания SQL. Ограничить выборку можно с помощью SQL оператора LIMIT:
_Psih Сенькью, сенькью, сенькью...
5.
Поясняю. Код:
<form путь к скрипту и тд и тп.><input type=sheckbox name=one value='one'>
<input type=sheckbox name=one value=two>
<input type=sheckbox name=one value=three>
<input type=sheckbox name=one value=four>
</form>
Скрипт забирает их значения и выводит строчку. 1 если отметить one и two: "one / two". 2 если two и four: "two/four".
Проще говоря, между значениями должен ставить "/" и этих слешей между ними не более одного.
4.
вот как узнать с какой позиции, если id новости не постоянен: 1,2,5,9,124,54545 - ?
mod_rewrite (тут всё довольно сложно) Я девушка боевая - к трудностям привыкшая, баумановка не пту...
И можно поподробней немножко?
Mutant-13 поставь на главной стр. переменную типа $info=homepage;
а на шаблоне проверяй if ($info==homepage) {вставляешь флешку} else {echo"<img src= >";};
Устроит?
Member
Статус: Не в сети Регистрация: 28.03.2005 Откуда: Латвия, Рига
ElMory писал(а):
_Psih Сенькью, сенькью, сенькью... 5. Поясняю. Код: <form путь к скрипту и тд и тп.><input type=sheckbox name=one value='one'> <input type=sheckbox name=one value=two> <input type=sheckbox name=one value=three> <input type=sheckbox name=one value=four> </form> Скрипт забирает их значения и выводит строчку. 1 если отметить one и two: "one / two". 2 если two и four: "two/four". Проще говоря, между значениями должен ставить "/" и этих слешей между ними не более одного. 4. вот как узнать с какой позиции, если id новости не постоянен: 1,2,5,9,124,54545 - ?
mod_rewrite (тут всё довольно сложно) Я девушка боевая - к трудностям привыкшая, баумановка не пту... И можно поподробней немножко?
по поводу чекбоксов..., у них должны быть разные имена, иначе высылается значение последнего, так что лучше сделать так:
<form ...>
<input type="checkbox" name="mycheckbox1" unchecked>
<input type="checkbox" name="mycheckbox2" unchecked>
<input type="checkbox" name="mycheckbox3" unchecked>
<input type="checkbox" name="mycheckbox4" unchecked>
</form>
а потом циклом проверять, установленны ли переменные mycheckbox1... mycheckbox4 и соответственно делать IF, генерирующий строку.
А новости, постраничный вывод. Сперва выбираем LIMIT 0, 10 к примеру, при переходе на 2-ю страницу делаем выборку LIMIT 10, 10, след. страница LIMIT 20, 10 и.т.д. Так же можно посчитать общее кол-во записей ( SELECT count(anyField) FROM table), отсюда вычислить кол-во страниц которые есть, и сгенерировать ссылки на соответствующие страницы.
Ну по mod_rewrite советую просто поискать информацию в и-нете. Кратко говоря - эта технология позволяет делать ссылки типа http://domain.com/news/today/15/ , а в реальности это единственный скрипт, index.php на который сервер перенаправляет все запросы Вообщем смотри, разбирайся, я сам не сразу въехал Будут конкретные вопросы - спрашивай.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения