Go Back   SitePoint Forums > Forum Index > Program Your Site > PHP
Newsletter FAQ Members List Calendar Mark Forums Read

New to SitePoint Forums? Register here for free!

SitePoint Sponsor
 
Reply
 
Thread Tools Display Modes
Old Nov 8, 2009, 13:50   #1
co.ador
SitePoint Evangelist
 
Join Date: Apr 2009
Posts: 567
undefined variables $PHP_SELF help!

i am modifying a script that catches how many users are online in that corrent web page.

Well I am getting this three errors the script i am using is below the error messages can anyone tell me how can i defined this variables, I am using PHP 5 in case these variables has changed or didn't exist in former PHP versions

Quote:
Notice: Undefined variable: REMOTE_ADDR in C:\wamp\www\nyhungry\includes\header.php on line 62

Notice: Undefined variable: PHP_SELF in C:\wamp\www\nyhungry\includes\header.php on line 62

Notice: Undefined variable: PHP_SELF in C:\wamp\www\nyhungry\includes\header.php on line 74
1 Hungry online //

PHP Script:

PHP Code:

<?php 

//fill in some basic info
$server = "localhost";
$db_user = "username";
$db_pass = "password";
$database = "users";
$timeoutseconds = 300;

//get the time
$timestamp = time();
$timeout = $timestamp-$timeoutseconds;

//connect to database
mysql_connect($server, $db_user, $db_pass);

//insert the values
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
('$timestamp','$REMOTE_ADDR','$PHP_SELF')"
);
if(!(
$insert)) {
print
"Useronline Insert Failed > ";
}

//delete values when they leave
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
if(!(
$delete)) {
print
"Useronline Delete Failed > ";
}

//grab the results
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'");
if(!(
$result)) {
print
"Useronline Select Error > ";
}

//number of rows = the number of people online
$user = mysql_num_rows($result);


//spit out the results
mysql_close();
if(
$user == 1) {
print(
"$user user online\n");
} else {
print(
"$user users online\n");
}
?>
Thank you in advance..
co.ador is offline   Reply With Quote
Old Nov 8, 2009, 14:14   #2
logic_earth
¬.¬ shoooo...
 
logic_earth's Avatar
 
Join Date: Oct 2005
Location: CA
Posts: 6,943
Gah....Sitepoint it putting it all lower case
Code:
$_server['remote_addr']
$_server['php_self']
logic_earth is offline   Reply With Quote
Old Nov 8, 2009, 22:42   #3
frank1
SitePoint Guru
 
frank1's Avatar
 
Join Date: Oct 2005
Posts: 975
i think u r missing whole part of tutorials ...i have not seen tutorials but may be that tutorial might have said to initilize those two CONSTANT somewhere in passage form which u missed....
REMOTE_ADDR constant itself doesnt have any special meaning unless used with some SUPER varibales like $_SERVER
so me be
DEFINE ('REMOTE_ADDR', $_server['remote_addr']);
DEFINE ('PHP_SELF', $_server['php_self']);
will help
frank1 is offline   Reply With Quote
Old Nov 8, 2009, 23:00   #4
PHPycho
SitePoint Guru
 
PHPycho's Avatar
 
Join Date: Dec 2005
Posts: 661
$PHP_SELF doesnt many any sense, unless you do the following:
PHP Code:

foreach($_SERVER as $key => $val){

$
$key = $val;
}
Now you can use $PHP_SELF as an alias of $_SERVER['PHP_SELF'].

Thanks
PHPycho is online now   Reply With Quote
Old Nov 9, 2009, 07:43   #5
co.ador
SitePoint Evangelist
 
Join Date: Apr 2009
Posts: 567
I have the variables defined as you guys has given me and I have place into the code, But there is a parse error in line 65

PHP Code:

DEFINE ('REMOTE_ADDR', $_server['remote_addr']);
DEFINE ('PHP_SELF', $_server['php_self']);

