Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 09-01-2007, 03:28 PM
Kiint Kiint is offline
 
Join Date: Nov 2006
Posts: 191
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Php problem, not getting the result that I want. Help please

I'm currently modifying a piece of code, but I can't get it to work within vbulletin, it keeps giving me the wrong results.

What the code below is basically doing is getting a list of quests from the database, and putting them into templates and then displaying the results in a table, that part works great, but the part that isn't is the Percentage of what is complete.

For each row that it builds it should be checking another database table, adding up how many rows there are for each q_id and from working out how many of those rows are marked as complete it will make a percentage which is then passed into my template. However it doesn't process the highlighted part in the code below and gives me a value of zero for both of the variables, If i take out the IF statements it will give me results for everything (which is bad), so I know it's the conditions that are wrong...but why?

Any help is appreciated.

PHP Code:
  $result $db->query("
 
    SELECT `fname`, `id`, `q_id`, `priority`, `q_desc`, `char_id` 
    FROM quests 
    LEFT JOIN roster ON `char_id` = `id`
    WHERE `priority` > 0 AND `complete` = 0 
    ORDER BY `priority`"
);
 
     while(
$thisquest $db->fetch_array($result)) {
  
$q_id $thisquest[q_id];
 
// Find out percentage complete and store in $pct
 
    
$goal 0;
    
$current 0;
    
$goal_result $db->query("
 
    SELECT `q_compl`, `q_stepdesc` 
    FROM `quests_ext` 
    WHERE `q_id` = '
$q_id'");
 
    if(
$goal_result)
    {
     
$goal_rowset $db->fetch_array($goal_result);
     
$numrows $db->num_rows($goal_result);
 
     
$gr 0;
     while(
$gr <= $numrows) {
      
$row $goal_rowset[$gr];
 
   
// THIS PART NOT WORKING AS IT SHOULD
      
if(strlen($row[q_stepdesc]))
      {
       
$goal++;
       if(
$goal_rowset[$gr][q_compl]) 
       {
       
$current++;
       } 
      }
   
// END OF NOT WORKING CODE
 
      
$gr++;  
     }   
 
    if(
$goal != 0) {
     
$pct round(($current $goal) * 100);
     }
    else {
     
$pct 0;
     }
    if(
$pct 100$pct 100
 
 
    }
 
 
  eval(
'$questlist .= "' fetch_template('quest_questlist') . '";');
  }
  
$db->free_result($result); 
Reply With Quote
  #2  
Old 09-01-2007, 04:23 PM
Opserty Opserty is offline
 
Join Date: Apr 2007
Posts: 4,103
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
if(strlen($row[q_stepdesc])) 
Shouldn't you be comparing the string length to something (like an integer)? or?
Reply With Quote
  #3  
Old 09-01-2007, 04:36 PM
Kiint Kiint is offline
 
Join Date: Nov 2006
Posts: 191
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Opserty View Post
PHP Code:
if(strlen($row[q_stepdesc])) 
Shouldn't you be comparing the string length to something (like an integer)? or?
I believe this bit is to check whether there are any contents in the q_stepdesc (quest_stepDescription) users have a habit of just deleting the text rather than the record, so you are left with a blank description.

I'm not quite sure of the formatting on searching through results stored in an array, but i think the code above is basically checking [row number] and [q_stepdesc] on each row to see if that record has text in it, if so it will run the code that follows...which it isn't.....
Reply With Quote
  #4  
Old 09-01-2007, 05:13 PM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You will need to place the following inside a loop (a while loop for example):
PHP Code:
     $goal_rowset $db->fetch_array($goal_result); 
Reply With Quote
  #5  
Old 09-01-2007, 05:39 PM
Kiint Kiint is offline
 
Join Date: Nov 2006
Posts: 191
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

i just tried putting it into a loop but with the same results, but from what i can see...is it needed as the previous query is looping and doesn't that one store the complete list in an array? which I am then searching through.

thanks for any advice given
Reply With Quote
  #6  
Old 09-01-2007, 06:21 PM
Opserty Opserty is offline
 
Join Date: Apr 2007
Posts: 4,103
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
$result $db->query_read("
            SELECT `fname`, `id`, `q_id`, `priority`, `q_desc`, `char_id` 
            FROM quests 
            LEFT JOIN roster ON `char_id` = `id`
            WHERE `priority` > 0 AND `complete` = 0 
            ORDER BY `priority`"
);
 
while(
$thisquest $db->fetch_array($result))
{
    
$q_id $thisquest[q_id];
    
// Find out percentage complete and store in $pct
    
    
$goal 0;
    
$current 0;
    
$goal_result $db->query("SELECT `q_compl`, `q_stepdesc` FROM `quests_ext` WHERE `q_id` = '$q_id'");
    
    if(
$goal_result)
    {
      
        
$numrows $db->num_rows($goal_result);
        
        
        while(
$goal_rowset $db->fetch_array($goal_result))
        {
            
           
            
// THIS PART NOT WORKING AS IT SHOULD
            
if(strlen($goal_rowset['q_stepdesc']))
            {
                
$goal++;
                if(
$goal_rowset['q_compl']) 
                {
                    
$current++;
                } 
            }
            
// END OF NOT WORKING CODE
           
            
$gr++;  
        }   
        
        if(
$goal != 0)
        {
            
$pct round(($current $goal) * 100);
        }
        else
        {
            
$pct 0;
        }
        if(
$pct 100)
        {
            
$pct 100;
        }
    
    
    }
    
     
    eval(
'$questlist .= "' fetch_template('quest_questlist') . '";');
}
$db->free_result($result); 
Does that work? (You should really layout your code better too )
Reply With Quote
  #7  
Old 09-01-2007, 06:28 PM
Kiint Kiint is offline
 
Join Date: Nov 2006
Posts: 191
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Opserty View Post
[php]

Does that work? (You should really layout your code better too )
you absolute star, worked great.

Thanks, I'll be comparing the code now to see where I went wrong.



I've been trying to put all the code above into a function call so that I can set different searches but use the same templates etc but have run into one small problem (again)

The code originally ran and put the results into a table built up from the templates and displayed the code with the style from my site and stored it in $questlist which I displayed in my main template. Worked great.

but now that I have put the code into function fetch_mainquestlist() which returns the results in $questlist it doesn't have any of the formatting from my vbulletin style, it's just a flat table with no style to it...

I believe it is the quest_header template which calls in things like: cellpadding="$stylevar[cellpadding]" so why doesn't my function include these yet the rest of the page does?

do i have to do something to return $questlist; at the end of my function, or something to the statement in my code that calls it: $questlist = fetch_questlist();

any help is really appreciated.
(i'm pretty new to this as you've probably guessed)
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 12:08 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.03720 seconds
  • Memory Usage 2,256KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (5)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (7)post_thanks_box
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (7)post_thanks_postbit_info
  • (7)postbit
  • (7)postbit_onlinestatus
  • (7)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete