Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2016, 18:45   #1
yakov75
 
Регистрация: 25.01.2016
Сообщений: 3
По умолчанию Ротатор ссылок (помогите разобраться)

Доброе время суток!
Помогите разобраться со скриптом.
Нужно исправить вид ротатора ссылок. На данный момент при добавлении ссылок в ротатор показывается 5 ссылок при добавлении 6 ссылки последняя удаляется.
Суть в том возможно сделать так чтобы высвечивалась одна случайная ссылка из файла.
Вот сам код:
PHP код:
<?php

/** -------- 
  Ротатор ссылок
  
<div id="blk">Загрузка...</div>
<?endif?><script type="text/javascript">$('#blk').load('/php/ball/index.php?w=links&t=get');</script>
<?if($USER_LOGGED_IN$)?><hr> [ <a href="javascript://" onclick="b_links()" title="Отправить баллы">Добавить ссылку</a> ]
<script type="text/javascript" src="/php/ball/index.php?w=datamod&m=links"></script><?endif?>
-------- **/

if(empty($work)) exit('err'); # Защита от прямого вызова
if($_GET['t'] == 'get'){
  
$data file_get_contents($modul.'data.dat');
  if(empty(
$data)) $data '<li><b>Тут может быть ваша ссылка...</b></li>';
  exit(
$data);
}
if(
$uid == 0) exit($err.'<b>Войдите на сайт</b>');
if(!
shield($work)) exit($err.'<b>Не так часто!</b>'); # Защита от частых запросов
$url urldecode($_GET['url']);
$txt urldecode($_GET['txt']);
$txt trim(strip_tags($txt));
$img urldecode($_GET['img']);
if(!
preg_match('@^(http://)@'$url)) exit($err.'<b>Неправильная ссылка</b>');
if(
strlen($txt) > $bll['maxlen']) exit($err.'<b>Макс. кол-во символов '.$bll['maxlen'].'</b>');
if(
strlen($etxt) > $bll['maxlen']) exit($err.'<b>Макс. кол-во символов '.$bll['maxlen'].'</b>');
$txt htmlspecialchars($txt);

if(empty(
$txt)) exit($err.'<b>Название пустое</b>');

$bls getBall($uid);
if(empty(
$bls)) exit($err.'<b>Попробуйте позже</b>');
$bl get($uid) + $bls;
if(
$bl $bll['price']) exit($err.'<b>Недостаточно баллов</b>');
$data '<li><b><a href="'.$url.'" target="_blank">'.$txt.'</a></b></li><img src="'.$img.'">;


$s = file($modul.'
data.dat');
$s[0] = $data.PHP_EOL.$s[0];
$e = sizeof($s);
for($c = 0; $c != $e; $c++){
  if($c >= $bll['
max']-1) $s[$c] = '';
}
$d = fopen($modul.'
data.dat', 'w');
foreach($s as $s_) fwrite($d, $s_.'');
fclose($d);
record($uid, 0, $bll['
price']);
exit($ok.'
<b>Готово</b>');
?>
Только не судите строго PHP не силен
В файле data запись происходит в одну строчку.
Может кто подскажет как переделать
yakov75 вне форума Ответить с цитированием
Старый 26.01.2016, 14:01   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

тут подсветка синтаксиса показывает, что у вас в строке
PHP код:
$data '<li><b><a href="'.$url.'" target="_blank">'.$txt.'</a></b></li><img src="'.$img.'">; 
Строка не закрыта, возможно, перед точкой с запятой надо поставить одинарную кавычку. Быть может, поэтому?
Вадим Мошев вне форума Ответить с цитированием
Старый 26.01.2016, 14:39   #3
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
тут подсветка синтаксиса показывает, что у вас в строке
Подсветка синтаксиса это сила
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 26.01.2016, 18:24   #4
yakov75
 
Регистрация: 25.01.2016
Сообщений: 3
По умолчанию

Не из за неё.
Смысл нужно сделать вывод 1 случайной ссылки вот из этого:
Код:
$s = file($modul.'data.dat');
$s[0] = $data.PHP_EOL.$s[0];
$e = sizeof($s);
for($c = 0; $c != $e; $c++){
  if($c >= $bll['max']-1) $s[$c] = '';
}
$d = fopen($modul.'data.dat', 'w');
foreach($s as $s_) fwrite($d, $s_.'');
fclose($d);
record($uid, 0, $bll['price']);
exit($ok.'<b>Готово</b>');
Но уже много пробовал методов не открывается случайная ссылка.
Просто по мере добавления ссылки, начинают показываться все хоть сколько добавляй.
Я думаю проблема в этом:
Код:
if($_GET['t'] == 'get'){
  $data = file_get_contents($modul.'data.dat');
  if(empty($data)) $data = '<li><b>Тут может быть ваша ссылка...</b></li>';
  exit($data);
}
Так как открывается файл целиком, но если убрать file_get_contents то ничего не работает.
yakov75 вне форума Ответить с цитированием
Старый 30.01.2016, 12:34   #5
yakov75
 
Регистрация: 25.01.2016
Сообщений: 3
По умолчанию

Сделал так:
Но не устраивает

Это одна ссылка:

Код:
$data = explode("\n", file_get_contents($modul.'data.dat'));
$data = $data[rand(0, count($data) - 1)];
Это две ссылки:

Код:
$data = explode("\n", file_get_contents($modul.'data.dat'));
$data = $data[rand(0, count($data) - 1)].' '.$data[rand(0, count($data) - 1)];
А как сделать так чтобы было можно указать количество ссылок (1,2,3 ссылки) и что бы ссылки не повторялись при выводе двух и более ссылок.

А то по второму варианту повторяются.

Сделал так:

Код:
$data = explode("\n", file_get_contents($modul.'data.dat'));
$max = count($data);
$i = rand(0,$max);
$data = $data[$i];
Выводит одну случайную ссылку

Делал так:

Код:
$data = explode("\n", file_get_contents($modul.'data.dat'));
$c=2; # Количество ссылок
$out = mt_rand(1, count($data) – $c);
$sad=$out+$c;
for($i = $out; $i < $sad; $i++) {
$data = $data[$i];
}
Не работает

Подскажите что не так?
yakov75 вне форума Ответить с цитированием
Старый 30.01.2016, 16:59   #6
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

Учи комбинаторику. Вкратце так:
Код:
function shuffle( count, array ) {
  return array.map(function( el ){
    return {
      el: el,
      sort: Math.random()
    };
  }).sort(function(a,b){
    return a.sort - b.sort
  }).slice( 0, count ).map(function( el ){
    return el.el
  })
};
Это на js, на php такое трудно написать, но так чтоб логику объяснить
Alar, верни репу!
Naive вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ротатор DIV элементов на JavaScript JasperCRT JavaScript, Ajax 8 26.12.2011 16:23
Помогите разобраться grave123 Общие вопросы C/C++ 9 06.12.2009 13:46
помогите разобраться с C# P'er Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 12.09.2009 15:33
Ротатор ссылок (TDS) на java imsha JavaScript, Ajax 0 19.11.2008 12:47
Ротатор баннеров Alar JavaScript, Ajax 3 21.06.2008 13:20