//get the time
$timestamp = time();
$timeout = $timestamp-$timeoutseconds;

//connect to database
mysql_connect($server, $db_user, $db_pass);

//insert the values
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
('$timestamp','$_server['remote_addr'],'$_server['php_self']'"
); //Line 65 where parse error accurs Help!!!
if(!($insert)) {
print
"Useronline Insert Failed > ";
}
co.ador is offline   Reply With Quote
Old Nov 9, 2009, 08:15   #6
co.ador
SitePoint Evangelist
 
Join Date: Apr 2009
Posts: 567
guys I fixed it already thank you!!

Code:
file='{$_server['php_self']}'"
One more thing

I have the header.php script included in index.php. Header.php contain the whole script we have been working here which is

header.php

PHP Code:


//fill in some basic info
$server = "localhost";
$db_user = "username";
$db_pass = "password";
$database = "users";
$timeoutseconds = 300;

//get the time
$timestamp = time();
$timeout = $timestamp-$timeoutseconds;

//connect to database
mysql_connect($server, $db_user, $db_pass);

$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
('$timestamp','{$_server['remote_addr']}','{$_server['php_self']}'"
);
if(!(
$insert)) {
print
"Useronline Insert Failed > ";
}

//delete values when they leave
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
if(!(
$delete)) {
print
"Useronline Delete Failed > ";
}

//grab the results
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='{$_server['php_self']}'");
if(!(
$result)) {
print
"Useronline Select Error > ";
}

//number of rows = the number of people online
$user = mysql_num_rows($result);


//spit out the results
mysql_close();
if(
$user == 1) {
print(
"$user user online\n");
} else {
print(
"$user users online\n");
}
?>
We have fixed the header.php but when i open index.php which header is included it display the following error messages. that's after all the fixed we have done it keeps throwing message. The script apparently is working, becuase below the messabes it says as the quote below

Quote:
0 users online
This is index.php
PHP Code:

<?php include("includes/header.php");?>

//Rest of the code...
When index.php is open which header.php is included in is spit the following error messages

Quote:
Notice: Undefined variable: _server in C:\wamp\www\nyhungry\includes\header.php on line 53

Notice: Undefined variable: _server in C:\wamp\www\nyhungry\includes\header.php on line 54

Notice: Undefined variable: _server in C:\wamp\www\nyhungry\includes\header.php on line 65

Notice: Undefined variable: _server in C:\wamp\www\nyhungry\includes\header.php on line 65
Useronline Insert Failed >
Notice: Undefined variable: _server in C:\wamp\www\nyhungry\includes\header.php on line 77
0 users online
?>

But i as put in the quote above

Quote:
0 user online
below all the 5 notices 0 user online is displaying as an indication that the script is working but why all this warning and notices still displaying?
co.ador is offline   Reply With Quote
Old Nov 9, 2009, 08:50   #7
co.ador
SitePoint Evangelist
 
Join Date: Apr 2009
Posts: 567
Thank you I got that the Global Variables can not be lower cases thank you.. Need to learn more about parsing do you know of a good tutorial about parsing...

Because the curly braces did the job here..

One more thing is not inserting why?


Quote:
Useronline Insert Failed > 0 users online
?>
the whole code above is working now with all the fixes we have done...

the final draft come to this

PHP Code:




//fill in some basic info
$server = "localhost";
$db_user = "username";
$db_pass = "password";
$database = "users";
$timeoutseconds = 300;

DEFINE ('REMOTE_ADDR', $_SERVER['REMOTE_ADDR']);
DEFINE ('PHP_SELF', $_SERVER['PHP_SELF']);

//get the time
$timestamp = time();
$timeout = $timestamp-$timeoutseconds;

//connect to database
mysql_connect($server, $db_user, $db_pass);

//insert the values
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
('$timestamp','{$_SERVER['REMOTE_ADDR']}','{$_SERVER['PHP_SELF']}'"
);
if(!(
$insert)) {
print
"Useronline Insert Failed > ";
}

