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 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
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:31 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.03504 seconds
  • Memory Usage 2,289KB
  • Queries Executed 11 (?)
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)bbcode_code
  • (2)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)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)showthread_list
  • (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_threadedmode.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_threaded
  • showthread_threaded_construct_link
  • 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