View Single Post
  #1  
Old 08-12-2004, 12:27 PM
Ocean's Avatar
Ocean Ocean is offline
 
Join Date: Mar 2004
Posts: 208
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default I'm having a PHP/MySQL problem. Help would be appreciated! :)

Hi! Okay, here's the background... I'm trying to modify an existing hack - Who Viewed This Thread (https://vborg.vbsupport.ru/showthread.php?t=61222).

Now, this hack creates an additional field ("whoviewed") in the "thread" table, and checks/stores UserIDs of people who view any given thread.


The step I'm on requires that a duplicate set of information be made and maintained.

What I did was to create an additional field in the same table called "whoviewedcounter".


I also changed the original addition to the ShowThread.php file:


PHP Code:
 
$showinvisible 
1
 
// Get who has already viewed this thread 
$currentthread $DB_site->query_first("SELECT whoviewed FROM ".TABLE_PREFIX."thread WHERE threadid = $threadid"); 
$vieweduserids explode(" "$currentthread['whoviewed']); 
 
$userinfo fetch_userinfo($bbuserinfo['userid']); 
 
 
if (!
$userinfo['invisible'] OR $showinvisible

    if (!empty(
$currentthread['whoviewed'])) 
    { 
        if (!
in_array($bbuserinfo['userid'], $vieweduserids)) 
        { 
            
$DB_site->query("UPDATE ".TABLE_PREFIX."thread SET whoviewed = CONCAT(whoviewed, \" \", \"" .$bbuserinfo['userid'] . "\") WHERE threadid = $threadid"); 
        } 
    } 
    else 
    { 
        
$DB_site->query("UPDATE ".TABLE_PREFIX."thread SET whoviewed = \"" $bbuserinfo['userid'] . "\" WHERE threadid = $threadid"); 
    } 

// Who has viewed this thread? 
if (empty($currentthread['whoviewed'])) 

    
$thread['viewers'] = '('.strtolower($vbphrase['none']).')'

else 

    
$result $DB_site->query("SELECT userid, username FROM ".TABLE_PREFIX."user WHERE userid IN (" implode(", "$vieweduserids) . ")"); 
    
$viewers = array(); 
    while (
$user $DB_site->fetch_array($result)) 
    { 
            
array_push($viewers"<a href=\"member.php?".$session['sessionurl'] . "u=".$user['userid'] . "\">" htmlspecialchars($user['username']) .    "</a>"); 
    } 
    
$thread['viewers'] = implode(", "$viewers); 


And I modified it to this:


PHP Code:
 
 
$showinvisible 
1
 
// Get who has already viewed this thread 
$currentthread $DB_site->query_first("SELECT whoviewed FROM ".TABLE_PREFIX."thread WHERE threadid = $threadid"); 
$vieweduserids explode(" "$currentthread['whoviewed']);
 
$currentthreadcounter $DB_site->query_first("SELECT whoviewedcounter FROM ".TABLE_PREFIX."thread WHERE threadid = $threadid");
$vieweduseridscounter explode(" "$currentthread['whoviewedcounter']);
 
 
$userinfo fetch_userinfo($bbuserinfo['userid']); 
 
if (!
$userinfo['invisible'] OR $showinvisible

    if (!empty(
$currentthread['whoviewed'])) 
    { 
        if (!
in_array($bbuserinfo['userid'], $vieweduserids)) 
        { 
            
$DB_site->query("UPDATE ".TABLE_PREFIX."thread SET whoviewed = CONCAT(whoviewed, \" \", \"" .$bbuserinfo['userid'] . "\") WHERE threadid = $threadid"); 
        } 
    } 
    else 
    { 
        
$DB_site->query("UPDATE ".TABLE_PREFIX."thread SET whoviewed = \"" $bbuserinfo['userid'] . "\" WHERE threadid = $threadid"); 
    } 
 
    if (!empty(
$currentthreadcounter['whoviewedcounter'])) 
    { 
        if (!
in_array($bbuserinfo['userid'], $vieweduseridscounter)) 
        { 
            
$DB_site->query("UPDATE ".TABLE_PREFIX."thread SET whoviewedcounter = CONCAT(whoviewedcounter, \" \", \"" .$bbuserinfo['userid'] . "\") WHERE threadid = $threadid"); 
        } 
    } 
    else 
    { 
        
$DB_site->query("UPDATE ".TABLE_PREFIX."thread SET whoviewedcounter = \"" $bbuserinfo['userid'] . "\" WHERE threadid = $threadid"); 
    } 

// Who has viewed this thread? 
if (empty($currentthread['whoviewed'])) 

    
$thread['viewers'] = '('.strtolower($vbphrase['none']).')'

else 

    
$result $DB_site->query("SELECT userid, username FROM ".TABLE_PREFIX."user WHERE userid IN (" implode(", "$vieweduserids) . ")"); 
    
$viewers = array(); 
    while (
$user $DB_site->fetch_array($result)) 
    { 
            
array_push($viewers"<a href=\"member.php?".$session['sessionurl'] . "u=".$user['userid'] . "\">" htmlspecialchars($user['username']) .    "</a>"); 
    } 
    
$thread['viewers'] = implode(", "$viewers); 

 
if (empty(
$currentthreadcounter['whoviewedcounter'])) 

    
$thread['viewerscounter'] = '('.strtolower($vbphrase['none']).')'

else 

    
$resultcounter $DB_site->query("SELECT userid, username FROM ".TABLE_PREFIX."user WHERE userid IN (" implode(", "$vieweduseridscounter) . ")"); 
    
$viewerscounter = array(); 
    while (
$user $DB_site->fetch_array($resultcounter)) 
    { 
            
array_push($viewerscounter"<a href=\"member.php?".$session['sessionurl'] . "u=".$user['userid'] . "\">" htmlspecialchars($user['username']) .    "</a>"); 
    } 
    
$thread['viewerscounter'] = implode(", "$viewerscounter); 


Effectively, I duplicated everything here - but I renamed every reference to point to the new field, and I renamed every variable to distinguish it from the original set.

I also made the requisite SHOWTHREAD template changes to reference "$thread[viewerscounter]" in addition to "$thread[viewers]".



Here's the problem: When I view a thread for the first time, both the original section and my added section show "None" for the users who have viewed this thread.

However, the second time I view that page (or if I hit Refresh), I get an error:


Code:
 
 
Database error in vBulletin 3.0.3:
Invalid SQL: SELECT userid, username FROM user WHERE userid IN ()
mysql error: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1
mysql error number: 1064
Date: Thursday 12th of August 2004 09:06:01 AM
Script: http://www.mydomain.com/testforums/showthread.php?t=15
Referer: https://www.mydomain.com/testforums/...isplay.php?f=6
Username: Admin
IP Address: 192.168.1.1

In addition to the above error, I notice that the same UserID is being added to the new field (whoviewedcounter) multiple times (i.e. "1 1 1 1 1") - once for each view, I think.

With the changes I made, I wouldn't think I would have any problems - but obviously I missed something (or a few somethings).


If someone can point out what I did wrong, I would greatly appreciate it!
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01283 seconds
  • Memory Usage 1,866KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code
  • (2)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.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_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • 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
  • showpost_complete