//delete values when they leave
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
if(!(
$delete)) {
print
"Useronline Delete Failed > ";
}

//grab the results
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='{$_SERVER['PHP_SELF']}'");
if(!(
$result)) {
print
"Useronline Select Error > ";
}

//number of rows = the number of people online
$user = mysql_num_rows($result);


//spit out the results
mysql_close();
if(
$user == 1) {
print(
"$user Hungry online\n");
} else {
print(
"$user users online");
}
?>

This is the insertion point:

PHP Code:

//insert the values

$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
('$timestamp','{$_SERVER['REMOTE_ADDR']}','{$_SERVER['PHP_SELF']}'"
);
if(!(
$insert)) {
print
"Useronline Insert Failed > ";
here at the Insert point if mysql_db_query is not true then it will print "Useronline Insert Failed...


Now one of the things I have is that I open an connection in header.php

Code:
//fill in some basic info
$server = "localhost"; 
$db_user = "username"; 
$db_pass = "password"; 
$database = "users"; 
$timeoutseconds = 300;
thenk I include header.php - with a connection to the localhost already- I include it in index.php

Index.php has a connection to the same database as well so now we have two connection I know it is unnecessary having two connection but because of my lack of ability to adapt the tutorial connection to the one i have already i haven't done it.

$timeoutseconds = 300; variable and it's numeric value has terrified me to try..

Well I have tried doing this.

Index.php

PHP Code:

<?php include("includes/header.php");?>

<?php
require_once("includes/connection.php");?>
Remember header.php has a connection pluse the connection.php required in index.php makes it two

The connection.php looks like this.

PHP Code:

<?php require("constant.php");

$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
if(!
$connection){
die(
"Database connection failed:" . mysql_error());
}
mysql_set_charset('utf8',$connection);
$db_select = mysql_select_db(DB_NAME, $connection);
if(!
$db_select){
die(
"Database selection failed: " . mysql_error());
}
[/
code]


Costant.php is

[code]<?php

// Database Constants
defined('DB_SERVER') ? null : define("DB_SERVER", "localhost");
defined('DB_USER')   ? null : define("DB_USER", "username");
defined('DB_PASS')   ? null : define("DB_PASS", "password");
defined('DB_NAME')   ? null : define("DB_NAME", "ohr");

?>

Still the connection is failing I don't know what could be the cause...
co.ador is offline   Reply With Quote
Old Nov 9, 2009, 10:30   #8
frank1
SitePoint Guru
 
frank1's Avatar
 
Join Date: Oct 2005
Posts: 975
ok i am not sure why r u hard coding all things in header.php and again making file called connection
better make connection file and then may be include connection in header
may be connection like this

Code:
DEFINE ('DB_USER', 'username');
DEFINE ('DB_PASSWORD', 'password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'dbname');


if ($dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD)) { // Make the connnection.

	if (!mysql_select_db (DB_NAME)) { // If it can't select the database.
	
		// Handle the error.
error_handler (mysql_errno(), 'Could not select the database: ' . mysql_error());
//just echo message	
				exit();
		
	} // End of mysql_select_db IF.
	
} else { // If it couldn't connect to MySQL.

error_handler (mysql_errno(), 'Could not connect to the database: ' . mysql_error());
	exit();
	
} // End of $dbc IF.
frank1 is offline   Reply With Quote
Old Nov 9, 2009, 11:02   #9
co.ador
SitePoint Evangelist
 
Join Date: Apr 2009
Posts: 567
I am just working with header.php

When i open header.php alone which is below it will still display the same errors...

Uch....

Your connection set up you have done in your last post is included here but still it display
Quote:
Useronline Insert Failed > Useronline Delete Failed > Useronline Select Error >
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\nyhungry\includes\header.php on line 104
users online
PHP Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link type="text/css" href="stylesheets/webpageprueba.css" rel="stylesheet" media="all" />
<title>store.com</title>
<script type="text/javascript" src="scripts/prototype.js"></script>
<script type="text/javascript" src="scripts/rating.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
(
function()
{
  var default_image = $('td.largethumb img').attr('src');
  $('table.smallthumbs a').mouseover(function() { $('td.largethumb img').attr('src', $('img', this).attr('src')); });
});
</script>
</head>


<body>


<div id="right">
<?php
DEFINE
('DB_USER', 'root');
DEFINE ('DB_PASSWORD', 'feros');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'db_name');


