Fatal error: Cannot pass parameter 2 by reference

Petit nouveau ! | 4 Messages

07 déc. 2010, 03:01

Bonjour,
tout est dans le titre. Je cherche à insérer une ligne de code dans une table et ça ne fonctionne pas ... L'erreur avec le lien du fichier est la suivante:
Fatal error: Cannot pass parameter 2 by reference in C:\wamp\www\assoc\libraries\joomla\database\table\user.php on line 707
Et la ligne 707 est:
$add = $this->_db->insertObject( 'jos_mm_users', '2', $this->name, $this->email );
Auparavant, j'ai déclaré ceci:
$this->name = mb_strtoupper($this->name,'UTF-8');
$this->email = mb_strtoupper($this->email,'UTF-8');
Je me demande si l'insertion d'un chiffre en tant que constante ne serait pas cause du problème. Si oui, je ne vois pas comment la contourner.

Merci de vos lumières
Cordialement

Eléphant du PHP | 209 Messages

07 déc. 2010, 10:15

As-tu essayé :
$nb = 2;
$add = $this->_db->insertObject( 'jos_mm_users',$nb, $this->name, $this->email );
--
Eric

Petit nouveau ! | 4 Messages

07 déc. 2010, 10:43

Bonjour
merci de ta réponse. Point positif: je n'ai plus mon "parse error". Mais la valeur 2 est insérée en 0 dans ma table ... Et que je mette
$nb = '2';
ou
$nb = 2;
Une idée? Ca doit être simple mais je ne vois pas l'astuce.
Cordialement
Loïc

Eléphant du PHP | 209 Messages

07 déc. 2010, 11:07

Heuh, c'est du spécifique Joomla ton code non ?
On dirait que la fonction ne s'utilise pas du tout comme cela...
--
Eric

Petit nouveau ! | 4 Messages

07 déc. 2010, 11:10

oui, je travaille avec Joomla. Je ne comprends pas ta phrase comme quoi la fonction ne s'utilise pas comme ça. J'ai regardé la doc pourtant ...

Eléphant du PHP | 209 Messages

07 déc. 2010, 18:16

C'est quelle version de Joomla ?

Ou est le passage de la doc qui indique comment utiliser la fonction ?
--
Eric

devlop78
Invité n'ayant pas de compte PHPfrance

08 déc. 2010, 02:23

Code : Tout sélectionner

$nb = 2; $add = $this->_db->insertObject( 'jos_mm_users',$nb, $this->name, $this->email ); echo $nb;
Que retourne l'echo ?

Petit nouveau ! | 4 Messages

08 déc. 2010, 06:45

Bonjour
@ epommate2: j'ai regardé la doc là:
http://api.joomla.org/Joomla-Framework/Database/JDatabase.html#methodinsertObject
@ devlop78
echo $nb ne retourne rien, enfin rien ne s'affiche à la validation du formulaire.
J'ai modifié un peu mon code;je vous le met en entier car maintenant, je n'ai même plus l'insertion dans la table:
function store( $updateNulls=false )
{
	$acl =& JFactory::getACL();

	$section_value = 'users';
	$k = $this->_tbl_key;
	$key =  $this->$k;
	$class_vars = get_object_vars($this);
	
	foreach ($class_vars as $name => $value)
	{
		if(strpos($name, "sofiom_") !== false)
		{
			$value = mb_strtoupper($value,'UTF-8');
			$this->$name = $value;
		}
	}
	
	$this->name = mb_strtoupper($this->name,'UTF-8');
	$this->email = mb_strtoupper($this->email,'UTF-8');
	
	if ($key)
	{
		// existing record
		$ret = $this->_db->updateObject( $this->_tbl, $this, $this->_tbl_key, updateNulls );
		// syncronise ACL
		$object_id = $acl->get_object_id( $section_value, $this->$k, 'ARO' );
			$groups = $acl->get_object_groups( $object_id, 'ARO' );
		$acl->del_group_object( $groups[0], $section_value, $this->$k, 'ARO' );
		$acl->add_group_object( $this->gid, $section_value, $this->$k, 'ARO' );
			$acl->edit_object( $object_id, $section_value, $this->_db-getEscaped( $this->name ), $this->$k, 0, 0, 'ARO' );
	}
	else
	{
		// new record
		$ret = $this->_db->insertObject( $this->_tbl, $this, $this->_tbl_key );
		// syncronise ACL
		$acl->add_object( $section_value, $this->name, $this->$k, null, null, 'ARO' );
		$acl->add_group_object( $this->gid, $section_value, $this->$k, 'ARO' );
		//my_mail - membre non-cotisant par défaut
		
		$this->catuse = 2;
		$this->name = mb_strtoupper($this->name,'UTF-8');
		$this->email = mb_strtoupper($this->email,'UTF-8');	
		$add = $this->_db->insertObject('#__mm_users',$this, $this->_tbl_key);
	}
}
Je me demande si je passe bien mes paramètres. Je ne vois pas pourquoi ça fonctionne pour les tables jos_users et les tables ACL mais pas pour la table jos_mm_users (liée au composant MyMail). Cette table comprends 4 champs:
niduse int(11) --> en auto-increment
catuse int(11) --> à mettre à la valeur 2
namuse varchar(50) --> nom de l'utilisateur
emause varchar(50) --> mail de l'utilisateur
A priori, le $this devrait fonctionner car j'ai bien les 3 champs imposés et normalement, le 1er champ en auto-increment se modifie tout seul. Ai-je raté qqch???

Merci d'avance de votre aide