• User Newbie

    Perdonami, non avevo capito 😛

    Ecco il risultato:

    AND c.ID_CAT =
    

  • User Attivo

    ???

    Di tutta quella echo ti fa vedere solo 10 caratteri?
    Oppure solo della riga interessata?

    Se della riga interessata allora sembra che $_REQUEST['catogid'] sia settata ma vuota, mentre tu controlli solo se è settata.

    Prova a modificare così, non dovrebbe dare più errore:

    
    $result_boards = db_query(" 
    SELECT 
    c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description, 
    b.numPosts, b.numTopics, b.ID_PARENT, 
    IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC, 
    IFNULL(mem.realName, m.posterName) AS realName," . (!$user_info['is_guest'] ? " 
    (IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse, 
    IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead') . ", 
    IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG, 
    IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName 
    FROM ({$db_prefix}categories AS c, {$db_prefix}boards AS b)
    LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG) 
    LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? " 
    LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER) 
    LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '') . " 
    LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD) 
    LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER) 
    WHERE $user_info[query_see_board] 
    " . (isset($_REQUEST['catogid']) && $_REQUEST['catogid'] != "") ? " 
    AND c.ID_CAT = {$_REQUEST['catogid']}" : '' . " 
    AND b.ID_CAT = c.ID_CAT 
    AND b.childLevel <= 1 
    ORDER BY c.catOrder, b.childLevel, b.boardOrder", __FILE__, __LINE__);
    
    

  • User Newbie

    Ciao!
    Scusa se non ti ho più risposto, sono stata via per due giorni.

    Ho fatto l'echo che mi hai suggerito, dunque di tutta la query, ed il risultato era solo quella cosa lì.
    Ho provato questo ultimo codice e l'errore è:

    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 'AND c.ID_CAT = 8' at line 1
    File: /home/... ...[/forum/Sources/BoardIndex.php](http://daoc.clans.it/forum/Sources/BoardIndex.php)
    Linea: 85
    

    Come detto la cosa che mi insospettisce è come mai sul vecchio server con mysql4 non avevo problemi, e adesso con mysql5 sì?
    Forse devo modificare l'ordine di qualcosa nella query? Forse devo mettere delle parentesi in più, come a volte è richiesto per mysql5?
    Io sono troppo ignorante per riuscire a capire cosa devo fare 😛

    Tanto per la cronaca ti posto il codice che al momento tengo sul forum, funzionante, ma che nn fa la selezione di una categoria (lo scopo del codice che non mi funziona):

    [php] $result_boards = db_query("
    SELECT
    c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
    b.numPosts, b.numTopics, b.ID_PARENT, IFNULL(m.posterTime, 0) AS posterTime,
    IFNULL(mem.memberName, m.posterName) AS posterName, m.subject, m.ID_TOPIC,
    IFNULL(mem.realName, m.posterName) AS realName," . ($user_info['is_guest'] ? "
    1 AS isRead, 0 AS new_from" : "
    (IFNULL(lb.ID_MSG, 0) >= b.ID_MSG_UPDATED) AS isRead, IFNULL(lb.ID_MSG, -1) + 1 AS new_from,
    c.canCollapse, IFNULL(cc.ID_MEMBER, 0) AS isCollapsed") . ",
    IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
    IFNULL(mods_mem.ID_MEMBER, 0) AS ID_MODERATOR, mods_mem.realName AS modRealName, b.passwd
    FROM {$db_prefix}boards AS b
    LEFT JOIN {$db_prefix}categories AS c ON (c.ID_CAT = b.ID_CAT)
    LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
    LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? "
    LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER)
    LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '') . "
    LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
    LEFT JOIN {$db_prefix}members AS mods_mem ON (mods_mem.ID_MEMBER = mods.ID_MEMBER)
    WHERE $user_info[query_see_board]" . (empty($modSettings['countChildPosts']) ? "
    AND b.childLevel <= 1" : ''), FILE, LINE);[/php]

    Questo codcie qui va, senza problemi, solo che non fa quello che serve a me, ma mostra tutte le categorie indistintamente.
    Speriamo di venirne a capo... ho chiesto sul forum ufficiale di SMF, ma quelli che mi rispondono non mi hanno saputo dare indicazioni utili. Continuano a dirmi di aggiornare il mio forum all'ultima versione, poichè la mia è quella precedente, ma 1) non posso attualmente fare questo aggiornamento poichè ho moddato e modificato il codice così tanto per scopi personali che un aggiornamento sarebbe possibile solo eseguito a mano, con un diff file per file per non perdere tutte le mie modifiche; 2) non funzionerebbe nemmeno con l'ultima versione, poichè questa cosa qui della selezione della categoria è un MOD, non è codice della versione ufficiale. Riapplicando lo stesso mod alla nuova versione sarei punto e a capo.

    Grazie per la pazienza e l'aiuto 🙂 Aspetto tuoi consigli!


  • User Attivo

    Davvero il risultato di questa echo è solo quei pochi caratteri???

    
    [LEFT]echo "
    SELECT 
    c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description, 
    b.numPosts, b.numTopics, b.ID_PARENT, 
    IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC, 
    IFNULL(mem.realName, m.posterName) AS realName," . (!$user_info['is_guest'] ? " 
    (IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse, 
    IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead') . ", 
    IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG, 
    IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName 
    FROM ({$db_prefix}categories AS c, {$db_prefix}boards AS b)
    LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG) 
    LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)" . (!$user_info['is_guest'] ? " 
    LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER) 
    LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '') . " 
    LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD) 
    LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER) 
    WHERE $user_info[query_see_board] 
    " . isset($_REQUEST['catogid']) ? " 
    AND c.ID_CAT = {$_REQUEST['catogid']}" : '' . " 
    AND b.ID_CAT = c.ID_CAT 
    AND b.childLevel <= 1 
    ORDER BY c.catOrder, b.childLevel, b.boardOrder";[/LEFT]
    
    

    Stento davvero a crederci.
    Riprova a farla e poi guarda il sorgente della pagina (HTML) e posta quello che ti scrive lì.


  • User Newbie

    Riprovato (ovviamente pongo l'echo dopo la definizione delle variabili, ecc, sennò non troverebbe i valori):

    nel DOM ho in effetti delle righe vuote, ma son cmq vuote:

    AND c.ID_CAT = 8
    
        
        
        
        
        
        
        
        
        
    
        
        
        
        
        
        
         
        
        
    
        
    

  • User Attivo

    Incredibile! Comunque proviamo a scomporre la stringa che hai generato:

    
    [LEFT]**echo "
    SELECT
    c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
    b.numPosts, b.numTopics, b.ID_PARENT,
    IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC,
    IFNULL(mem.realName, m.posterName) AS realName,";
    echo (!$user_info['is_guest'] ? "
    (IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse,
    IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead');
    echo ",
    IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
    IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName
    FROM ({$db_prefix}categories AS c, {$db_prefix}boards AS b)
    LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
    LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)";
    echo (!$user_info['is_guest'] ? "
    LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER)
    LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '');
    echo "
    LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
    LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER)
    WHERE $user_info[query_see_board]
    ";
    echo isset($_REQUEST['catogid']) ? "
    AND c.ID_CAT = {$_REQUEST['catogid']}" : '';
    echo "
    AND b.ID_CAT = c.ID_CAT
    AND b.childLevel <= 1
    ORDER BY c.catOrder, b.childLevel, b.boardOrder";
    **
    

    Dimmi questa volta cosa vedi![/LEFT]


  • User Newbie

    Intanto lasciati dire che sei incredibilmente gentile!
    Hai una pazienza infinita 😛 Io solitamente, quando qualcuno mi chiede supporto sui forum, dopo un poco rispondo quasi "arrangiati" :rollo:

    Allora, ho provato, ecco il risultato (DOM):

    SELECT
    c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
    b.numPosts, b.numTopics, b.ID_PARENT,
    IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC,
    IFNULL(mem.realName, m.posterName) AS realName,
    (IFNULL(lb.logTime, 0) &gt;= b.lastUpdated) AS isRead, c.canCollapse,
    IFNULL(cc.ID_MEMBER, 0) AS isCollapsed,
    IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
    IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName
    FROM (smf2_categories AS c, smf2_boards AS b)
    LEFT JOIN smf2_messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
    LEFT JOIN smf2_members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)
    LEFT JOIN smf2_log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = 1)
    LEFT JOIN smf2_collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = 1)
    LEFT JOIN smf2_moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
    LEFT JOIN smf2_members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER)
    WHERE 1
    
    AND c.ID_CAT = 8
    AND b.ID_CAT = c.ID_CAT
    AND b.childLevel &lt;= 1
    ORDER BY c.catOrder, b.childLevel, b.boardOrder
    

  • User Attivo

    Grazie, spero che almeno possa servire a risolvere il tuo problema.
    Cmq a vedere il risultato adesso sembra corretto (a parte i < che potrebbe essere dovuto a un copia incolla). Ti consiglio di modificare la tua query così:

    
    $qry .= "
    SELECT
    c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description,
    b.numPosts, b.numTopics, b.ID_PARENT,
    IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC,
    IFNULL(mem.realName, m.posterName) AS realName,";
     
    $qry .= (!$user_info['is_guest'] ? "
    (IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse,
    IFNULL(cc.ID_MEMBER, 0) AS isCollapsed" : ' 1 AS isRead');
     
    $qry .= ",
    IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG,
    IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName
    FROM ({$db_prefix}categories AS c, {$db_prefix}boards AS b)
    LEFT JOIN {$db_prefix}messages AS m ON (m.ID_MSG = b.ID_LAST_MSG)
    LEFT JOIN {$db_prefix}members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER)";
     
    $qry .= (!$user_info['is_guest'] ? "
    LEFT JOIN {$db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = $ID_MEMBER)
    LEFT JOIN {$db_prefix}collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = $ID_MEMBER)" : '');
     
    $qry .= "
    LEFT JOIN {$db_prefix}moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD)
    LEFT JOIN {$db_prefix}members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER)
    WHERE $user_info[query_see_board]
    ";
     
    $qry .= (isset($_REQUEST['catogid']) ? "
    AND c.ID_CAT = {$_REQUEST['catogid']}" : '');
     
    $qry .= "
    AND b.ID_CAT = c.ID_CAT
    AND b.childLevel <= 1
    ORDER BY c.catOrder, b.childLevel, b.boardOrder";
     
    echo $qry . "\n";
    $result_boards = db_query($qry);
     
    
    

    Questo consiglio è valido sempre, se la query la costruisci prima diventa più leggibile (e puoi mettere dei commenti su quello che intendi fare) e più debuggabile (puoi mettere un echo subito prima per capire se è corretta).
    Intanto vediamo così cosa fa e cosa fa vedere.


  • User Newbie

    Grandissimo!!!! :vaiii:
    Hai risolto il problema!! Dunque non era legato a mysql5? solo una diversa presentazione del codice?

    Tanto per la cronaca l'echo restituisce:
    [php]SELECT c.name AS catName, c.ID_CAT, b.ID_BOARD, b.name AS boardName, b.description, b.numPosts, b.numTopics, b.ID_PARENT, IFNULL(mem.memberName, m.posterName) AS posterName, m.posterTime, m.subject, m.ID_TOPIC, IFNULL(mem.realName, m.posterName) AS realName, (IFNULL(lb.logTime, 0) >= b.lastUpdated) AS isRead, c.canCollapse, IFNULL(cc.ID_MEMBER, 0) AS isCollapsed, IFNULL(mem.ID_MEMBER, 0) AS ID_MEMBER, m.ID_MSG, IFNULL(mem2.ID_MEMBER, 0) AS ID_MODERATOR, mem2.realName AS modRealName FROM (smf2_categories AS c, smf2_boards AS b) LEFT JOIN smf2_messages AS m ON (m.ID_MSG = b.ID_LAST_MSG) LEFT JOIN smf2_members AS mem ON (mem.ID_MEMBER = m.ID_MEMBER) LEFT JOIN smf2_log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = 1) LEFT JOIN smf2_collapsed_categories AS cc ON (cc.ID_CAT = c.ID_CAT AND cc.ID_MEMBER = 1) LEFT JOIN smf2_moderators AS mods ON (mods.ID_BOARD = b.ID_BOARD) LEFT JOIN smf2_members AS mem2 ON (mem2.ID_MEMBER = mods.ID_MEMBER) WHERE 1 AND c.ID_CAT = 8 AND b.ID_CAT = c.ID_CAT AND b.childLevel <= 1 ORDER BY c.catOrder, b.childLevel, b.boardOrder[/php] e le categorie del forum finalmente si vedono separate a seconda dell'id:
    http://daoc.clans.it/forum/index.php?action=forum;catogid=1

    No so davvero come ringraziarti, farò pubblicità al tuo sito (quello in firma ed anche questo) sui miei forum in cui si parla di programmazione 🙂


  • User Attivo

    Grazie, evidentemente era un problema di creazione della query.
    Ciao e buon lavoro!