Jump to content

[SOLVED] banner ad on selected pages


jarvis

Recommended Posts

Hi,

 

We've a cms which has the following pages:

index.php - shows certain article headlines from a db (i.e. last 10 added)

 

article.php shows the actual article by id, i.e. when you click the article title the link is article.php?id=1 this then grabs the info relating to the article with an id of 1

 

contact.php shows the contact info

 

about.php shows the about info

 

What I need to do is assign a banner ad (image and link) which I add via a CMS script. Question is, how can I assign it to a specific page (article, index, about, contact etc)? Is there a way of given a page a hidden value and when that page is loaded it loads the relevant banner?

 

Hope that makes sense?

 

Many thanks

Link to comment
Share on other sites


if ($_SERVER['PHP_SELF'] == "/index.php"){
//load the correct banner
}

 

Will get kind of clunky with more and more pages, but I would suggest putting the info in a database, or storing the relevant data into an array and getting it that way, like

 

//database way
$get = $_SERVER['PHP_SELF'];

$sql = "SELECT src FROM bannerTable WHERE page='$get'";
$go = mysql_query($sql);
$row = mysql_fetch_array($go);

echo "<img src='".$row['src']"' id='banner' />";

Link to comment
Share on other sites

This is great thanks! I've got a query though, my table allows you to enter the file name or select it from a db (via a drop down of article titles from the cms) if it's a dynamic page. My DB table for this part therefore looks like:

page_id page_name

1 10

2 21

3 index.php

4 3

5 contact_us.php

6 5

7 view_files.php

8 1

 

If I then use my code in the header file to get the image I want to display:

$id = $_GET['aid'];
$query = "SELECT page_id FROM pages WHERE page_name='$aid'";

This works to get the image for any page with an id number (dynamic page), however, it errors on those pages without, such as about_us.php, index.php and view_files.php.

 

How can I get around this?

 

Thanks so much!

Link to comment
Share on other sites

If I've understood what mean then something like this will allow for differentiation between an ID and a filename:

 

