[Réglé] Problème avec les boucles...

Ici sera assuré le support pour n'importe quel MOD non présent dans la base de données de phpBB-fr.

Modérateur: Equipe

Règles du forum
A lire impérativement sur notre page : Règlement

- Plus aucun support n'est délivré pour phpBB2 depuis le 1er janvier 2009
Partager sur FacebookPartager sur TwitterPartager sur Google+

[Réglé] Problème avec les boucles...

Messagepar sbourdon » 12 Nov 2008 à 15:28

Bonjour,

Lors de l'inscription d'un membre à un groupe particulier, je souhaite ajouter son user_id dans deux tables supplémentaires (liées à deux MODs différents)...

Voici donc la portion de code originale dans groupcp.php:
Code: Tout sélectionner
				if ( ( ( isset($HTTP_POST_VARS['approve']) || isset($HTTP_POST_VARS['deny']) ) && isset($HTTP_POST_VARS['pending_members']) ) || ( isset($HTTP_POST_VARS['remove']) && isset($HTTP_POST_VARS['members']) ) )
				{

					$members = ( isset($HTTP_POST_VARS['approve']) || isset($HTTP_POST_VARS['deny']) ) ? $HTTP_POST_VARS['pending_members'] : $HTTP_POST_VARS['members'];

					$sql_in = '';
					for($i = 0; $i < count($members); $i++)
					{
						$sql_in .= ( ( $sql_in != '' ) ? ', ' : '' ) . intval($members[$i]);
					}

					if ( isset($HTTP_POST_VARS['approve']) )
					{
						if ( $group_info['auth_mod'] )
						{
							$sql = "UPDATE " . USERS_TABLE . " 
								SET user_level = " . MOD . " 
								WHERE user_id IN ($sql_in) 
									AND user_level NOT IN (" . MOD . ", " . ADMIN . ")";
							if ( !$db->sql_query($sql) )
							{
								message_die(GENERAL_ERROR, 'Could not update user level', '', __LINE__, __FILE__, $sql);
							}
						}

						$sql = "UPDATE " . USER_GROUP_TABLE . " 
							SET user_pending = 0 
							WHERE user_id IN ($sql_in) 
								AND group_id = $group_id";
						$sql_select = "SELECT user_email 
							FROM ". USERS_TABLE . " 
							WHERE user_id IN ($sql_in)"; 
					}
(...)


Ensuite, la portion de code que je tente d'ajouter:
Code: Tout sélectionner
					if ( $group_id == 50 )
					{
						$sql = "SELECT * FROM " . FORUMS_REMIND_TABLE . " WHERE user_id IN ($sql_in) AND forum_id = 8";
						$result = mysql_query($sql) or message_die(GENERAL_ERROR, "Could not get reminder information", "", __LINE__, __FILE__, $sql);
						if ( (mysql_num_rows($result) == 0) )
						{						
							$sql = "INSERT INTO " . FORUMS_REMIND_TABLE . " (forum_id, user_id, remind_status, remind_calendar) 
								VALUES (8, user_id IN ($sql_in), 1, 0)";
							if ( !$db->sql_query($sql) )
							{
								message_die(GENERAL_ERROR, 'Could not add user reminder', '', __LINE__, __FILE__, $sql);
							}
						}
						$sql = "SELECT * FROM " . FORUMS_REMIND_TABLE . " WHERE user_id IN ($sql_in) AND forum_id = 9";
						$result = mysql_query($sql) or message_die(GENERAL_ERROR, "Could not get reminder information", "", __LINE__, __FILE__, $sql);
						if ( (mysql_num_rows($result) == 0) )
						{						
							$sql = "INSERT INTO " . FORUMS_REMIND_TABLE . " (forum_id, user_id, remind_status, remind_calendar) 
								VALUES (9, user_id IN ($sql_in), 1, 0)";
							if ( !$db->sql_query($sql) )
							{
								message_die(GENERAL_ERROR, 'Could not add user reminder', '', __LINE__, __FILE__, $sql);
							}
						}
					
						$sql = "SELECT * FROM " . DIGEST_SUBSCRIBED_FORUMS_TABLE . " WHERE user_id IN ($sql_in) AND forum_id = 6";
						$result = mysql_query($sql) or message_die(GENERAL_ERROR, "Could not get Digests information", "", __LINE__, __FILE__, $sql);
						if ( (mysql_num_rows($result) == 0) )
						{						
							$sql = "INSERT INTO " . DIGEST_SUBSCRIBED_FORUMS_TABLE . " (user_id, forum_id) 
								VALUES (user_id IN ($sql_in), 6)";
							if ( !$db->sql_query($sql) )
							{
								message_die(GENERAL_ERROR, 'Could not add private forum to Digests', '', __LINE__, __FILE__, $sql);
							}
						}
					}


Le problème? Je n'arrive pas à récupérer le user_id (lignes débutant par VALUES) des différents membres qui sont Approuvés à rejoindre le groupe (moi et les boucles... :roll: ).

Quelqu'un saurait me dire quelle modification je devrais effectuer afin de corrier le tout?


Un grand merci!

EDIT:
Je réalise que si je remplace user_id IN ($sql_in) par $sql_in, tous les user_id concernés sont extraits; ne reste donc plus qu'à trouver comment les extraire et les traiter un à un et non tous d'un seul coup! :?
Modifié en dernier par sbourdon le 12 Nov 2008 à 21:50, modifié 1 fois.
sbourdon
Posteur habitué
Posteur habitué
 
Messages: 243
Enregistré le: 17 Oct 2004 à 01:39

Re: Problème avec les boucles...

Messagepar spitfire pat » 12 Nov 2008 à 19:04

essaie voir de remplacer
Code: Tout sélectionner
                   $sql = "INSERT INTO " . FORUMS_REMIND_TABLE . " (forum_id, user_id, remind_status, remind_calendar)
                        VALUES (8, user_id IN ($sql_in), 1, 0)";
par
Code: Tout sélectionner
                     $sql = "INSERT INTO " . FORUMS_REMIND_TABLE . " (forum_id, user_id, remind_status, remind_calendar)
                       VALUES";
                    $value = array();
                    foreach($sql_in as $user_id)
                    {
                        $value[] = "(8, $user_id, 1, 0)";
                    }
                    $sql .= implode(",", $value);
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15297
Enregistré le: 18 Sep 2004 à 16:43
Localisation: bourgogne

Re: Problème avec les boucles...

Messagepar sbourdon » 12 Nov 2008 à 20:19

Bonjour,

Merci pour la suggestion. Malheureusement, j'obtiens les messages d'erreur suivant après modification:

Code: Tout sélectionner
Invalid argument supplied for foreach() in /www/htdocs/w0071143/phpbb2/groupcp.php on line 703

et

Code: Tout sélectionner
Could not add user reminder

DEBUG MODE

SQL Error : 1064 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 2

INSERT INTO phpbb_forums_remind (forum_id, user_id, remind_status, remind_calendar) VALUES

Line : 710
File : groupcp.php


Une idée? :?

Merci!
sbourdon
Posteur habitué
Posteur habitué
 
Messages: 243
Enregistré le: 17 Oct 2004 à 01:39

Re: Problème avec les boucles...

Messagepar spitfire pat » 12 Nov 2008 à 20:40

ben oui, suis-je bête, $sql_in n'est pas un array, mais plutot une chaine de type "1,5,7,11"
Code: Tout sélectionner
                     $sql = "INSERT INTO " . FORUMS_REMIND_TABLE . " (forum_id, user_id, remind_status, remind_calendar)
                       VALUES";
                    $value = array();
                    $sql_in_ary = explode(",", $sql_in);
                    foreach($sql_in_ary as $user_id)
                    {
                        $value[] = "(8, $user_id, 1, 0)";
                    }
                    $sql .= implode(",", $value);
Avatar de l’utilisateur
spitfire pat
MOD Contest Winner
MOD Contest Winner
 
Messages: 15297
Enregistré le: 18 Sep 2004 à 16:43
Localisation: bourgogne

Re: Problème avec les boucles...

Messagepar sbourdon » 12 Nov 2008 à 21:50

Et bien voilà! :mrgreen:

Et dire que j'ai passé plus de six heures là-dessus...
Au moins, j'apprends!

Merci encore, spitfire pat!
sbourdon
Posteur habitué
Posteur habitué
 
Messages: 243
Enregistré le: 17 Oct 2004 à 01:39


Retourner vers MODs indépendants de la base

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

cron