PDA

View Full Version : modification questions: capture data on load with javascript and php


stonyarc
11-11-2005, 10:10 PM
Hello,

I'm working on a new modification and I'm having troubles with 2 items.


1. Doesn't vbulletin allow to run scripts from within a new subdirectory.
My new modification would require several separate php files to run. If I drop them in the vbtraffic subfolder they are not usable.

What is the way to fix this. I cannot put 15 files in the root of the forum.


2. As I want to capture information on the start of the forum I created the following code.


<script language="Javascript">
function replaceText(text){
while(text.lastIndexOf("&"; > 0){
text = text.replace('&', '[vbtraffic]');
}
return text;
}
var web_referrer = replaceText(document.referrer);
vbtraffic = new Image(1,1);
vbtraffic.src = "./vbtraffic/counter.php?sw="+screen.width+"&sc="+screen.colorDepth+"&referer="+web_referrer+"&page="+location.href;
var imgsrc = vbtraffic.src
document.write('<img src=' + imgsrc + '>');
</script>

(if it works i'll use a plugin now is temporary put in the FORUMHOME)

The basic counter.php code is

<?php
// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// ##################### DEFINE IMPORTANT CONSTANTS #######################
//define('NO_REGISTER_GLOBALS', 1);
//define('GET_EDIT_TEMPLATES', true);

// ########################## REQUIRE BACK-END ############################
require_once('../global.php');

global $vbulletin;

if(!isset($_COOKIE['vbtraffic_hash'])){
$hash = md5(time());
}else{
$hash = $_COOKIE['vbtraffic_hash'];
}

if($db->num_rows("select hash from" . TABLE_PREFIX . "vbtraffic_session where hash='".$hash."'") > 0){
$db->query_write("update vbtraffic_session set time='".time()."' where `hash`='".$hash."'");
}else{
$db->query_write("insert into vbtraffic_session values('".$hash."', '".time()."')");
}
setcookie("vbtraffic_hash", $hash, time()+43200);

?>

it's also tested with the counter in the root folder and it won't insert (./global.php).

Whatever I do this won't work.

Any help is appreciated

Marco van Herwaarden
11-12-2005, 05:20 AM
Replace:
require_once('../global.php');
by
chdir('./..');
require_once('./global.php');

stonyarc
11-12-2005, 10:39 AM
Replace:
require_once('../global.php');
by
chdir('./..');
require_once('./global.php');


Thanks,
But the insert and the cookie don't get set that way either. I think the way that I'm calling the script doesn't work with creating the fake image.

stonyarc
11-13-2005, 06:24 PM
I found it.

The error were caused by a configuration in the php.ini

output_buffering should be on instead of off otherwise the cookie isn't set.

It's impossible to call a PHP function directly from javascript but there is a nice workaround for this.

Here is the code to fix it (this one works with vbulletin, if you build one with an image it doesn't work).


<script language="Javascript">
var myUrl="./function.php?sw="+screen.width+"&sc="+screen.colorDepth+"&referer="+document.referrer+"&page="+location.href;
var iframe1=document.createElement("iframe");
iframe1.src=myUrl;
document.body.appendChild(iframe1);
iframe1.removeNode(true); //hides the frame from the user
</script>

Enjoy

cavyspirit
09-04-2006, 09:40 PM
I'm trying to get a variable that I need for the user's screen width elsewhere in the php. How can I adapt this for that?