PDA

View Full Version : Problem with SQL query inside a php function


EquinoxWorld
04 Aug 2011, 16:49
Hello everyone, I am trying to wrap a SQL query with a function to later pass as a variables into one of my templates. Whenever I run this simple query (for example to get the number of the contest) not wrapped as a function, it returns the value fine (which is 1). The following works perfect:


<?php
define('CSRF_PROTECTION', true);
require_once('./global.php');
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
?>


When I try to wrap a function around it and try and call it to verify the function is printing out what is expected I get a 500 Internal Server Error using the following code:


<?php
define('CSRF_PROTECTION', true);

function sotw_number() {
require_once('./global.php');
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}

sotw_number();
?>


Even using the following code I get the 500 internal server error.


<?php
define('CSRF_PROTECTION', true);

function sotw_number($dummy) {
require_once('./global.php');
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}

sotw_number(true);
?>


My question is how can I get the function to "display" the results correctly having a SQL query inside? Any ideas anyone? If anyone has any input or feedback please don't hesitate to share. :)

Thanks for your time everyone.

kh99
04 Aug 2011, 17:05
I think maybe global.php doesn't work right when included inside a function. You could do this:

<?php
define('CSRF_PROTECTION', true);
require_once('./global.php');

function sotw_number($dummy) {
global $vbulletin;

$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}

sotw_number(true);
?>
(BTW, I had a feeling the code I posted last night was undoing something you were trying to do :) )

EquinoxWorld
04 Aug 2011, 17:07
I think maybe global.php doesn't work right when included inside a function. You could do this:

<?php
define('CSRF_PROTECTION', true);
require_once('./global.php');

function sotw_number($dummy) {
global $vbulletin;

$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}

sotw_number(true);
?>
(BTW, I had a feeling the code I posted last night was undoing something you were trying to do :) )

xD That worked PERFECT! Using a function instead of a do REQUEST does seem more reasonable hu? :) Thanks for your help :D

--------------- Added 1312478868 at 1312478868 ---------------

OK well almost works :( . It works but it displays the value at the top left corner of every page of that script...

Any ideas why this would be happening?

This the plugin I am using:


require_once('./intuitco/cotw/functions/cotw_func_contest_num.php');
$cotw_sotw_contests_number = sotw_number(true);
vB_Template::preRegister('COTW_SOTW','cotw_sotw_contests_number' => $cotw_sotw_contests_number);

cellarius
04 Aug 2011, 17:45
Because you use echo. You can't use echo to output things in vB properly. You need to register the variable for template use.

EquinoxWorld
04 Aug 2011, 17:58
Because you use echo. You can't use echo to output things in vB properly. You need to register the variable for template use.

OK. Would you mind explaining please a bit further? :) I know I can use return instead of echo but how do you register a function as a variable for use in a template? It took me a while to get the functions to work properly but now I can't use them in the template. I am using this plugin:

ob_start();
require_once('./intuitco/cotw/functions/cotw_func_contest_num.php');
$cotw_sotw_contests_number = sotw(true);
ob_end_clean();
vB_Template::preRegister('OFTW_SOTW',array('cotw_sotw_contests_number' => $cotw_sotw_contests_numbe


And this is the php file itself: If I just call the function in this file and call it in my browser I do get the correct value btw.


<?php
define('CSRF_PROTECTION', true);
$curdir = getcwd ();
chdir('/var/xxxxx/xxx/aniworlds.net/subdomains/laboratories/httpdocs');
require_once('./global.php');
chdir ($curdir);
//===================================Contests Number==================================//

//================================First Contest:Signature Of The Week=======================================//
//==============================NOTHING IS CHANGED BEYOND THIS LINE!!!!!====================================//
//================================================================================ ==========================//
function sotw($dummy)
{
global $vbulletin;
$result = $vbulletin->db->query("SELECT id FROM cotw_sotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
echo $row[0];
}

//================================================================================ =========================//
//===================================Second Contest:Avatar Of The Week=====================================//
//==============================NOTHING IS CHANGED BEYOND THIS LINE!!!!!====================================//
//================================================================================ ==========================//
function aotw($dummy)
{
global $vbulletin;
$result = $vbulletin->db->query("SELECT id FROM cotw_aotw_time_end ORDER BY id DESC LIMIT 1");
$row = mysql_fetch_row($result);
return $row[0];
}
//================================================================================ ==========================//
//=================================END OF PRINTING CURRENT CONTEST NUMBER===================================//
//================================================================================ ==========================//
?>