Une variable qui disparait.

Eléphanteau du PHP | 32 Messages

02 nov. 2007, 11:23

Bonjour à tous,

Je ne pense pas que vous assuriez du support pour phpbb mais c'est une question pûrement sur PHP que j'aimerais vous poser. J'espère que je n'enfreint pas le reglement...

Mon problème concerne une différence de fonctionnement en local et sur mon free.fr d'un script PHP.

Lire la description de mon problème.


Voici le code de la fonction qui pose problème :
	
/**
* Escape string used in sql query
*/
	function sql_escape($msg)
	{
		if (!$this->db_connect_id)
		{
			return @mysql_real_escape_string($msg);
		}

		return @mysql_real_escape_string($msg, $this->db_connect_id);
	}
Si vous avez lu la description de mon problème, pouvez me dire qu'est ce qui pourrait entraîner mysql_real_escape_string à supprimer une simple chaîne de caractères ? Un problème d'encodage peut-être ?

Le problème c'est que mon script fonctionne parfaitement en local, et mon forum marche bien en ligne également. Il y a donc à mon avis un problème sur mon host free.fr surement du type encodage utf8... Mais cela dépasse un peu mes compétances :s

J'espère que vous arriverai à m'aider :P 3 jours que j'essaye de régler ça :s
Modifié en dernier par samsayan le 02 nov. 2007, 14:27, modifié 2 fois.

ViPHP
ViPHP | 5924 Messages

02 nov. 2007, 11:44

Mouarf, phpbb-fr.com, la meilleure blague de ces 4 dernières années :D

Il faudrait peut être enlever le @ devant le mysql_real_escape_string() pour avoir les erreurs (Je savais que le phpBB Group codait avec des mouffles mais là…).

Sinon, envoie aussi la fonction utf8_clean_string()

ViPHP
ViPHP | 5924 Messages

02 nov. 2007, 11:47

Et pour le test, tu t'es trompé ici :
' db->sql_escape(utf8_clean_string($username))

C'est $db->sql_escape(utf8_clean_string($username))

Eléphanteau du PHP | 32 Messages

02 nov. 2007, 12:53

Voici la fonction que tu m'a demandé :
/**
* This function is used to generate a "clean" version of a string.
* Clean means that it is a case insensitive form (case folding) and that it is normalized (NFC).
* Additionally a homographs of one character are transformed into one specific character (preferably ASCII
* if it is an ASCII character).
*
* Please be aware that if you change something within this function or within
* functions used here you need to rebuild/update the username_clean column in the users table. And all other
* columns that store a clean string otherwise you will break this functionality.
*
* @param	string	$text	An unclean string, mabye user input (has to be valid UTF-8!)
* @return	string			Cleaned up version of the input string
*/
function utf8_clean_string($text)
{
	global $phpbb_root_path, $phpEx;

	static $homographs = array();
	if (empty($homographs))
	{
		$homographs = include($phpbb_root_path . 'includes/utf/data/confusables.' . $phpEx);
	}

	$text = utf8_case_fold_nfkc($text);
	$text = strtr($text, $homographs);
	// Other control characters
	$text = preg_replace('#(?:[\x00-\x1F\x7F]+|(?:\xC2[\x80-\x9F])+)#', '', $text);

	// we can use trim here as all the other space characters should have been turned
	// into normal ASCII spaces by now
	return trim($text);
}
Sinon pour le $ oublié je l'avais corrigé mais la variable est toujours vide.

Merci

si je sors le @ (en ligne 301) j'ai cette erreur :
[phpBB Debug] PHP Notice: in file /includes/db/mysql.php on line 301: mysql_real_escape_string(): 15827448 is not a valid MySQL-Link resource

ViPHP
ViPHP | 5924 Messages

02 nov. 2007, 13:48

si je sors le @ (en ligne 301) j'ai cette erreur :
[phpBB Debug] PHP Notice: in file /includes/db/mysql.php on line 301: mysql_real_escape_string(): 15827448 is not a valid MySQL-Link resource
Je pense qu'il faut plutôt creuser par là…
Vérifie que l'objet est bien initialisé, que la connexion fonctionne…

Eléphanteau du PHP | 32 Messages

02 nov. 2007, 14:27

Vérifie que l'objet est bien initialisé, que la connexion fonctionne…
J'ai remplacé :
$user->setup();
Par :
$user->setup('ucp');
et j'ai déplacé le bloc :
	define('IN_PHPBB', true);
	$phpbb_root_path = './forums/';
	$phpEx = substr(strrchr(__FILE__, '.'), 1);
	include($phpbb_root_path . 'common.' . $phpEx);

	// Start session management
	$user->session_begin();
	$auth->acl($user->data);
	$user->setup('ucp');
en haut du fichier juste avant un session_start() et cela marche !

Alors je ne sais pas pourquoi cela ne fonctionnait pas, mais maintenant cela fonctionne en local ET sur Free.fr ^^

Merci Sékiltoyai sans toi j'y serait encore :)