|
|
|
|
|
для: Лена
(27.12.2007 в 14:19)
| | В шапке форума есть ссылки на книги, авторами которых явлются создатели этого форума: М. Кузнецов, И. Симдянов. Среди этих книг, есть и книга в которой описан пример создания сайта. Книги имеют вложенный CD c примерами. Но ведь каждую идею, которая вас может посетить, в книге не опишут, потому как идей (тонкостей) гораздо больше чем функций в языке. :) Главное ведь не выучить наизусть функции, а представлять способы решения ваших задач с помощью функций и конструкций языка. | |
|
|
|
|
|
|
|
для: sim5
(27.12.2007 в 12:19)
| | Спасибо, все получилось.
Согласна, что многого не знаю, но желание развиваться не пропало. Начинать с более простого - с чего? С учебников? Как мне показалось, основной недостаток учебников по программированию - они не имеют комплексного прикладного характера, то есть дается отдельный учебник по РНР, по MySQL, но ведь на странице эти языки могут сочетаться в разных вариациях, почему не существует учебника, например, описывающего пошагово, как создать динамичный сайт с нуля, какими средствами это сделать и почему не приводятся оптимальные варианты решений? Поэтому и бьюсь я, как рыба об лед - много читала, разбирала скрипты, но как дошла до конкретного (создание сайта), сразу растерялась. Может, вы подскажете, где взять дельный учебник? Я имею ввиду учебник - использование РНР с конкретными примерами - например, как было у меня (вытянуть один абзац из базы, разукрасить текст и т.д.)
Поэтому и пришлось мне пойти на форум, где проблема решается с ходу: написал-сделал-получилось. Не получилось - найдутся верные друзья-товарищи :-)))
Сложно это все объяснить...
Честно говоря, удивляюсь вашему терпению и выдержке, другой бы на вашем месте отмазался бы какими-то хитроумными фразами и я бы осталась с тем, чем была.
Еще раз огромное человеческое спасибо. | |
|
|
|
|
|
|
|
для: Лена
(27.12.2007 в 11:26)
| | Вы где такой синтаксис цикла FOR увидели? В ваших примерах вы получаете одну запись из таблицы, и из полученного текста берете первый абзац, потому выводить собственно в цикле нечего. Но если выводить каждый абзац, разделяя его стилями, то простой пример:
<?
//это, например, ваш HTML текст
$text = '<P CLASS="myclass">Text1 <img src="image1.jpg" /></P>
<P CLASS="myclass">Text2 <img src="image2.jpg" /></P>
<P CLASS="myclass">Text3 <img src="image3.jpg" /></P>
<P CLASS="myclass">Text4 <img src="image4.jpg" /></P>';
//разбиваем его на массив по разделителю </P>
$text = explode('</P>', $text);
//посмотрим что мы получили в масиив
print_r($text);
//заметьте, что закрывающих тегов параграфа </P>
//элементы массива не содержат
//он вырезан функцией explode, как собственно
//был бы вырезан любой другой указанный разделитель
//а так же обратите внимание,
//что последний элемент массива пустой
//подумайте почему так получается
//просмотрели и удалили print_r($text);
//а далее вывод всего
//для простоты встраиваем стиль в страницу
print '<STYLE TYPE="text/css">
.myclass {color : #669900;}
.myclass2 {color : #FF3300;}
</STYLE>';
//выводим в цикле абзацы
//размер цикла определяется
//числом элементов массива $text
//с вычетом 1, так как последний
//элемент массива пустой и нам не нужен
for ($i=0; $i<count($text)-1; $i++) {
if ($i & 1) //если итерация цикла нечетная
//выводим класс параграфа по умолчанию
print $text[$i]."</P>"; //добавляя закрывающий тег
else //иначе
//заменяем имя класса параграфа
print str_replace("myclass", "myclass2", $text[$i])."</P>";
}
?>
|
Укажите любую произвольную картинку и посмотрите, все будет работать. Закрывающий тег параграфа </P> можно и не выводить, но это есть не хорошо.
PS. Вы много не знаете, вам видимо надо с более простого начинать. | |
|
|
|
|
|
|
|
для: sim5
(26.12.2007 в 15:31)
| | В код добавила:
for ($i=0; $i<10; $i++):
if($i%2==0):
$newtext = str_replace("myclass", "myclass2", $text);
endif;
endfor;
print $newtext;
|
В каскадную таблицу стилей style.css добавила:
.myclass {color : Yellow;}
.myclass2 {color : #ADFF2F;}
|
Подключила style.css в index.php:
<link rel="stylesheet" href="style.css" type="text/css">
|
Выводится не в цвете, вот что появляется на странице:
<P id="head1" ">НЕ КУПИТЕСЬ НА РАСПРОДАЖУ
А дальше - 2 раза текст первого абзаца, без картинки, хотя у меня в базе прописано:
<img src="./resize-mims05-1-_tuning_191.jpg" width=150px height=100px alt="Авто" align="left">
Почему не получается? | |
|
|
|
|
|
|
|
для: Лена
(26.12.2007 в 13:55)
| | Допустим, у вас есть индексная страница, и она обрабатывает и описывает код только тот, что будет помещен в результате между тегами <BODY></BODY> (включая и их, может быть). А вот шапка страницы у вас формируется, например, скриптом head.php, и в этом скрипте у вас прописано (к примеру):
<?
print "<HEAD><TITLE>$head<TITLE>..."; // и прочее
//этот файл вы подключаете к индексной странице
include("head.php");
//по умолчанию у вас заголовок определен как
$head = "Мой сайт";
//а вот после того как вы будете делать запросы к базе
//и получать заголовки запрашиваемых страниц
//заголовок страницы будет изменяться
?>
|
Вы в таблице держите заголовок страницы и ее текст в отдельных полях, а получаете их сразу - и то, и другое одной функцией, присваивая результат переменной $text:
<?
$text = mysql_fetch_row($result);
?>
|
Я вам давал ссылку, где можно читать и изучать MySQL, и если вы читали, то должны знать, что функция mysql_fetch_row() извлекает один ряд данных из результата, ассоциированного со специфицированным идентификатором результата. Ряд возвращается как массив. Каждый результирующий столбец хранится как смещение массива, начиная со смещения 0.
Поэтому $textх[0] будет содержать значение первого поля таблицы которое указано в запросе, $textх[1] второе и т.д., если полей больше. У вас первым полем в запросе стоит заголовок страницы, потом текст, поэтому $textх[0] вернет вам заголовок текста. Далее это значение (для примера), указывается переменной $head для включения ее в head.php и вывода на странице.
Затем вы получаете текст ($textх[1]), абзацы которого у вас заключены в теги прагарафа <P></P>. Вам уже более не нужен первоначальный массив $textх (вы забрали из него значение заголовка), поэтому, этому значению вы присваиваете новый массив, который получается в результате разбиения $textх[1] функцией explode() по разделителю </P>. После этого, $textх[0] будет содержать текст первого абзаца на странице, но без закрывающего тега </P>, так как он вырезается в результате работы функции explode(). А так как вам более не нужен массив текста, а его первое значение, то мы и использовали переменную $text, просто переназначив ее значение, добавив недостающий тег </P>:
$text = $text[0]."</P>";
Конечно, если эта переменная будет требоваться, то следует использовать другие переменные, или просто в конструкции вывода производить операции, не присваивая их результата какой либо переменной.
Четное это 0, 2, 4... нечентное 1,3, 5... Если вы проходите цикл, например, от 0 до 10, то можете узнать какова у вас итерация в данный момент. Например в цикле:
for ($i=0; $i<10; $i++) можно проверять значение $i либо делив ее по модулю, либо логической операцией И, результат которой вам и будет указывать четный или нечетный шаг на данный момент у цикла. | |
|
|
|
|
|
|
|
для: sim5
(25.12.2007 в 16:06)
| | Не понятна строка
из вышеприведенного кода. Почему $text[0], если это заголовок, ведь сам текст статьи у нас в $text[1] и делили мы на абзацы $text[1], значит, восстановить тэг </P> нужно в $text[1]?
Подскажите, как оформляется четная и нечетная итерация цикла. Приведите, пожалуйста, только шаблон, код я хочу сама попробовать написать | |
|
|
|
|
|
|
|
для: Лена
(25.12.2007 в 14:54)
| | Вы опять пытаетесь сделать все наоборот - переменную, которую еще не определили, разбиваете на массив:
$text = explode('</p />', $text);
причем не правильно, закрывающий тег параграфа пишется так </p>, а потом только ее определяете:
$text=mysql_fetch_row($result).
Вы запросом получили одну строку записи, и цикла не требуется.
<?
if(mysql_num_rows($result) < 1 ) die('В таблице "txt" нет ни одной записи');
else {
//получаем запись - читать о mysql_fetch_row
$text = mysql_fetch_row($result);
//получаем заголовок рубрики
//если его требуется вставить также в заголовок страницы
//в тег <TITLE>$title</TITLE>, например, то сохраним его
//в переменную $title для подключаемого скрипта шапки страницы
$title = $text[0];
//выводим заголовок на страницу, например в теге H1
print "<H1>".$title."</H1>";
//получаем и разбиваем текст статьи на абзацы
//следить за тегом параграфа, он должен быть прописан
//в верхнем регистре - </P>
$text = explode("</P>", $text[1]);
//после explode, закрывающий тег параграфа </P> теряется
//восстановим его, и теперь $text уже не массив
$text = $text[0]."</P>";
//выводим первый абзац рубрики на страницу
print $text;
//======
//если, например, параграф рубрик имеет имя класса myclass
//и при получении нескольких записей (страниц)
//теперь уже в цикле, пулучив текст первого абзаца,
//с помощью str_replace меняем имя класса каждую
//четную итерацию цикла на myclass2
$newtext = str_replace("myclass", "myclass2", $text);
//а нечетной не трогаем,
//тогда, если для первого класса шрифт, например, черный,
//а для второго красный, то при выводе они будут черодоваться
print $newtext;
}
?>
|
| |
|
|
|
|
|
|
|
для: sim5
(25.12.2007 в 11:53)
| | Не получается. Выводится весь текст+заголовок:
<?php
mysql_connect('localhost', 'lena', 'alena') or die( 'Соединение не установлено' );
mysql_select_db('news') or die( 'База данных не выбрана' );
$sql = "SELECT `head`, `text` FROM `txt` WHERE id = 4";
if( !($result = mysql_query($sql)) )
{
die( 'Failure: ' . mysql_error() . ', File: ' . __FILE__ . ', Line: ' . __LINE__ );
}
if(mysql_num_rows($result) < 1 )
{
die( 'В таблице "txt" нет ни одной записи' );
}
$text = explode('</p />', $text);
while($text=mysql_fetch_row($result)) {
echo $text[0], $text[1];
}
?>
|
А нужно заголовок+1 абзац... | |
|
|
|
|
|
|
|
для: Лена
(25.12.2007 в 10:40)
| | Ошибка №1. Если у вас встроенный стиль, то его надо обрамлять в теги <STYLE>:
<STYLE TYPE="text/css">
#head1 {
font-family : "Courier New";
color="blue";
font-size : "larger";
}
.hypertext {
text-align : justify;
background : White;
font-family : "Times New Roman";
font-size : medium;
letter-spacing : normal;
line-height : normal;
text-indent : 5px;
color : Olive;
}
</STYLE>
|
Ошибка №2. Имя класса hypertext в параграфе должно быть прописано без точки. Эта точка приписывается в таблице стилей и по просту понимается как P.hypertext.
Если таблица стилей находится в отдельном подключаемом файле, то в этом файле прописаны только стили, без обрамления тегами <STYLE></STYLE>. В этом случае в заголовке страницы между тегами HEAD, нужно указать (подключить) файл стилей, так:
<link rel="stylesheet" media="all" href="path/file.css" type="text/css">
где path/file.css путь и имя файла стилей. Файлы стилей имеют расширение CSS.
Чтобы получить и заголовок и текст интересующей вас записи, то нужно указывать соответсвующие поля таблицы в запросе, например:
$sql = "SELECT `field1`, `field2`, `field2` FROM `txt` WHERE id = 4";
или
SELECT * ....
В общем вам надо читать документацию MySQL.
У вас каждый абзац заканчивается тегом </P>, и в абзаце же находится изображение, поэтому лучше (это быстрее), воспользоваться explode('</P>',$text); Берете первый элемент полученного массива, выводите его с добавлением в конце </P>. | |
|
|
|
|
|
|
|
для: sim5
(24.12.2007 в 17:35)
| | Попробовала создать в таблице еще одно поле - поле заголовка head
Теперь я могу вытянуть из базы только заголовок:
<?php
mysql_connect('localhost', 'lena', 'alena')
or die( 'Соединение не установлено' );
mysql_select_db('news')
or die( 'База данных не выбрана' );
$sql = "SELECT `head` FROM `txt`
WHERE id = 4";
if( !($result = mysql_query($sql)) )
{
die( 'Failure: ' . mysql_error() .
', File: ' . __FILE__ . ', Line: ' .
__LINE__ );
}
$text = mysql_result($result, 0);
print $text;
?>
|
В таблице в поле head написала так:
<P id="head1" ">НЕ КУПИТЕСЬ НА РАСПРОДАЖУ</P>
В файле между <HEAD> и </HEAD>прописала вот что:
#head1 {
font-family : "Courier New";
color="blue";
font-size : "larger";
}
Но заголовок вытягивается без нужного цвета и размера. Почему?
И как теперь с помощью регулярного выражения вытянуть 1 абзац? В таблице я оформила его как
<P class=".hypertext ">Часто магазины
прибегают ко всяким уловкам, чтобы
избавиться от неходового товара. Одной из
таких уловок и является хорошо знакомая
нам распродажа. Раскроем вам несколько
секретов магазинных хитростей, чтобы вы
смогли обуздать свои хватательные рефлексы.
<img src="./resize-mims05-1-_tuning_191.jpg"
width=150px height=100px alt="Авто"
align="left"></P>
|
В каскадной таблице написала:
.hypertext {
text-align : justify;
background : White;
font-family : "Times New Roman";
font-size : medium;
letter-spacing : normal;
line-height : normal;
text-indent : 5px;
color : Olive;
}
Как одновременно вытянуть и заголовок, и 1 абзац? | |
|
|
| |
|