Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите со случайным выводом!
 
 автор: virtus   (06.09.2005 в 14:55)   письмо автору
 
 

Скрипт показа баннера!
Он выводит рандомайзом 1 ID (т.е. один беннер или текст)!!!
А нужно, что бы выводил 2 или 3 или 5 - сколько я захочу вообщем!
от 0 до 10 например!
Вот прошу Вашей помощи т.к. сам не могу. Понимаю, что нужно в массив взять - но не выходит :(
ВОТ КОД скрипта, который выводит баннер на экран!
<?php
include("config.php");
dbconnect();
if(!isset($action)){
$query = "select * from $banners where status = 1";
$result = doquery($query);
$num = mysql_num_rows($result);
if($num > 1){
$num = $num - 1;
$val = rand(0,$num);
mysql_data_seek($result, $val);
}
$row = mysql_fetch_array($result);
$id = $row['id'];
$adtype = $row['adtype'];
$image = $row['image'];
$alt = $row['alt'];
$link = $row['link'];
$adtext = $row['adtext'];
$target = $row['target'];
$today = date("d m Y");
$query = "select * from $stats where DATE_FORMAT(amdate, '%d %m %Y') = '$today' and id = $id";
$result = doquery($query);
$num_results = mysql_num_rows($result);
$today = date("Y-m-d");
if($num_results == 0){
$query = "INSERT INTO $stats (id, amdate, displays, clicks) VALUES ($id, '$today', 1, 0)";
}else{
$query = "UPDATE $stats SET displays = displays + 1 WHERE id = $id AND amdate = '$today'";
}
$result = doquery($query);
if($target == 0)
$target_text = "_blank";
else
$target_text = "_top";
if($adtype == 1){
echo "<a href='?id=".$id."&action=show' target='$target_text'><img border='0' src='$image' alt='$alt'></a>";
}else{
echo "<a href='?id=".$id."&action=show' target='$target_text'>$adtext</a>";
}
}
if($action == "show"){
$query = "select * from $banners where id = $id";
$result = doquery($query);
$row = mysql_fetch_array($result);
$link = $row['link'];
if(strtolower(substr($link,0,5)) != "http:")
$link = "http://" . $link;
$today = date("d m Y");
$query = "select * from $stats where DATE_FORMAT(amdate, '%d %m %Y') = '$today' and id = $id";
$result = doquery($query);
$num_results = mysql_num_rows($result);
$today = date("Y-m-d");
$query = "UPDATE $stats SET clicks = clicks + 1 WHERE id = $id AND amdate = '$today'";
$result = doquery($query);
header("Location: ".$link);
}
?>
СПАСИТЕ ПОЖАЛУЙСТА!

   
 
 автор: cheops   (06.09.2005 в 15:11)   письмо автору
 
   для: virtus   (06.09.2005 в 14:55)
 

Я так понимаю за отображение несёт ответственность только последний блок
<?php
  
if($action == "show")
  {
    
$query "select * from $banners where id = $id";
    
$result doquery($query);
    
$row mysql_fetch_array($result);
    
$link $row['link'];
    if(
strtolower(substr($link,0,5)) != "http:")
    
$link "http://" $link;
    
$today date("d m Y");
    
$query "select * from $stats where DATE_FORMAT(amdate, '%d %m %Y') = '$today' and id = $id";
    
$result doquery($query);
    
$num_results mysql_num_rows($result);
    
$today date("Y-m-d"); 
    
$query "UPDATE $stats SET clicks = clicks + 1 WHERE id = $id AND amdate = '$today'";
    
$result doquery($query);
    
header("Location: ".$link);
  }
?>

А где происходит сам вывод баннера?

   
 
 автор: virtus   (06.09.2005 в 15:47)   письмо автору
 
   для: cheops   (06.09.2005 в 15:11)
 

нет!
этот блок считает количесвто показов и кликов!
я пометил # решеткой!

<?php 
 
include("config.php");
 
dbconnect();
 if(!isset(
$action)){
 
$query "select * from $banners where status = 1";
 
$result doquery($query);
 
$num mysql_num_rows($result);
 if(
$num 1){
# ВОТ ОН ВЫБИРАЕТСЯ РАНДОМОМ
 
$num $num 1;
 
$val rand(0,$num);
 
mysql_data_seek($result$val);
 }
 
$row mysql_fetch_array($result);
 
$id $row['id'];
 
$adtype $row['adtype'];
 
$image $row['image'];
 
$alt $row['alt'];
 
$link $row['link'];
 
$adtext $row['adtext'];
 
$target $row['target'];
 
$today date("d m Y");
 
$query "select * from $stats where DATE_FORMAT(amdate, '%d %m %Y') = '$today' and id = $id";
 
$result doquery($query);
 
$num_results mysql_num_rows($result);
 
$today date("Y-m-d"); 
 if(
$num_results == 0){
  
$query "INSERT INTO $stats (id, amdate, displays, clicks) VALUES ($id, '$today', 1, 0)";
 }else{
  
$query "UPDATE $stats SET displays = displays + 1 WHERE id = $id AND amdate = '$today'";
 } 
 
$result doquery($query);
 if(
$target == 0)
  
$target_text "_blank";
 else
  
$target_text "_top";
 if(
$adtype == 1){ 
# ВОТ ОН ОТОБРАЖАЕТСЯ
  
echo "<a href='?id=".$id."&action=show' target='$target_text'><img border='0' src='$image' alt='$alt'></a>";
 }else{
  echo 
"<a href='?id=".$id."&action=show' target='$target_text'>$adtext</a>";
 }
}
if(
$action == "show"){
 
$query "select * from $banners where id = $id";
 
$result doquery($query);
 
$row mysql_fetch_array($result);
 
$link $row['link'];
 if(
strtolower(substr($link,0,5)) != "http:")
  
$link "http://" $link;
 
$today date("d m Y");
 
$query "select * from $stats where DATE_FORMAT(amdate, '%d %m %Y') = '$today' and id = $id";
 
$result doquery($query);
 
$num_results mysql_num_rows($result);
 
$today date("Y-m-d"); 
 
$query "UPDATE $stats SET clicks = clicks + 1 WHERE id = $id AND amdate = '$today'";
 
$result doquery($query);
 
header("Location: ".$link);
}
?>

   
 
 автор: cheops   (06.09.2005 в 17:49)   письмо автору
 
   для: virtus   (06.09.2005 в 15:47)
 

А нет тогда гораздо проще воспользоваться случайным выводом из MySQL при помощи инструкции ORDER BY RAND(). Т.е. блок
<?php
$query 
"select * from $banners where status = 1"
$result doquery($query); 
$num mysql_num_rows($result); 
if(
$num 1)

  
# ВОТ ОН ВЫБИРАЕТСЯ РАНДОМОМ 
  
$num $num 1
  
$val rand(0,$num); 
  
mysql_data_seek($result$val); 
}
$row mysql_fetch_array($result);
?>