<?PHP
if (!isset($_GET['aid']) {
  $get = $_SERVER['PHP_SELF'];
  // Whatever you want it to do with the file name
} else {
  $aid  = $_GET['aid'];
  // Your SQL
}
?>

 

Is that what you were after?

 

Link to comment
Share on other sites

if (isset($_GET['aid'])) { //If this there's a $_GET['aid'] in the URL, this page is dynamic. Consult database for the banner. 
    $sql = "SELECT `page_id` FROM `pages` WHERE `page_name`='" . $_GET['aid'] . "'";
    $query = mysql_query($sql);
    $fetch = mysql_fetch_assoc($query);
    $img = $fetch['page_id'];
} else { //Otherwise, this page isn't dynamic.
    if ($_SERVER['PHP_SELF'] == '/about_us.php') {
        $img = '/images/about_us_banner.bmp';
    } elseif ($_SERVER['PHP_SELF'] == '/index.php') {
        $img = '/images/index_banner.jpg';
    } elseif ($_SERVER['PHP_SELF'] == '/view_files.php') {
        $img = '/images/view_files_banner.png';
    }
}

//The $img variable now holds your banner URL.

Link to comment
Share on other sites

@dave_sticky- thanks I think this may work - will have a play & see!

 

@bundyxc - Although I like that, the prob is if the number of pages extends, I need to add to the code & is perhaps a little clumsy? Also, the file name part wont work in that way. As when you add a banner to a page via the cms, it creates a dir with the id number of that entry into the pages table and then the filename remains the same.

For example, if I select from my list of pages index.php and upload istock123.jpg, it then adds this to the pages table and an images table. A dir is created numbered 1 if it's the first entry and the image is uploaded.

 

I wonder if something like:

if (isset($_GET['aid'])) { //If this there's a $_GET['aid'] in the URL, this page is dynamic. Consult database for the banner. 
    $sql = "SELECT `page_id` FROM `pages` WHERE `page_name`='" . $_GET['aid'] . "'";
    $query = mysql_query($sql);
    $fetch = mysql_fetch_assoc($query);
    $img = $fetch['page_id'];
} else { //Otherwise, this page isn't dynamic.
  $get = $_SERVER['PHP_SELF'];

    $sql = "SELECT `page_id` FROM `pages` WHERE `page_name`='" . $get = $_SERVER['PHP_SELF'] . "'";
    $query = mysql_query($sql);
    $fetch = mysql_fetch_assoc($query);
    $img = $fetch['page_id'];
}

Would that work?

Link to comment
Share on other sites

That would be perhaps. I guess what I need to do is determine whether the url is an id or page_name, then from there, pass whichever it is into the sql query!? Would this work

 

 

$sql = "SELECT `page_id` FROM `pages` WHERE `page_name`='";
if (!isset($_GET['aid']) {
  $get = $_SERVER['PHP_SELF'];
  
} else {
  $aid  = $_GET['aid'];
}
"'";

Link to comment
Share on other sites

Hi bundyxc, appreciate the time and effort on this one!

 

Basically, all I need to do is grab either the id or page name and pass it to the query, the query will then return the page_id which I tie in with another query (see below), this is used for some code to display the relevant image.

 

When you upload an image to a page, a directory is created and the image uploaded to that dir. So, with the above it would be an image path of something like www.domain.com/banners/1/istock123.jpg

 

Where 1 is the dir created

DROP TABLE IF EXISTS `pages`;
CREATE TABLE IF NOT EXISTS `pages` (
  `page_id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
  `page_name` varchar(255) NOT NULL,
  PRIMARY KEY (`page_id`)
) ENGINE=InnoDB;

DROP TABLE IF EXISTS `banner_ads`;
CREATE TABLE IF NOT EXISTS `banner_ads` (
  `banner_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `page_id` int(10) unsigned NOT NULL DEFAULT '0',
  `file_name` varchar(255) NOT NULL,
  `file_size` int(6) unsigned NOT NULL,
  `file_type` varchar(30) NOT NULL,
  `image_description` varchar(255) DEFAULT NULL,
  `web` varchar(150) DEFAULT NULL,
  `date_entered` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`banner_id`),
  KEY `file_name` (`file_name`),
  KEY `date_entered` (`date_entered`)
) ENGINE=InnoDB;

I hope that makes sense?

Link to comment
Share on other sites

Of course. I'm actually headed to bed after I post this. It's about 5am, and I need to be up by 8am. haha. I swear, I'm almost too passionate about PHP.

 

Anyway, try this:

 

<?
if (isset($_GET['aid'])) {
$id = $_GET['aid'];
$fetch = mysql_fetch_assoc(mysql_query("SELECT `page_name` FROM `pages` WHERE `page_id`='" . $id . "'"));
$name = $fetch['page_name'];
} else {
$name = $_SERVER['PHP_SELF'];
$fetch = mysql_fetch_assoc(mysql_query("SELECT `page_id` FROM `pages` WHERE `page_name`='" . $name . "'"));
$id = $fetch['page_id'];
}
print('Page ID: ' . $id . '<br />Page Name: ' . $name;
?>

Link to comment
Share on other sites

I think that's it! Thank bundyxc.

 

Just one last thing, how do I just get the file name as that returns the whole path. I've the following but it doesn't work, it just says page name is array rather than the page name!

 

$url = $_SERVER["PHP_SELF"];
$name = Explode('/', $url);
$name[count($name) - 1];

#$name = $_SERVER['PHP_SELF'];
$query = "SELECT `page_id` FROM `pages` WHERE `page_name`='" . $name . "'";

If i echo $name it shows the correct file name. Am I being stupid?

Link to comment
Share on other sites

$url = $_SERVER["PHP_SELF"];
$name = Explode('/', $url);
$name[count($name) - 1];

#$name = $_SERVER['PHP_SELF'];
$query = "SELECT `page_id` FROM `pages` WHERE `page_name`='" . $name . "'";

 

2 ways of making this work...

 

1. Line 3, change to

$name = $name[count($name) - 1];

 

2. In your SQL Query, change $name to

$name[count($name) -1];

 

Your choice really. Both should work (but not at the same time)!

Link to comment
Share on other sites

Thanks dave_sticky! I think im now getting somewhere. One odd thing is that although the code works in sql if I run the query direct, it wont run in the script.

if (isset($_GET['aid'])) {
$id = $_GET['aid'];
$query = "SELECT `page_name` FROM `pages` WHERE `page_id`='" . $id . "'";
#echo $query;
$result = mysql_query($query);
$name = $row['page_name'];	

while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) {
	$default_image_sql = 'SELECT image_description, banner_id, page_id, file_name, web FROM banner_ads WHERE page_id = '.$id.'';
	echo $default_image_sql;

	$default_image_rs     =  mysql_query($default_image_sql) or die(mysql_error());
	$default_image_row    =  mysql_fetch_array($default_image_rs);
	$online_images_total_sql = 'SELECT count(file_name) AS total_images FROM banner_ads WHERE page_id = '.$id.'';
	echo $online_images_total_sql;
	$online_images_total_rs  = mysql_query($online_images_total_sql) or die(mysql_error());
	$total_images_uploaded   = mysql_fetch_array($online_images_total_rs);

	$image_available = $total_images_uploaded['total_images'];
	echo $image_available;

	if ($image_available == 0) {
	}else{
			// There is an image so display it
			$imgfile = 'banners/'.$default_image_row['page_id'].'/'.$default_image_row['file_name']; 
			if(file_exists($imgfile) && $image = @getimagesize($imgfile)) { 
				$t_imgfile='banners/'.$default_image_row['page_id'].'/t_'.$default_image_row['file_name']; 

				$web =  $default_image_row['web'];

				if ($web !=""){				
					echo '<a href="http://'.$web.'"><img src="'.$t_imgfile.'" alt="'.$default_image_row['image_description'].'" border="0" /></a>';
				} else {
					echo '<img src="'.$t_imgfile.'" alt="'.$default_image_row['image_description'].'" border="0" />';
				}

			}		
	}		

}


} else {

$url = $_SERVER["PHP_SELF"];
$name = Explode('/', $url);
$name[count($name) - 1];
$name = $name[count($name) - 1];

$query = "SELECT `page_id` FROM `pages` WHERE `page_name`  = '" . $name . "'"; ####THIS LINE###
echo $query.'<hr/>';
$result = mysql_query($query) or die(mysql_error());
$id = $row['page_id'];	

while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) {
	$default_image_sql = 'SELECT image_description, banner_id, page_id, file_name, web FROM banner_ads WHERE page_id = '.$name.'' ;
	#echo $default_image_sql;
	$default_image_rs     =  mysql_query($default_image_sql) or die(mysql_error());
	$default_image_row    =  mysql_fetch_array($default_image_rs);
	$online_images_total_sql = 'SELECT count(file_name) AS total_images FROM banner_ads WHERE page_id = '.$name.'';
	#echo $online_images_total_sql;
	$online_images_total_rs  = mysql_query($online_images_total_sql) or die(mysql_error());
	$total_images_uploaded   = mysql_fetch_array($online_images_total_rs);

	$image_available = $total_images_uploaded['total_images'];
	echo $image_available;

	if ($image_available == 0) {
	}else{
			// There is an image so display it
			$imgfile = 'banners/'.$default_image_row['page_id'].'/'.$default_image_row['file_name']; 
			if(file_exists($imgfile) && $image = @getimagesize($imgfile)) { 
				$t_imgfile='banners/'.$default_image_row['page_id'].'/t_'.$default_image_row['file_name']; 

				$web =  $default_image_row['web'];

				if ($web !=""){				
					echo '<a href="http://'.$web.'"><img src="'.$t_imgfile.'" alt="'.$default_image_row['image_description'].'" border="0" /></a>';
				} else {
					echo '<img src="'.$t_imgfile.'" alt="'.$default_image_row['image_description'].'" border="0" />';
				}

			}		
	}		

}	

}
print 'Page ID: ' . $id . '<br />Page Name: ' . $name;

I've marked the line which fails. If I browse to the page, it should return the page_id, browse to the dir with that number and then show the image. The query is fine in mysql but wont work above. have tried LIKE %% but that too fails.

 

Why is that? Am at a loss!

 

Thanks

Link to comment
Share on other sites

Hmmm, Interesting... See Comments below...

 

$url = $_SERVER["PHP_SELF"];
$name = Explode('/', $url);
$name[count($name) - 1]; // Delete this line... Doesn't need to be there, and don't know if it will be causing problems
$name = $name[count($name) - 1];

Other than that, when you say it doesn't work, what do you mean? Do you get an error message from the

or die(mysql_error());

bit?

 

 

 

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.