Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выборка из базы, для ротации баннеров

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужно выбрать рандомно 1 строку
cooperok
Отправлено: 28 Ноября, 2011 - 11:39:01
Post Id


Частый гость


Покинул форум
Сообщений всего: 137
Дата рег-ции: Сент. 2011  
Откуда: Los Angeles, California


Помог: 0 раз(а)




Здраствуйте, подскажите или помогите подправить скрипт,

Есть скрипт ротатор баннеров, в нем после перебора выберается рандомно 1 баннер,
но вот скрипт почему то не хочет работать

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?
  2.         $sql="select * from tb_advban where paused=0 and modered=1";$allsqls++;
  3.         $res=mysql_query($sql);
  4.         $i=0;
  5. while($row=mysql_fetch_array($res))
  6. {
  7. if(intval($row[balance]/$row[price])==0 or $row[balance]<$row[price]) mysql_query("UPDATE tb_advban SET paused=1,balance=0 WHERE id='$row[id]'");
  8.         $i++;
  9.         $id[$i]=$row[id];
  10.         $banpic[$i]=$row[nametime];
  11.         $banformat[$i]=$row[typeban];
  12. }
  13. if($i==0)
  14. {
  15. $banpict="banners/noban.png";
  16. echo "<img src='/$banpict' width=468 height=60>";
  17. }else{
  18.         $newi=rand(1,$i);
  19.         $i=$newi;
  20.         $banpict="banners/
  21. $banpic[$i].$banformat[$i]";
  22. echo "<a href='/ban_url.php?link=$id[$i]' target='_blank'><img src='/$banpict' width=468 height=60></a>";
  23. }
  24.                 ?>


нужно сделать так что бы
<a href='/ban_url.php?link=$id[$i]'
$id[$i] писался тот который был взят из базы а выберается постоянно 1строка, даже если эта строка удалена в базе


-----
This forum is vulnerable. I want to replace forum engine.
(c) OrmaJever
 
 Top
Panoptik
Отправлено: 28 Ноября, 2011 - 12:22:20
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




попробуйте вывести содержимое массивов $id, переменных $newi, $i посмотрите что в них попадает
(Добавление)
и кстати насколько я знаю массивы нельзя просто так выводить в строке, нужно их хотябы обрамлять в знаки {} а еще лучше отдельно выводить
PHP:
скопировать код в буфер обмена
  1.  
  2. $banpict="banners/".$banpic[$i].'.'.$banformat[$i];
  3.  


-----
Just do it
 
 Top
cooperok
Отправлено: 28 Ноября, 2011 - 12:46:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 137
Дата рег-ции: Сент. 2011  
Откуда: Los Angeles, California


Помог: 0 раз(а)




Может быть вопрос чуть не так поставил,
дело в том что при отборе баннеров в базе он выводит те которые прошли модерацию и где баланс баннера больше чем стоимость клика по баннеру

допустим 2 баннера активных
он их заносит в массив и выводит их как ID1 и ID2
а надо что бы ID были те старые которые были при отборе
примерно так 5 баннеров уже старые на которых баланс пуст
они не должны показыватся а баннер 6 и 7 добавляются в массив и выводятся но ID не 6 и 7 а 1 и 2 вот что нужно подправить, незнаю возможно ли как то сделать

я в этом плохо разбераюсь по этому не ругайте сильно)


-----
This forum is vulnerable. I want to replace forum engine.
(c) OrmaJever
 
 Top
Panoptik
Отправлено: 28 Ноября, 2011 - 12:54:04
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




у вас в условии
PHP:
скопировать код в буфер обмена
  1. if(intval($row[balance]/$row[price])==0 or $row[balance]<$row[price]) mysql_query("UPDATE tb_advban SET paused=1,balance=0 WHERE id='$row[id]'");

обновляются данные, но дальше вы обрабатываете изначальные значения, то есть все которые выбрались. Поставьте после if {}
PHP:
скопировать код в буфер обмена
  1.  
  2. if(intval($row[balance]/$row[price])==0 or $row[balance]<$row[price])
  3. {
  4.         mysql_query("UPDATE tb_advban SET paused=1,balance=0 WHERE id='$row[id]'");
  5.         $i++;
  6.         $id[$i]=$row[id];
  7.         $banpic[$i]=$row[nametime];
  8.         $banformat[$i]=$row[typeban];
  9. }
  10.  

(Добавление)
если я не так понял условие то возможно следующий блок операторов нужно выполнить в else if'a
PHP:
скопировать код в буфер обмена
  1.  
  2. if(intval($row[balance]/$row[price])==0 or $row[balance]<$row[price])
  3. {
  4.         mysql_query("UPDATE tb_advban SET paused=1,balance=0 WHERE id='$row[id]'");
  5. }
  6. else
  7. {
  8.         $i++;
  9.         $id[$i]=$row[id];
  10.         $banpic[$i]=$row[nametime];
  11.         $banformat[$i]=$row[typeban];
  12. }
  13.  


-----
Just do it
 
 Top
cooperok
Отправлено: 28 Ноября, 2011 - 13:13:15
Post Id


Частый гость


Покинул форум
Сообщений всего: 137
Дата рег-ции: Сент. 2011  
Откуда: Los Angeles, California


Помог: 0 раз(а)




попробывал оба варианта все равн оне работает

echo "<a href='/ban_url.php?link=$id[$i]'
вот у меня в базе на данный момент 2 баннера под ID13 и ID14
которые активны и должны выводится
картинки выводятся нормально но вот ID нет постоянно 1
думаю изза того что перебор идет ссылок активных у меня их 2
а потом при выводе командой рандом создается число от 1 и до 2 поулчается потому что 2 активных баннера
но ID у них другие
(Добавление)
Или возможно ли сделать команду рандом не от 1 до 100 а например конкретные числа тоесть на данный момент 13 и 15 что то из них выбрать


-----
This forum is vulnerable. I want to replace forum engine.
(c) OrmaJever
 
 Top
Panoptik
Отправлено: 28 Ноября, 2011 - 13:30:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




ну вобщето ранд и возвращает число от 1 до i
я лично предпочитаю использовать многомерный массив например вот так:
PHP:
скопировать код в буфер обмена
  1.  
  2.         $id=$row[id];
  3.         $banpic=$row[nametime];
  4.         $banformat=$row[typeban];
  5.         $arr[] = array('id' => $id,'banpic' => $banpic, 'banformat' => $banformat);
  6.  
  7. //а после вызываем ранд и получаем один из результатов
  8.  
  9.         $i = rand(0,count($arr)-1);
  10. //и далее выводы
  11.  
  12.        $arr[$i]['id'] , $arr[$i]['banpic'] ...
  13.  


-----
Just do it
 
 Top
cooperok
Отправлено: 28 Ноября, 2011 - 13:34:17
Post Id


Частый гость


Покинул форум
Сообщений всего: 137
Дата рег-ции: Сент. 2011  
Откуда: Los Angeles, California


Помог: 0 раз(а)




можешь связатся по аське?
поможешь отладить на сотик 50р кину) немного но большими финансами не распологаю
напиши свою асю если есть
(Добавление)
вроде бы когда он проверяет ссылки на активность те которые надо показываеть и считает их
а потом в рандоме выводт то число от 1 до i а i это же то количество сколько ссылок для вывода есть
может по это постоянно выводится ID1


-----
This forum is vulnerable. I want to replace forum engine.
(c) OrmaJever
 
 Top
Panoptik
Отправлено: 28 Ноября, 2011 - 13:53:28
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




441674810


-----
Just do it
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB