Считывание строк из базы MySQL
Вопрос таков, хочу приделать к сайту такую фичу, чтоб были новости, на главной в сжатом виде, то есть из определюнного поля скажем text считывалось определённое количество строк или симвалов (незнаю как реализовать :devil: ) и выводилось начало теста, а дальше ссылка "Подробней..." где раскрывается полная версия текста новости, кто знает как это сделать дайте плиз PHP код, заранее огромное спасибо! ;)
[phpdoc]substr[/phpdoc]
Функции для работы со строками в MySql:
http://www.codenet.ru/db/mysql/sql.php#Sfunc
(см. LEFT и SUBSTRING)
Никогда не испол...
Не особо красиво. Если выводишь только одну новость – можно воспользоваться регулярными выражениями и показывать первые n "слов". Если необходимо выводить список – использование РВ может снизить производительность. А вообще, идеальным решением будет добавление отдельного поля для аннотаций, либо символа-разделителя в текст новости (затем, опять же, придется пользоваться РВ).
substr редко используют. Иначе, получаются новости типа:
Никогда не испол...
Ага. Я как то на Молоток.ру видел забавное объявление: "Продается ВАЗ2106, не битая, подпроржавевшая на х..."
Оказалось "на ходу" ;)
Я такую задачку решал регами, но вот сейчас в голову пришел такой вариант:
$max = 50;
$i = 0;
$string = "";
$news = "Вопрос таков, хочу приделать к сайту такую фичу, чтоб были новости, на главной в сжатом виде, то есть из определюнного...";
$words = explode(" ",$news);
while (strlen($string)<$max) {
if ($max >= strlen($news)) {
break;
}
if (strlen($string." ".$words[$i])>30) {
break;
} else {
$string = $string." ".$words[$i];
}
$i++;
}
print trim($string)."... >>>";
?>
Набросал "на вскидку", поэтому нужно обработать ещё наверное.
Работать будет долго, регами наверняка лучше (особенно, если строка исходная большая), но мне всё равно понравилось :)
До первого пробела после N .. символов
echo substr($str,0,strpos(substr($str,100)," ")+100);
ВОт проверенный скрипт который выводит либо слова укладывающиеся в 10-0 символов.. не разрывая их..
До первого пробела после N .. символов
echo substr($str,0,strpos(substr($str,100)," ")+100);
Ну вы блин химики. Документацию читать пробовали ???
Вот:
int strpos (string haystack, string needle [, int offset])
echo substr($str,0,strpos($str," ",100));
Ну вы блин химики. Документацию читать пробовали ???
Вот:
int strpos (string haystack, string needle [, int offset])
echo substr($str,0,strpos($str," ",100));
Да, это конечно всё круто, но как это применить?Код такой:
ConnectDB();
$result = mysql_query("SELECT * FROM news ORDER by id DESC LIMIT 0,5");
print "<table width=\"100%\">";
while($row = mysql_fetch_array($result)){
$title = $row['title'];
$date = $row['date'];
$text = $row['text'];
$author_mail = $row['author_mail'];
$author = "".$row['author']."";
print "<tr><td> $title</td></tr>\n
<tr><td> $text</td></tr>\n
<tr><td>Добавлено: $date - Автор $author</td></tr>";
}
print "</table>";
mysql_close();
?>
Так вот, помогите это тут сотворить...
ConnectDB();
$result = mysql_query("SELECT * FROM news ORDER by id DESC LIMIT 0,5");
print "<table width=\"100%\">";
while($row = mysql_fetch_array($result)){
$title = $row['title'];
$date = $row['date'];
$text = $row['text'];
$author_mail = $row['author_mail'];
$author = "".$row['author']."";
print "<tr><td> ".$title."</td></tr>\n
<tr><td> ".substr($text,0,strpos($text," ",50))."</td></tr>\n
<tr><td>Добавлено: ".$date." - Автор ".$author."</td></tr>";
}
print "</table>";
mysql_close();
?>
Ещё вопрос схожий, как сделать, чтобы такое же начало считывалось из HTML файла :devil: :???:
$base = $_SERVER['DOCUMENT_ROOT'].'/docs/';
ConnectDB();
$result = mysql_query("SELECT * FROM site_documents WHERE id='$page'");
print "<table width=\"100%\">";
$row = mysql_fetch_array($result);
$path = $row['path'];
$main_path = $base$path.'document.htm';
$main = readcontent($main_path);
print "<tr><td>$main</td></tr></table>";
mysql_close();
?>
Помогите написать код...
Огромное спасибо! Всё работает поставил 150 символов, на моём сайта - это 3 строчки :P
Ещё вопрос схожий, как сделать, чтобы такое же начало считывалось из HTML файла :devil: :???:
-рег. выражения+мозги
А по поводу твоего первого вопроса почитай: http://www.artlebedev.ru/kovodstvo2/sections/98/
-рег. выражения+мозги
А по поводу твоего первого вопроса почитай: http://www.artlebedev.ru/kovodstvo2/sections/98/
Это не ответ, и твой линк ничего не демонстрирует, если нечего сказать лучше промолчи, вундеркинд блин :!!!: :roll:
Это не ответ, и твой линк ничего не демонстрирует, если нечего сказать лучше промолчи, вундеркинд блин :!!!: :roll:
Нет, это ответ. Тебе уже все разжевали и в рот положили. Глотать уж самому придется.
Нет, это ответ. Тебе уже все разжевали и в рот положили. Глотать уж самому придется.
Спасибо, Майк!
Спасибо, Майк!
Я уже и сам понял
$base = $_SERVER['DOCUMENT_ROOT'].'/docs/';
ConnectDB();
$result = mysql_query("SELECT * FROM site_documents WHERE id='$page'");
print "<table width=\"100%\">";
$row = mysql_fetch_array($result);
$path = $row['path'];
$main_path = $base$path.'document.htm';
$main = readcontent($main_path); //readcontent читает файл
print "<tr><td>".substr($main,0,strpos($main," ",150))."</td></tr></table>";
mysql_close();
?>
function text_chop($text_to_chop, $chp){
if ($chp){
$chop = $chp;
}
else{
$chop = '300';
}
$cnt = strlen($text_to_chop);
$chopped_text = substr($text_to_chop, 0, $chop);
$chopped_text = explode(" ", $chopped_text);
$element = count($chopped_text);
if ($cnt < $chop){
return $text_to_chop;
}
else{
$element = $element-1;
$chopped_text = array_slice($chopped_text, 0, $element);
foreach($chopped_text as $k=>$v){
$fuck .= " $v";
$fuck .='... More';
}
return $fuck;
}
}
//Makes a chop of whole text END
может это слегка геморно, но работает
Ну вы блин химики. Документацию читать пробовали ???
Вот:
int strpos (string haystack, string needle [, int offset])
PHP:--------------------------------------------------------------------------------
$str="your loooong string form DB";
echo substr($str,0,strpos($str," ",100));
В документации есть int strrpos ( string haystack, char needle)
Returns the numeric position of the last occurrence of needle in the haystack string.
Тобишь возвращает позицию последнего встретившегося символа (в нашем случае, пробела).
Так вот, сначала читаем с базы столько символов, сколько хотим (ни в коем случае не всю новость - нормальная новость может и на несколько kb выйдти, а нам нужно то всего 100-200 символов):
$q = mysql_query("SELECT LEFT(newstext,150) AS _txt")or die(mysql_error());
Затем, обрезаем полученный заголовок до последнего пробела:
list($title) = mysql_fetch_array($q);
$title = substr($title,0,strrpos($title,' '))."...more.";
С этим проще уже наверное некуда.
Теперь с хтмл-файлике - также не получится, т.к. в начале в хтмл-файлике - тэги. По-хорошему тебе нужно либо полностью игнорировать все тэги, либо начинать считывать после тэга <BODY> . В обоих случаях есть проблемы: в первом - первое, что ты считаешь, скорее всего будут скрипты, стили и прочая шняга в head-ере хтлмки. Во втором случае - могут попасться всякие скрытые слои, опять же, скрипты и т.п.
В общем, гиблое это дело.
Теперь с хтмл-файлике - также не получится, т.к. в начале в хтмл-файлике - тэги. По-хорошему тебе нужно либо полностью игнорировать все тэги, либо начинать считывать после тэга <BODY> . В обоих случаях есть проблемы: в первом - первое, что ты считаешь, скорее всего будут скрипты, стили и прочая шняга в head-ере хтлмки. Во втором случае - могут попасться всякие скрытые слои, опять же, скрипты и т.п.
В общем, гиблое это дело.
Так значит посоветуешь вообще этой ерундой не страдать?! Может есть какой нить другой способ более реальный?
Так значит посоветуешь вообще этой ерундой не страдать?! Может есть какой нить другой способ более реальный?
Есть!
Содержимое тэга <TITLE></TITLE>
В нём как раз содержится краткое описание сайта. Ещё можно проверить META-тэги.
Собственно, поисковики так и делают.