Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Случайная цитата под названием сайта, вот к чему пришел, но чето точно пропустил
exotica  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Code noobing... :))
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 740
Пользователь №: 36599
На форуме: 4 года, 2 месяца, 13 дней
Карма: 22

Не курю:
4 года, 2 месяца


Думал над цитатами и пришел к такому варианту что их может быть много и вроде бы и все охото видеть. Чтож дурная голова рукам покоя не дает и собственно накостылял такой вариант.
<?php
error_reporting(E_ALL);

$savedquotes = array(
0 => 'quote #1',
1 => 'quote #2',
2 => 'quote #3',
3 => 'quote #4',
4 => 'quote #5',
);

$quotescount = count($savedquotes) - 1;
$quotenumber = rand(0, $quotescount);


echo htmlspecialchars($savedquotes[$quotenumber]);
?>

Все здорово, все работает. Но каждый раз лезть в скрипт чтоб добавить или удалить цитату как то не круто, поэтому возникает вопрос откуда лучше дергать цитаты из .txt файла или из БД. Вариант с БД мне лично нравится больше т.к. мне привычней работать с ней чем с файлами. Но опять же это лишний запрос к БД при каждом(!) переходе или обновлении страницы на сайте. Но начну я все же с него, чисто интереса ради:
<?php
error_reporting(E_ALL);

$link = mysqli_connect(
'localhost',
'root',
'',
'storage');
if (!$link) {
printf("Невозможно подключиться к базе данных. Код ошибки: %s\n", mysqli_connect_error());
exit;
}

$SqlQuery = 'SELECT `id`,`text` FROM `quotes`';
$QueryResult = mysqli_query($link, $SqlQuery);

$quotes = array();
while($ResultArray = mysqli_fetch_assoc($QueryResult))
{
$quotes[] = $ResultArray['text'];
}

$quotescount = count($quotes) - 1;
$quotenumber = rand(0, $quotescount);


echo htmlspecialchars($quotes[$quotenumber]);
?>

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

Ладно продолжим. Хранение в .txt файле. Кроме как использовать serialize() я ничего не придумал и запихнул в .txt файл ранее запрошенный из базы массив:
  $file = 'quotes.txt';
$content = file_get_contents($file);
$content .= serialize($quotes);
file_put_contents($file, $content);

ну а дальше дело за малым, собственно достать посчитать выбрать случайную цитату и вывести:
<?php
error_reporting(E_ALL);

$file = 'quotes.txt';
$content = file_get_contents($file);
$quotes = unserialize($content);

$quotescount = count($quotes) - 1;
$quotenumber = rand(0, $quotescount);

echo htmlspecialchars($quotes[$quotenumber]);
?>


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


--------------------
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Получать цитаты на клиенте со стороннего сервиса.
Например, http://forismatic.com/ru/api/ .
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
exotica  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Code noobing... :))
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 740
Пользователь №: 36599
На форуме: 4 года, 2 месяца, 13 дней
Карма: 22

Не курю:
4 года, 2 месяца


поправлюсь. стороннее api меня не интересует. Нужен набор цитат хранящихся у меня


--------------------
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Ну в Google Spreadsheets храни. Они умееют json отдавать. Разбирай на клиенте.

А вообще целый одни запрос(!) лишний. Ты на бесплатном тарифе у хостингера хостишься?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5611
Пользователь №: 35718
На форуме: 4 года, 5 месяцев, 9 дней
Карма: 173




Цитата (exotica @ 27.04.2016 - 21:37)
$SqlQuery = 'SELECT `id`,`text` FROM `quotes`';

за такие запросы надо ноги выдёргивать...


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
redreem  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 4284
Пользователь №: 29002
На форуме: 5 лет, 8 месяцев, 29 дней
Карма: 147




Цитата (Valick @ 28.04.2016 - 00:00)
Цитата (exotica @ 27.04.2016 - 21:37)
$SqlQuery = 'SELECT `id`,`text` FROM `quotes`';

за такие запросы надо ноги выдёргивать...

мне кажется это безрассудным, не зная наверняка, какой частью туловища писался запрос.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5611
Пользователь №: 35718
На форуме: 4 года, 5 месяцев, 9 дней
Карма: 173




redreem, я образно говоря. Расчёт на то, что ТС поймёт, что бояться лишнего запроса и не бояться делать средствами РНР работу СУРБД - это абсурд.
exotica, я хочу что бы у тебя крепко засела фраза в голове, когда видишь запрос без WHERE первое, что ты должен себя спросить "а не дурак ли я?"


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
exotica  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Code noobing... :))
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 740
Пользователь №: 36599
На форуме: 4 года, 2 месяца, 13 дней
Карма: 22

Не курю:
4 года, 2 месяца


Valick
Возникает вопрос where что? Если нужно вернуть все цитаты в таблице и в ней по примеру всего 2 поля . объясни пожалуйста, а вырывание частей тела на потом оставим smile.gif


--------------------
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
exotica  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Code noobing... :))
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 740
Пользователь №: 36599
На форуме: 4 года, 2 месяца, 13 дней
Карма: 22

Не курю:
4 года, 2 месяца


Было бы там поле public допустим со значениями 0 и 1 соответственно. Но блин его нету же.


--------------------
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









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

Возвращай из базы сразу одну случайную запись http://stackoverflow.com/a/19419

Преждевременная оптимизация - зло. Но если тебя так сильно беспокоит доп. запрос в базу. То можешь выбирать сразу 100-500 случайных цитат из базы и класть их в кеш с жизнью 6-12 часов.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
exotica  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Code noobing... :))
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 740
Пользователь №: 36599
На форуме: 4 года, 2 месяца, 13 дней
Карма: 22

Не курю:
4 года, 2 месяца


Цитата
Возвращай из базы сразу одну случайную запись

воот оно где. Спасибо


--------------------
[FAQ]Регистрации пользователей, сохранение в БД
---------------------------------------------------------------------------
Выходя из ванной, вышел из нее два раза
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26337
Пользователь №: 21350
На форуме: 7 лет, 1 месяц, 15 дней
Карма: 734




order by rand() limit 1


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса