Announcement

Collapse
No announcement yet.

Obviously, I'm doing something wrong... :) PHP coding causing MySQL 1064 Error

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Obviously, I'm doing something wrong... :) PHP coding causing MySQL 1064 Error

    Hi!

    I originally posted this issue on vBulletin.org, as it was related to a hack. However, since at root, we're talking about a mistake I'm making in PHP coding, I thought I would ask here as well.


    Here's the background (which you need in order to understand what I'm trying to do)... I'm trying to modify an existing hack - Who Viewed This Thread (http://www.vbulletin.org/forum/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 new reference to point to the new field, and I renamed every new 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/forumdisplay.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. Whereas, there is only supposed to be one instance of any given UserID.

    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!
    echo $ocean_signature;

    ;)
widgetinstance 262 (Related Topics) skipped due to lack of content & hide_module_if_empty option.
Working...
X