vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   Php problem, not getting the result that I want. Help please (https://vborg.vbsupport.ru/showthread.php?t=156791)

Kiint 09-01-2007 03:28 PM

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); 


Opserty 09-01-2007 04:23 PM

PHP Code:

if(strlen($row[q_stepdesc])) 

Shouldn't you be comparing the string length to something (like an integer)? or?

Kiint 09-01-2007 04:36 PM

Quote:

Originally Posted by Opserty (Post 1330209)
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.....

Marco van Herwaarden 09-01-2007 05:13 PM

You will need to place the following inside a loop (a while loop for example):
PHP Code:

     $goal_rowset $db->fetch_array($goal_result); 


Kiint 09-01-2007 05:39 PM

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

Opserty 09-01-2007 06:21 PM

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 :p)

Kiint 09-01-2007 06:28 PM

Quote:

Originally Posted by Opserty (Post 1330280)
[php]

Does that work? (You should really layout your code better too :p)

you absolute star, worked great.

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

:D:D:D

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)


All times are GMT. The time now is 12:59 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.01134 seconds
  • Memory Usage 1,770KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (5)bbcode_php_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (7)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.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
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete