Erreur PunBB



  • Salut à tous !

    Voilà, j'ai un problème avec un forum PunBB !
    J'ai installé le mod Easy Poll+ 2.0 (système de sondage) et j'obtient une erreur SQL que voici :

    _File: /home/***/www/forum/post.php
    Line: 407

    PunBB reported: Impossible de modifier l'utilisateur_

    Database reported: 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 ''LOW_PRIORITY pun_'users SET cm_cash=cm_cash+'' WHERE id='2' at line 1 (Errno: 1064)

    Je pense que ce qui est en italique ne vous interesse par forçément !

    Je vous met ci-après la ligne qui bug :

    $db->query('UPDATE '.$low_prio.$db->prefix.'users SET cm_cash=cm_cash+'.$cur_posting['cm_cpp'].' WHERE id='.$pun_user['id']) or error('Impossible de modifier l'utilisateur', __FILE__, __LINE__, $db->error());
    

    Un autre membre à la même erreur et a posté un message directement sur le forum de PunBB, mais celà fait 10 jours et il n'y a toujours pas de réponse !

    Comme je sais que vous êtes très réactifs (et très sympa), je me suis dit qu'avec l'erreur SQL, vous pourriez peut-être y arriver (c'est très gênant pour poster des message :lol: ) !

    MERCI D'AVANCE !!!


  • Administrateur

    Arf, là je ne saurais pas t'aider :) On va attendre Arcanis, mais il est très occupé ces jours ci. S'il passe, je suis certain qu'il t'aidera :)



  • @caaptusss:

    Arf, là je ne saurais pas t'aider :) On va attendre Arcanis, mais il est très occupé ces jours ci. S'il passe, je suis certain qu'il t'aidera :)

    Je pense aussi !
    Il nous est d'une grande aide précieuse !



  • Bonjour, essaie de remplacer

    $db->query('UPDATE '.$low_prio.$db->prefix.'users SET
    

    par

    $db->query('UPDATE $low_prio.$db->prefix users SET
    

    Parce que d'après l'erreur de PunBB, la requête finale est

    LOW_PRIORITY pun_'users
    

    avec un ' en trop. Je pense que l'erreur vient de là ;)



  • $db->query('UPDATE $low_prio $db->prefix users SET
    ```sans le '.' car ca ne sert à rien si tu referme pas les ' avant ;)
    
    C'est peut être ca l'erreur vu l'erreur dans la requête... à voir


  • Oui exact, j'avais oublié le point :D



  • Non, j'ai essayé avec les deux, toujours la même erreur !



  • $db->query('UPDATE '.$low_prio.$db->prefix.'users SET
    

    Ceci est du bon codage optimisé et valide.

    $db->query('UPDATE $low_prio.$db->prefix users SET
    

    Ceci ne peut en aucun cas marché car les variables ne seront pas interprété.

    Si on ne veux pas faire de concaténation, il faudrais faire:

    $db->query("UPDATE $low_prio.$db->prefix users SET
    

    Le " n'est pas du bon codage pour l'interprétation des variables. De plus je ne pense pas qu'il soit compatible avec la POO.

    Je ne pense pas que l'erreur vienne de la requête en elle même.

    Phenix



  • Effectivement, j'ai fait un petit test (je lui faire dire la requête avec un 'echo' au lieu de lui la faire effectuer), et je trouver que la requête finale est :

    UPDATE LOW_PRIORITY pun_users SET cm_cash=cm_cash+ WHERE id=2
    

    Le problème vient donc que la variable $cur_posting['cm_cpp'] n'existe pas.

    Donc je vais essayer de résoudre ça, et je vous tient au courant !



  • Je pense aussi !
    Il nous est d'une grande aide précieuse !

    Rrrrrrrronnn :mrgreen:

    Bon, juste le truc con: tu l'a téléchargé où?
    Sur ce site (http://www.punbb.fr/mods/mod.php?id=55), ta requête n'apparait dans uncun fichier :/
    Tu as encore le zip?



  • @arcanis:

    Je pense aussi !
    Il nous est d'une grande aide précieuse !

    Rrrrrrrronnn :mrgreen:

    Bon, juste le truc con: tu l'a téléchargé où?
    Sur ce site (http://www.punbb.fr/mods/mod.php?id=55), ta requête n'apparait dans uncun fichier :/
    Tu as encore le zip?

    Je l'ai téléchargé sur le site de PunBB :) (ici).
    Oui, j'ai encore le ZIP.

    En explorant le code, je sais d'où sa vient :
    le fichier LisezMoi est prévu pour un forum "vierge" (sans aucune modification déjà effectuée). Hors, j'avais installé le mod argent.
    Ce qui fait que sa coince au niveau d'une requête SQL qu'il faut remplacer (ce que j'ai fait tout bêtement au début).

    Pour continuer :

    • la requête d'un forum "vierge" (et qu'il faut remplacer) :
    if ($tid)
    	$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.subject, t.closed FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$tid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    else
    	$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    
    • Il faut la remplacer par :
    if ($tid)
    	$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls, t.subject, t.closed, t.question FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$tid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    else
    	$result = $db->query('SELECT f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    
    • Mais avec le mod argent, la requête "vierge" est transformée en :
    if ($tid)
    	$result = $db->query('SELECT f.cm_cpp, f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, t.subject, t.closed FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$tid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    else
    	$result = $db->query('SELECT f.cm_cpt, f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    

    Je me suis dit :

    Il faut fusionner les deux !

    Ce qui me donne :

    if ($tid)
    	$result = $db->query('SELECT f.cm_cpp, f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls, t.subject, t.closed, t.question FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id='.$tid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    else
    	$result = $db->query('SELECT f.cm_cpt, f.id, f.forum_name, f.moderators, f.redirect_url, fp.post_replies, fp.post_topics, fp.post_polls FROM '.$db->prefix.'forums AS f LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id='.$pun_user['g_id'].') WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND f.id='.$fid) or error('Impossible de retrouver les informations forum', __FILE__, __LINE__, $db->error());
    
    

    Au final, sa a l'air de marcher, je vous tient au courant :D !


Se connecter pour répondre
 

Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.