Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/08/2006, 09h09   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 137
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 137
Points : 12
Points : 12
Par défaut [SQL] Erreur de syntaxe SQL

Hello,

Je suis en train de créer des sessions sur mon site en se basant sur celles de mon forum phpbb...
J'ai organisé une redirection vers une page spécifique selon le groupe auquel l'utilisateur appartient (en fait j'ai demandé à un gars qui m'a donné le code)

le voici :
Code :
1
2
3
4
5
6
7
8
9
10
 
$r = $db->sql_query('SELECT group_id FROM '.USER_GROUP_TABLE.' WHERE user_id='.$row['user_id'].' AND user_pending=0 AND group_id IN (3,4)');
	 if ($row = $db->sql_fetchrow($r)) {
          if ($row['groupe_id'] == 3)   
               $url = 'index.php?id_page=101';
          elseif ($row['groupe_id'] == 4)
               $url = 'index.php?id_page=102';
     }
} 	
$query = mysql_query($r) or die ('ERREUR '.$r.' '.mysql_error());
La dernière ligne, j'ai trouvé sur le net que cela servait de diagnostic en cas de bug et voici le diagnostic :

ERREUR Resource id #33 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 'Resource id #33' at line 1

quelqu'un aurait une idée de l'erreur qui pourrait s'être glissée dans cette partie de code?
Merci
gregius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h26   #2
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
mysql_query prend une requête en paramètre, mais tu lui donnes $r qui n'est pas une requête mais une ressource résultat d'une requête d'où l'erreur. Pourquoi tu fais deux query ? Pour afficher les erreurs c'est juste le "or die..." et il faut que tu le mettes à la suite de ton premier query si tu veux voir quelque chose...
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h36   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 137
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 137
Points : 12
Points : 12
Citation:
Envoyé par JWhite
mysql_query prend une requête en paramètre, mais tu lui donnes $r qui n'est pas une requête mais une ressource résultat d'une requête d'où l'erreur. Pourquoi tu fais deux query ? Pour afficher les erreurs c'est juste le "or die..." et il faut que tu le mettes à la suite de ton premier query si tu veux voir quelque chose...

merci, mais j'suis un vrai débutant en php... d'où ces erreurs grossières...
Du coup, plus de message d'erreur, mais ça ne marche pas... quand je me log, il ne réalise pas la redirection..., il doit y avoir un bug quelque part...
gregius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h40   #4
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Tu es sûr de ce qu'il y a dans $row['user_id'] ? Tu rentres bien dans tes if (mets des echo pour voir) ?
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h40   #5
Membre du Club
 
Inscription : avril 2006
Messages : 110
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 110
Points : 53
Points : 53
Poste le nouveau code !
philippe281281 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h44   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 137
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 137
Points : 12
Points : 12
Citation:
Envoyé par philippe281281
Poste le nouveau code !
le voici

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
<?php

/***************************************************************************
 *                                login.php
 *                            -------------------
 *   begin                : Saturday, Feb 13, 2001
 *   copyright            : (C) 2001 The phpBB Group
 *   email                : support@phpbb.com
 *
 *   $Id: login.php,v 1.47.2.21 2005/12/29 11:51:13 acydburn Exp $
 *
 *
 ***************************************************************************/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

//
// Allow people to reach login page if
// board is shut down
//
define("IN_LOGIN", true);

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Set page ID for session management
//
$userdata = session_pagestart($user_ip, PAGE_LOGIN);
init_userprefs($userdata);
//
// End session management
//

//Début ajout MOD sessions
$ext = (isset($HTTP_POST_VARS['ext'])) ? intval($HTTP_POST_VARS['ext']) : 0;
$active = ( $ext === 1) ? 1 : 0;
//Fin ajout MOD sessions

// session id check
if (!empty($HTTP_POST_VARS['sid']) || !empty($HTTP_GET_VARS['sid']))
{
	$sid = (!empty($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : $HTTP_GET_VARS['sid'];
}
else
{
	$sid = '';
}

if( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) || isset($HTTP_POST_VARS['logout']) || isset($HTTP_GET_VARS['logout']) )
{
	if( ( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) ) && (!$userdata['session_logged_in'] || isset($HTTP_POST_VARS['admin'])) )
	{
		$username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : '';
		$password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : '';

		$sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try
			FROM " . USERS_TABLE . "
			WHERE username = '" . str_replace("\\'", "''", $username) . "'";
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Error in obtaining userdata', '', __LINE__, __FILE__, $sql);
		}

		if( $row = $db->sql_fetchrow($result) )
		{
			if( $row['user_level'] != ADMIN && $board_config['board_disable'] )
			{
				redirect(append_sid("index.$phpEx", true));
			}
			else
			{
				// If the last login is more than x minutes ago, then reset the login tries/time
				if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $row['user_last_login_try'] < (time() - ($board_config['login_reset_time'] * 60)))
				{
					$db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']);
					$row['user_last_login_try'] = $row['user_login_tries'] = 0;
				}
				
				// Check to see if user is allowed to login again... if his tries are exceeded
				if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $board_config['max_login_attempts'] && $row['user_last_login_try'] >= (time() - ($board_config['login_reset_time'] * 60)) && $row['user_login_tries'] >= $board_config['max_login_attempts'] && $userdata['user_level'] != ADMIN)
				{
          //Début ajout MOD sessions
          if ($active === 1)
          {
            $redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx";
            $redirect = preg_replace('`(&|\?)erreur=\d`','',$redirect);
            if ( !preg_match('`erreur=2`',$redirect ))
            $redirect .= ( strpos($redirect,'?') === FALSE ) ? '?erreur=2' : '&erreur=2';
             
          }
          elseif ($ext === 1)
          {
            $redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx";
          }
          else
          {
          //Fin ajout MOD sessions
					message_die(GENERAL_MESSAGE, sprintf($lang['Login_attempts_exceeded'], $board_config['max_login_attempts'], $board_config['login_reset_time']));
          //Début ajout MOD sessions
          }
          redirect(append_sid($redirect,TRUE));
          //Fin ajout MOD sessions
				}

				if( md5($password) == $row['user_password'] && $row['user_active'] )
				{
					$autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0;

					$admin = (isset($HTTP_POST_VARS['admin'])) ? 1 : 0;
					$session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin);

					// Reset login tries
					$db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']);

					if( $session_id )
					{
						$url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx";
            		//mod redirection
					if ($ext == 1 )  {
		$r = $db->sql_query('SELECT group_id FROM '.USER_GROUP_TABLE.' WHERE user_id='.$row['user_id'].' AND user_pending=0 AND group_id IN (3,4)')or die ('ERREUR '.$r.' '.mysql_error());
	 if ($row = $db->sql_fetchrow($r)) {
          if ($row['groupe_id'] == 3)   
               $url = 'index.php?id_page=101';
          elseif ($row['groupe_id'] == 4)
               $url = 'index.php?id_page=102';
     }
} 	
;
//fin mod redirection
			$url = preg_replace('`(&|\?)erreur=\d`','',$url);
						redirect(append_sid($url, true));
					}
					else
					{
						message_die(CRITICAL_ERROR, "Couldn't start session : login", "", __LINE__, __FILE__);
					}
				}
				// Only store a failed login attempt for an active user - inactive users can't login even with a correct password
				elseif( $row['user_active'] )
				{
					// Save login tries and last login
					if ($row['user_id'] != ANONYMOUS)
					{
						$sql = 'UPDATE ' . USERS_TABLE . '
							SET user_login_tries = user_login_tries + 1, user_last_login_try = ' . time() . '
							WHERE user_id = ' . $row['user_id'];
						$db->sql_query($sql);
					}
				}
				$redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : '';
				$redirect = str_replace('?', '&', $redirect);

				if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r"))
				{
					message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
				}
          
          		//Début ajout MOD sessions
          		if ($active === 1)
          		{
            		$redirect = preg_replace('`(&|\?)erreur=\d`','',$redirect);
            		$redirect = preg_replace('`&`','?',$redirect,1);
            		if ( strpos($redirect,'erreur=1') === FALSE && $redirect != '')
            			$redirect .= ( strpos($redirect,'?') === FALSE ) ? '?erreur=1' : '&erreur=1';
          		}
          		elseif ($ext === 1)
          		{
            		if ( $redirect == '')
            			$redirect = 'index.' . $phpEx;
          		}
          		else
          		{
          		//Fin ajout MOD sessions
					$template->assign_vars(array(
						'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">")
					);

					$message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' .  sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');

					message_die(GENERAL_MESSAGE, $message);
          		//Début ajout MOD sessions
          		}
          		redirect(append_sid($redirect,TRUE));
          		//Fin ajout MOD sessions
				
			}
		}
		else
		{
			$redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "";
			$redirect = str_replace("?", "&", $redirect);

			if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r"))
			{
				message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.');
			}
      
      //Début ajout MOD sessions
      if ($active === 1)
      {
        $redirect = preg_replace('`(&|\?)erreur=\d`','',$redirect);
        $redirect = preg_replace('`&`','?',$redirect,1);
        if ( strpos($redirect,'erreur=1') === FALSE && $redirect != '')
        $redirect .= ( strpos($redirect,'?') === FALSE ) ? '?erreur=1' : '&erreur=1';
      }
      elseif ($ext === 1)
      {
        if ( $redirect == '')
        $redirect = 'index.' . $phpEx;
      }
      else
      {
      //Fin ajout MOD sessions
			  $template->assign_vars(array(
				'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">")
			);

			  $message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' .  sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');

			  message_die(GENERAL_MESSAGE, $message);
      //Début ajout MOD sessions
      }
      redirect(append_sid($redirect,TRUE));
      //Fin ajout MOD sessions
		}
	}
	else if( ( isset($HTTP_GET_VARS['logout']) || isset($HTTP_POST_VARS['logout']) ) && $userdata['session_logged_in'] )
	{
		// session id check
		if ($sid == '' || $sid != $userdata['session_id'])
		{
			message_die(GENERAL_ERROR, 'Invalid_session');
		}

		if( $userdata['session_logged_in'] )
		{
			session_end($userdata['session_id'], $userdata['user_id']);
		}

		if (!empty($HTTP_POST_VARS['redirect']) || !empty($HTTP_GET_VARS['redirect']))
		{
			$url = (!empty($HTTP_POST_VARS['redirect'])) ? htmlspecialchars($HTTP_POST_VARS['redirect']) : htmlspecialchars($HTTP_GET_VARS['redirect']);
			$url = str_replace('&amp;', '&', $url);
			redirect(append_sid($url, true));
		}
		else
		{
			redirect(append_sid("index.$phpEx", true));
		}
	}
	else
	{
		$url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx";
		redirect(append_sid($url, true));
	}
}
else
{
	//
	// Do a full login page dohickey if
	// user not already logged in
	//
	if( !$userdata['session_logged_in'] || (isset($HTTP_GET_VARS['admin']) && $userdata['session_logged_in'] && $userdata['user_level'] == ADMIN))
	{
		$page_title = $lang['Login'];
		include($phpbb_root_path . 'includes/page_header.'.$phpEx);

		$template->set_filenames(array(
			'body' => 'login_body.tpl')
		);

		$forward_page = '';

		if( isset($HTTP_POST_VARS['redirect']) || isset($HTTP_GET_VARS['redirect']) )
		{
			$forward_to = $HTTP_SERVER_VARS['QUERY_STRING'];

			if( preg_match("/^redirect=([a-z0-9\.#\/\?&=\+\-_]+)/si", $forward_to, $forward_matches) )
			{
				$forward_to = ( !empty($forward_matches[3]) ) ? $forward_matches[3] : $forward_matches[1];
				$forward_match = explode('&', $forward_to);

				if(count($forward_match) > 1)
				{
					for($i = 1; $i < count($forward_match); $i++)
					{
						if( !ereg("sid=", $forward_match[$i]) )
						{
							if( $forward_page != '' )
							{
								$forward_page .= '&';
							}
							$forward_page .= $forward_match[$i];
						}
					}
					$forward_page = $forward_match[0] . '?' . $forward_page;
				}
				else
				{
					$forward_page = $forward_match[0];
				}
			}
		}

		$username = ( $userdata['user_id'] != ANONYMOUS ) ? $userdata['username'] : '';

		$s_hidden_fields = '<input type="hidden" name="redirect" value="' . $forward_page . '" />';
		$s_hidden_fields .= (isset($HTTP_GET_VARS['admin'])) ? '<input type="hidden" name="admin" value="1" />' : '';

		make_jumpbox('viewforum.'.$phpEx);
		$template->assign_vars(array(
			'USERNAME' => $username,

			'L_ENTER_PASSWORD' => (isset($HTTP_GET_VARS['admin'])) ? $lang['Admin_reauthenticate'] : $lang['Enter_password'],
			'L_SEND_PASSWORD' => $lang['Forgotten_password'],

			'U_SEND_PASSWORD' => append_sid("profile.$phpEx?mode=sendpassword"),

			'S_HIDDEN_FIELDS' => $s_hidden_fields)
		);

		$template->pparse('body');

		include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
	}
	else
	{
		redirect(append_sid("index.$phpEx", true));
	}

}

?>
Comment met-on des écho?
gregius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 09h51   #7
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 137
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 137
Points : 12
Points : 12
Citation:
Envoyé par JWhite
Tu es sûr de ce qu'il y a dans $row['user_id'] ? Tu rentres bien dans tes if (mets des echo pour voir) ?
user_id du tableau user_group reprend l'identifiant de l'utilisateur.
mais à mon avis c'est ça, il ne rentre pas dans les if...
comment faire?
Merci

Greg
gregius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/08/2006, 19h10   #8
Membre du Club
 
Inscription : avril 2006
Messages : 110
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 110
Points : 53
Points : 53
Normalement dans le premier if il faut comparer avec "==" et pas "=" non ?
philippe281281 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h20.


 
 
 
 
Partenaires

Hébergement Web