Переписать следующим образом
<?php
$query 
"select * from $banners where status = 1 ORDER BY RAND() LIMIT 5"
$result doquery($query); 
$num mysql_num_rows($result); 
if(
$num 0)
{
  while(
$row mysql_fetch_array($result))
  {
    
// Всё остальное
  
}
}
?>

Цифра 5 в LIMIT определяет число записей, которые будут возврщаены.

   
 
 автор: virtus   (07.09.2005 в 10:30)   письмо автору
 
   для: cheops   (06.09.2005 в 17:49)
 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in cbann.php on line 19
выдает один баннер и вот что пишет!!!

   
 
 автор: cheops   (07.09.2005 в 13:46)   письмо автору
 
   для: virtus   (07.09.2005 в 10:30)
 

Попробуйте поставить после строки
<?php
  $result 
doquery($query);
?>

проверку
<?php
  
if(!$result) exit(mysql_error());
?>

Кстати, что делает функция doquery()?

   
 
 автор: virtus   (07.09.2005 в 13:50)   письмо автору
 
   для: cheops   (07.09.2005 в 13:46)
 

ВОТ функция

function doquery($query) {
$result = mysql_query($query) or die(mysql_error());
return $result;
}

поэтому проверку смысла нет делать - она и так делается!!!!
ВОТ КАК жеж вывести - вот задачка-то...

   
 
 автор: cheops   (07.09.2005 в 20:55)   письмо автору
 
   для: virtus   (07.09.2005 в 13:50)
 

Конструкция
<?php
  $result 
mysql_query($query) or die(mysql_error());
?>

не будет срабатывать, так как операция = всегда возвращает true, даже если mysql_query() возвращает ошибку. Сработает только
<?php
  mysql_query
($query) or die(mysql_error())
?>

Эти Perl-овые штучки лишком не очевидны их лучше избегать. Попробуйте переписать код функции следующим образом
<?php
function doquery($query) { 
$result mysql_query($query); 
if(!
$result)  die(mysql_error());
return 
$result
}
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования