X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Помогите разобраться со скриптом
yak2013
yak2013
Topic Starter сообщение 27.1.2016, 11:49; Ответить: yak2013
Сообщение #1


Доброе время суток!
Люди добрые помогите разобраться со скриптом. Точнее с ротатором ссылок.
Я как бы не совсем знаток PHP.
На данный момент ротатор показывает 5 ссылок при добавлении 6 ссылки последняя удаляется.
Вот хотел переделать так чтобы показывалась 1 ссылка в случайном порядке.
Но почему то не работает, хотя в денвере все работает. При добавлении ссылок в ротатор показываются все добавленные ссылки, а не одна в случайном порядке.
Вот сам код который отвечает за открытие и запись в файл:

<?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));
if(!preg_match('@^(http://)@', $url)) exit($err.'<b>Неправильная ссылка</b>');
if(strlen($txt) > $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>';

$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>');
?>


Вот эту часть кода:

$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>');

Менял на эту:

$s = file($modul.'data.dat');
$a = 2;
$e = mt_rand(1, count($s) - $a);
$sad=$e+$a;
for($c = $e; $c < $sad; $c++){
$s[$c];
}
$d = fopen($modul.'data.dat', 'a+');
$info = $data;
fwrite($d, $info. "\r\n");
fclose($d);
record($uid, 0, $bll['price']);
exit($ok.'<b>Готово</b>');

И ни как не хочет работать.
В этом скрипте есть еще файл с вязаный с тим:

<?php
$___notjson = 1;
$var = array(array(),array());
global $var;
$uid = ucoz_getinfo('SITEUSERID');
header('Content-Type: text/html; charset=utf-8');

$work = trim($_GET['w']); # Какую операцию провести
if(empty($work)) exit('err');

#### Конфиг
include 'config.php';

#### Подключаем стандартные функции
require('function.php');


/* ------ Спец. work */
# Получение изменений быллов
if($work == 'get') exit(get($_GET['i']));

# Возможность изменять баллы админу
if($work == 'change'){
if($uid != 1) exit('Нет прав доступа!');
$r = record($_GET['i'], $_GET['p'], $_GET['m']);
if($r !== true) exit($err.'<b>'.$r.'</b>');
exit($ok.'<b>Готово</b>');
}

# Получение списка модулей
# $USER_ID$, $MODUL$, $LOAD$, $ERR$, $OK$ - Доступные коды
if($work == 'listmod'){
$scan = scandir('moduls');
foreach($scan as $dir){
$config = 'moduls/'.$dir.'/config.bll';
if(!is_file($config) || $dir == '.'|| $dir == '..') continue;
$data = bll(file_get_contents($config));
if(!$data['switch'] || !$data['display']) continue;
nawvar('USER_ID', $uid, 'LOAD', $load, 'OK', $ok, 'ERR', $err, 'MODUL', $dir);
$decl = decl($data['price'], array('балл','балла','баллов'));
echo nawvar('<div class="hbl"><div class="ibl"><img src="'.$data['img'].'" width="32" height="32" alt="" border="0"></div><div class="cbl"><a href="javascript://" onclick="b_'.$dir.'()"><b>'.$data['name'].'</b></a><span class="b0"> - '.$decl.'</span><br>'.$data['message'].'</div></div>');
}
exit;
}



# Вызов молуля из списка
# $USER_ID$, $MODUL$, $LOAD$, $ERR$, $OK$ - Доступные коды
if($work == 'datamod' && $_GET['m']){
header('Content-Type: text/javascript; charset=utf-8');
nawvar('USER_ID', $uid, 'LOAD', $load, 'OK', $ok, 'ERR', $err);
if($_GET['m'] == 'allmod'){
$scan = scandir('moduls');
foreach($scan as $dir){
$config = 'moduls/'.$dir.'/config.bll';
if(!is_file($config) || $dir == '.'|| $dir == '..') continue;
$data = bll(file_get_contents($config));
if(!$data['switch'] || !$data['display']) continue;
nawvar('MODUL', $dir);
if(!$data['ajax']) $data['ajax'] = "align:'left',autosize:1";
echo nawvar("function b_".$dir."(){ new _uWnd('b_".$_GET['m']."','".$data['name']."',".$data['w_h'].",{".$data['ajax'].",oncontent:function(){".$data['js']."}},'".$data['html']."');}".PHP_EOL);
}
exit;
}
$config = 'moduls/'.$_GET['m'].'/config.bll';
if(!is_file($config)) exit('"config.bll" не обнаружен');
$data = bll(file_get_contents($config));
if(!$data['switch']) exit('Модуль не активен');
if(!$data['ajax']) $data['ajax'] = "align:'left',autosize:1";
nawvar('MODUL', $_GET['m']);
echo nawvar("function b_".$_GET['m']."(){ new _uWnd('b_".$_GET['m']."','".$data['name']."',".$data['w_h'].",{".$data['ajax'].",oncontent:function(){".$data['js']."}},'".$data['html']."');}");
exit;
}
/* ------ */


# Подключаем модуль
$modul = 'moduls/'.$work.'/';
if(!is_file($modul.'index.php')) exit('Такого мудуля не существует');
if(!is_file($modul.'config.bll')) exit('"config.bll" не обнаружен');
$config = file_get_contents($modul.'config.bll');
$bll = bll($config);
if(!$bll['switch']) exit('Модуль не активен');
require($modul.'index.php');

?>

Может кто сможет подсказать что и как сделать, а то уже всю голову сломал.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yak2013
yak2013
Topic Starter сообщение 28.1.2016, 12:18; Ответить: yak2013
Сообщение #2


Видимо и тут ни кто не знает php
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
TimurR
TimurR
сообщение 30.1.2016, 2:02; Ответить: TimurR
Сообщение #3


yakov, что за ошибки высвечиваются? В денвере работает как надо, а на хостинге нет? Версия PHP на денвере и на хостинге совпадает? 
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yak2013
yak2013
Topic Starter сообщение 30.1.2016, 10:55; Ответить: yak2013
Сообщение #4


@TimuR, С проблемой вроде как разобрался, получилось вывести одну случайную ссылку.
Но не устраивает

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

$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 ссылки) и что бы ссылки не повторялись при выводе двух и более ссылок.
А то по второму варианту повторяются.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yak2013
yak2013
Topic Starter сообщение 30.1.2016, 12:30; Ответить: yak2013
Сообщение #5


