Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
Register FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 08-04-2011, 02:49 PM
EquinoxWorld EquinoxWorld is offline
 
Join Date: Nov 2009
Location: Naples
Posts: 354
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Problem with SQL query inside a php function

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 Code:
<?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 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 Code:
<?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.
Reply With Quote
  #2  
Old 08-04-2011, 03:05 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I think maybe global.php doesn't work right when included inside a function. You could do this:

PHP Code:
<?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 )
Reply With Quote
  #3  
Old 08-04-2011, 03:07 PM
EquinoxWorld EquinoxWorld is offline
 
Join Date: Nov 2009
Location: Naples
Posts: 354
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by kh99 View Post
I think maybe global.php doesn't work right when included inside a function. You could do this:

PHP Code:
<?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

--------------- Added [DATE]1312478868[/DATE] at [TIME]1312478868[/TIME] ---------------

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:

PHP Code:
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); 
Reply With Quote
  #4  
Old 08-04-2011, 03:45 PM
cellarius's Avatar
cellarius cellarius is offline
 
Join Date: Aug 2005
Posts: 1,987
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Because you use echo. You can't use echo to output things in vB properly. You need to register the variable for template use.
Reply With Quote
  #5  
Old 08-04-2011, 03:58 PM
EquinoxWorld EquinoxWorld is offline
 
Join Date: Nov 2009
Location: Naples
Posts: 354
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by cellarius View Post
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:
PHP Code:
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 Code:
<?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===================================// 
//==========================================================================================================// 
?>
Reply With Quote
Reply


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

Forum Jump


All times are GMT. The time now is 02:38 AM.


Powered by vBulletin® Version 3.9.0
Copyright ©2000 - 2017, vBulletin Solutions Inc.