if (
$dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD)) { // Make the connnection.

    
if (!mysql_select_db (DB_NAME)) { // If it can't select the database.
    
        // Handle the error.
error_handler (mysql_errno(), 'Could not select the database: ' . mysql_error());
//just echo message    
                
exit();
        
    }
// End of mysql_select_db IF.
    
} else { // If it couldn't connect to MySQL.

error_handler (mysql_errno(), 'Could not connect to the database: ' . mysql_error());
    exit();
    
}
// End of $dbc IF.
         




//fill in some basic info

$timeoutseconds = 300;

DEFINE ('REMOTE_ADDR', $_SERVER['REMOTE_ADDR']);
DEFINE ('PHP_SELF', $_SERVER['PHP_SELF']);

//get the time
$timestamp = time();
$timeout = $timestamp-$timeoutseconds;

//insert the values
$insert = mysql_query( "INSERT INTO useronline VALUES
('$timestamp','{$_SERVER['REMOTE_ADDR']}','{$_SERVER['PHP_SELF']}'"
. mysql_error());
if(!(
$insert)) {
print
"Useronline Insert Failed > " ;
}


//delete values when they leave
$delete = mysql_query("DELETE FROM useronline WHERE timestamp<$timeout" . mysql_error());
if(!(
$delete)) {
print
"Useronline Delete Failed > ";
}

//grab the results
$result = mysql_query("SELECT DISTINCT ip FROM useronline WHERE file='{$_SERVER['PHP_SELF']}'" . mysql_error());
if(!(
$result)) {
print
"Useronline Select Error > ";
}

//number of rows = the number of people online
$user = mysql_num_rows($result);


//spit out the results
mysql_close();
if(
$user == 1) {
print(
"$user Hungry online\n");
} else {
print(
"$user users online");
}
?>


</div>

</body>
</html>
by the way this is the link to the tutorial

http://www.spoono.com/php/tutorials/tutorial.php?id=16



the sql database as in the tutorial is as below


Quote:
CREATE TABLE useronline (
timestamp int(15) DEFAULT '0' NOT NULL,
ip varchar(40) NOT NULL,
file varchar(100) NOT NULL,
PRIMARY KEY (timestamp),
KEY ip (ip),
KEY file (file)
);
but in mysql some how I don konw how to put
KEY ip (ip)
KEY file (file)

but the actual database dump I have in phpmyadmin is as:

Quote:
CREATE TABLE IF NOT EXISTS `useronline` (
`timestamp` int(15) NOT NULL,
`IP` varchar(40) NOT NULL,
`file` varchar(100) NOT NULL,
PRIMARY KEY (`timestamp`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
How can I re-do the database so it contain:

KEY ip (ip)
KEY file (file)


That could be one of the issues.
[/quote]
co.ador is offline   Reply With Quote
Old Nov 9, 2009, 19:47   #10
frank1
SitePoint Guru
 
frank1's Avatar
 
Join Date: Oct 2005
Posts: 975
ok i have found that tutorial use much old function
rather try this
http://www.phpeasystep.com/phptu/9.html

i have tested this once and i worked at that time and may be work now as well
frank1 is offline   Reply With Quote
Reply

Bookmarks

« Previous Thread | Next Thread »

Thread Tools
Display Modes

 
Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Sponsored Links
 
Forum Jump


All times are GMT -7. The time now is 03:26.


Powered by vBulletin® Version 3.7.1
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Copyright 1998-2009, SitePoint Pty Ltd. All Rights Reserved