Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script de gestion de membres

Nouvelle erreur sql ^^

Sujet résolu
    16 janvier 2006 à 23:22:29

    Bonjours,

    Je vais un petit script de gestion de membre sur un forum phpbb. Son principe est le suivant. Si un membre d'un groupe ne s'est pas connecté depuis plus d'une semaine, on lui envoi un petit mail de rappelle. Si ca fait plus de deux semaines, on lui envoi un mail pour lui dire qu'il va etre viré.

    Mon probleme est le suivant => MySQL client run out of memory
    C'est la permiere fois que je tombe sur cette erreur la :-° . A vu de nez, je dois faire une requette infini sur mysql. Le reste du site, lui marche sans problème.

    Je donne mon script en supprimant les parties mail, vu qu'elles fonctionnent deja bien, et ca allège un peu le code.

    $db=mysql_connect($dbhost,$dblogi,$dbpass)or die(mysql_error());
    mysql_select_db($dbbase,$db)or die(mysql_error());
    $sql="SELECT *
    FROM phpbb_users U, phpbb_user_group UG, select_team ST
    WHERE (
    U.user_id = ST.user_id
    )
    AND (
    UG.user_id = ST.user_id
    )
    AND (
    U.user_id = UG.user_id
    )
    AND UG.group_id =6
    ORDER BY `user_lastvisit` DESC"
    ;
    $res=mysql_query($sql, $db) or die (mysql_error());
    while ($donnees = mysql_fetch_array($res) )
    {
    $avi = $donnees['avi']// On colle l'indice de passage dans une variable $avi
    $timeActuel = time(); //donne le timestamp actuel
    $semaine = $timeActuel - (7 * 24 * 60 * 60); // donne le timestamp d'il y a une semaine
    $semaines = $timeActuel - (2 * 7 * 24 * 60 * 60); // Timestamp d'il y a deux semaines
    $timestamp = $donnees['user_lastvisit']; //Colle la derniere visite dans une variable sous forme du timestamp
    if ($id_user != '0') //Ce n'est pas le champ réservé au visiteur de phpBB
    {
            if ($id_user != '8') // Passe droit pour matou
            {
                    if ($timestamp > $semaines) //Si ca fait plus de deux semaines
                    {
                            if ($avi = '1') // Et que la personne n'a pas encore été notifié
                            {
                                    // on envoi le mail pour préveni que l'on va delete le compte

                                    //on fait la requette sql pour supprimer le compte de la table phpbb_users et select team
                                    $sql3 = "DELETE FROM phpbb_users WHERE user_id = $id_user";
                                    $res3=mysql_query($sql3, $db) or die (mysql_error());
                                    $sql4 = "DELETE FROM select_team WHERE user_id = $id_user";
                                    $res4=mysql_query($sql4, $db) or die (mysql_error());
                                    }
                            }
                           
                    // La personne n'a pas été vu depuis plus d'une semaine.
                            elseif ($timestamp > $semaine)
                            {
                                    if ($avi != '1' AND $avi != '2')
                                    {
                                            //Envoi du mail pour prévenir de l'absence
                           
                                            //On UPDATE la table select_team pour dire que la personne à été prévenu une premiere fois
                                            $sql5="UPDATE select_team SET avi='2' WHERE ID='$id_user'";
                                            $res5=mysql_query($res5, $db) or die (mysql_error());
                                    }
                            }
                            else // L'entré ne correspond à rien pas. On va donc la créer dans la base de donnée
                            {
                                    $sql6="INSERT INTO select_team VALUES('$id_user', '$avi')";
                                    $res6=mysql_query($sql6, $db) or die (mysql_error());
                            }
                    } //nbre de semaine
            } // Passe droit
    }// VISITEUR
    ?>


    A priorie, c'est la ligne
    $res2=mysql_query($sql2, $db) or die (mysql_error());
    qui me retourne mon erreur.

    La je m'avou vaincu devant la machine. Je ne trouve pas mon erreur.
    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2006 à 23:33:22

      pourquoi tu met des quotes sur le nom de ta table??? il en faut pas pourtant

      $sql2="UPDATE `select_team` SET avi='1' WHERE user_id='$id_user'";
      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2006 à 23:36:50

        Sais-tu quelle requête génère cette erreur???
        Essaie déjà de la localiser... Tu verras ensuite pour la résoudre!!!
        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2006 à 0:00:06

          Ah oui les quotes, une bien mauvaise habitude que j'ai...

          Sinon la requete foireuse, c'est celle la:

          $sql2="UPDATE select_team SET avi='1' WHERE user_id='$id_user'"; // On met a jour la base de notification
          $res2=mysql_query($sql2, $db) or die (mysql_error());

          Pi à mon gout, cette requette, elle marche sans probleme ^^

          PS: vu la taille du code, j'édite au fur et à mesure mon premier post pour éviter les page de code à n'en plus finir
          • Partager sur Facebook
          • Partager sur Twitter
            17 janvier 2006 à 0:16:17

            essaye:
            $sql2="UPDATE select_team SET avi='1' WHERE user_id=$id_user";

            Avi est de quel type???
            si int, bigint, etc: essaye: `avi` = 1
            sinon, laisse `avi` = '1'
            • Partager sur Facebook
            • Partager sur Twitter
              17 janvier 2006 à 0:50:37

              Hop, je vien de trouver une incohérance dans le script. Puisque je faisais une update d'une table, pour supprimer l'entré 2 lignes plus tard. Donc ca servait à rien.
              Par contre, j'ai toujours mon erreur du début. La je l'ais identifier sur ma permiere requette sql
              $sql="SELECT *
              FROM phpbb_users U, phpbb_user_group UG, select_team ST
              WHERE (
              U.user_id = ST.user_id
              )
              AND (
              UG.user_id = ST.user_id
              )
              AND (
              U.user_id = UG.user_id
              )
              AND UG.group_id =6
              ORDER BY `user_lastvisit` DESC"
              ;
              $res=mysql_query($sql, $db) or die (mysql_error());


              Je vien de tester la requete sous phpmyadmin. Et ... elle marche parfaitement :colere: De plus, elle fonctionnait sans probleme avant, et j'ai pas touché au structure de table ....

              EDIT: Je vien de voir sous phpmyadmin, que ma table fait rien que ... 40973 enregistrement. Hors normalement elle doit etre à environ 25. Ca sent un peu la boucle foireuse. Possible que l'hébergeur (1&1) n'aime pas tellement une table aussi rempli et donc MySQL client run out of memory.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                17 janvier 2006 à 2:32:58

                Premièrement vire les paranthèses que tu as après WHERE et AND. Ensuite, enlève les '' qui entoure user_lastvisit ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  17 janvier 2006 à 8:37:26

                  Citation : Luigi_home

                  Premièrement vire les paranthèses que tu as après WHERE et AND. Ensuite, enlève les '' qui entoure user_lastvisit ;)


                  Mais pourquoi vous voulez enlevez les protections autour des noms de champs, tables??? :colere:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 janvier 2006 à 13:56:29

                    Pour les quotes, de toute facon, avec ou sans, ca revien au meme. Et idem pour les parenthèses.
                    Mais une question en plus, je trouve que ca fait plus propre avec les (), et normalement ca ne fait pas bugguer une requette sql, et les quotes non plus ?!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Script de gestion de membres

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown