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
Форумы портала PHP.SU :: Версия для печати :: Выборка из базы, для ротации баннеров
Форумы портала PHP.SU » » Вопросы новичков » Выборка из базы, для ротации баннеров

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

1. cooperok - 28 Ноября, 2011 - 11:39:01 - перейти к сообщению
Здраствуйте, подскажите или помогите подправить скрипт,

Есть скрипт ротатор баннеров, в нем после перебора выберается рандомно 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строка, даже если эта строка удалена в базе
2. Panoptik - 28 Ноября, 2011 - 12:22:20 - перейти к сообщению
попробуйте вывести содержимое массивов $id, переменных $newi, $i посмотрите что в них попадает
(Добавление)
и кстати насколько я знаю массивы нельзя просто так выводить в строке, нужно их хотябы обрамлять в знаки {} а еще лучше отдельно выводить
PHP:
скопировать код в буфер обмена
  1.  
  2. $banpict="banners/".$banpic[$i].'.'.$banformat[$i];
  3.  
3. cooperok - 28 Ноября, 2011 - 12:46:22 - перейти к сообщению
Может быть вопрос чуть не так поставил,
дело в том что при отборе баннеров в базе он выводит те которые прошли модерацию и где баланс баннера больше чем стоимость клика по баннеру

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

я в этом плохо разбераюсь по этому не ругайте сильно)
4. Panoptik - 28 Ноября, 2011 - 12:54:04 - перейти к сообщению
у вас в условии
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.  
5. cooperok - 28 Ноября, 2011 - 13:13:15 - перейти к сообщению
попробывал оба варианта все равн оне работает

echo "<a href='/ban_url.php?link=$id[$i]'
вот у меня в базе на данный момент 2 баннера под ID13 и ID14
которые активны и должны выводится
картинки выводятся нормально но вот ID нет постоянно 1
думаю изза того что перебор идет ссылок активных у меня их 2
а потом при выводе командой рандом создается число от 1 и до 2 поулчается потому что 2 активных баннера
но ID у них другие
(Добавление)
Или возможно ли сделать команду рандом не от 1 до 100 а например конкретные числа тоесть на данный момент 13 и 15 что то из них выбрать
6. Panoptik - 28 Ноября, 2011 - 13:30:12 - перейти к сообщению
ну вобщето ранд и возвращает число от 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.  
7. cooperok - 28 Ноября, 2011 - 13:34:17 - перейти к сообщению
можешь связатся по аське?
поможешь отладить на сотик 50р кину) немного но большими финансами не распологаю
напиши свою асю если есть
(Добавление)
вроде бы когда он проверяет ссылки на активность те которые надо показываеть и считает их
а потом в рандоме выводт то число от 1 до i а i это же то количество сколько ссылок для вывода есть
может по это постоянно выводится ID1
8. Panoptik - 28 Ноября, 2011 - 13:53:28 - перейти к сообщению
441674810

 

Powered by ExBB FM 1.0 RC1