Сделал так:

$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];
}

Не работает
Подскажите что не так?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
TimurR
TimurR
сообщение 30.1.2016, 23:38; Ответить: TimurR
Сообщение #6


Можно попробовать что-то на подобии этого. Т.е. ссылки поместить в массив и из массива выводить в случайном порядке. Но тут есть один минус. 

Версия 5.2.10 Возвращаемый массив ключей больше не возвращается в случайном порядке, поэтому можно попробовать использовать связку array_rand с shuffle

Т.е. заносим в массив нужные ссылки типа ключ_1=ссылка_1, перемешиваем через shuffle и выдергиваем через array_rand. 
Если значения в массиве должны быть прописаны не жестко в коде, а допустим они могут меняться и будут добавляться новые элементы, то можно создавать динамические массивы, а данные (в вашем случае данные это ссылки) можно сохраняться в базе данных и оттуда их получать записывая в массив. 


Сообщение отредактировал TimurR - 30.1.2016, 23:34
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yak2013
yak2013
Topic Starter сообщение 31.1.2016, 20:20; Ответить: yak2013
Сообщение #7


С выводом случайных ссылок разобрался.

Есть еще вопрос:
Подскажите возможно сделать в ротаторе ссылок при добавлении ссылки что бы она удалялась через определенное время.
Допустим добавляешь ссылку указываешь 10 дней и она удалится через 10 дней.
Только если возможно без базы данных. А то хостингом запрещено использование MySQL функции (mysql_stat, mysql_pconnect);
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 31.1.2016, 20:48; Ответить: ixman
Сообщение #8


yakov, прописывайте дополнительно к ссылкам ещё и время жизни, затем делайте обработчик, который будет проверять время и удалять просроченные ссылки. Вообще, на мой взгляд, это мёртвый путь работая с файлами. С базой это всё намного проще в реализации, меньше кода и больше возможностей.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
yak2013
yak2013
Topic Starter сообщение 1.2.2016, 21:56; Ответить: yak2013
Сообщение #9


Была бы возможность работать с базой данных совсем другая тема. А вот в файл записывается ни одна ссылка, а целая таблица где ссылка, картинка и описание
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ixman
ixman
сообщение 1.2.2016, 23:45; Ответить: ixman
Сообщение #10


yakov, так добавить в таблицу поле время, в чём проблема-то?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Помогите вспомнить рекламного бота Телеграм для обмена рекламой
0 Mixatraider 732 21.2.2024, 23:42
автор: Mixatraider
Открытая тема (нет новых ответов) Помогите рещить проблему с монитором.
Почему низкое разрешение при подключении монитора через displayport?
0 Levels 1702 11.12.2020, 0:48
автор: Levels
Открытая тема (нет новых ответов) Помогите кто нибудь получить партнерку Росбанк!
7 heisenberg_mw 2345 7.8.2020, 9:28
автор: heisenberg_mw
Открытая тема (нет новых ответов) Помогите найти тему пожалуйста
7 virtas 12547 24.7.2020, 17:02
автор: -JamesSmips-
Открытая тема (нет новых ответов) Помогите с поиском доноров
3 tehno_music 3362 4.11.2019, 17:15
автор: goblin78


 



RSS Текстовая версия Сейчас: 25.4.2024, 12:53
Дизайн