Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[Résolu] Erreur de code... Help


Messages recommandés

Posté(e)

Salut les zebulons.

 

Voilà je veux créer un espace membre pour mon site et quand je fais le lien sur mon formulaire d'inscription j'ai la liste d'erreur suivante :

<citation>

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 557

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 1184

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 616

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 1184

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 616

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 1184

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 557

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 1184

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 827

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 1184

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 599

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 599

 

Warning: func_get_arg(): Argument 1 not passed to function in C:\wamp\www\test2\libs\form.php on line 858

</citation>

 

Pour ce type de code :

<code type="php">

public function __toString() {

$num_args = func_num_args();

$tab = $num_args > 0 ? func_get_arg(1) : '';

 

$this->_generate_class();

 

$id = '';

$label = '';

if (!empty($this->label)) {

 

list($for, $id) = self::_generate_for_id($this->form->auto_id(), $this->attrs['name']);

$label = '<label'.$for.'>'.$this->label.$this->form->label_suffix().'</label>'."\n$tab";

}

</code>

 

c'est la ligne 555 à 567

 

j'ai d'autres lignes avec le même type de code ou je n'ai pas d'erreurs :

<code type="php">

public function __toString() {

$num_args = func_num_args();

$tab = $num_args > 0 ? func_get_arg(1) : '';

 

$o = $tab.'<form'.$this->attrs.'>'."\n";

 

if (empty($this->fieldsets)) {

 

$o .= $this->_html_fields($tab."\t", array_diff_key($this->fields, $this->hidden_fields, $this->submit_fields));

if (!empty($this->hidden_fields)) { $o .= $this->_html_hidden_fields($tab."\t", $this->hidden_fields); }

$o .= $this->_html_fields($tab."\t", $this->submit_fields);

</code>

 

quelqu'un peut il m'aider ? :-?

Posté(e)

quel est le prototype de la fonction func_get_arg()?

 

Cette fonction attend-t-elle un argument?

 

Ce sont des warnings, tu peux modifier ta directive error_level si tu ne souhaites plus les afficher.

Posté(e)

Bonjour Greywolf,

 

Merci de ton aide,

 

J'ai presque réussi mon espace membre mais ces warnings m'embêtent effectivement.

 

je te donne le code complet d'une des fonction qui n'affiche pas d'erreur:

 

public function __toString() {
   $num_args = func_num_args();
   $tab = $num_args > 0 ? func_get_arg(1) : '';

	$o = $tab.'<form'.$this->attrs.'>'."\n";

	if (empty($this->fieldsets)) {

		$o .= $this->_html_fields($tab."\t", array_diff_key($this->fields, $this->hidden_fields, $this->submit_fields));
		if (!empty($this->hidden_fields)) { $o .= $this->_html_hidden_fields($tab."\t", $this->hidden_fields); }
		$o .= $this->_html_fields($tab."\t", $this->submit_fields);

	} else {

		$hidden_fields = $this->hidden_fields;
		$submit_fields = $this->submit_fields;

		foreach ($this->fieldsets as $legend => $fields) {

			$o .= $this->_html_fieldset($tab, $legend, $fields);

			foreach($fields as $f) {

				unset($hidden_fields[$f], $submit_fields[$f]);
			}
		}
		if (!empty($hidden_fields)) { $o .= $this->_html_hidden_fields($tab."\t", $hidden_fields); }
		if (!empty($submit_fields)) { $o .= $this->_html_fields($tab."\t", $submit_fields); }
	}
	$o .= $tab.'</form>';
	return $o;
}

 

et le type d'une fonction qui affiche des erreurs :

public function __toString() {
   $num_args = func_num_args();
   $tab = $num_args > 0 ? func_get_arg(1) : '';

	$this->_generate_class();

	$id = '';
	$label = '';
	if (!empty($this->label)) {

		list($for, $id) = self::_generate_for_id($this->form->auto_id(), $this->attrs['name']);
		$label = '<label'.$for.'>'.$this->label.$this->form->label_suffix().'</label>'."\n$tab";
	}

	$errors = $this->error_messages->__toString($tab);
	if (!empty($errors)) { $errors = "\n".$errors; }

	if (true === $this->autocomplete) {

		$value = $this->form->get_bounded_data($this->attrs['name']);
		$value = (!empty($value)) ? $value : $this->value;
		$value = (!empty($value)) ? ' value="'.htmlspecialchars($value).'"' : '';

	} else {

		$value = '';
	}

	$field = '<input'.$id.$this->attrs.$value.' />';
	return $tab.sprintf("%2\$s%1\$s%3\$s", $field, $label, $errors);
}
}

 

Cette fonction remplace l'initiale :

$tab de fonctions __toString()

qui generait l'erreur :

Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\wamp\www\test2\global\init.php on line 11

Fatal error: Method Form::__tostring() cannot take arguments in C:\wamp\www\test2\libs\form.php on line 270

 

je ne comprends pas pourquoi elle ne fonctionne pas à chaque fois ?

Posté(e)

si tu pouvais donner la classe d'objet qui dispose de ces 2 méthodes __toString(), l'appel à la méthode __toString() est similaire, à quel objet s'applique-t-elle à l'instant t; ainsi que le code correspondant à func_get_arg() et func_num_args()

 

peut-être est-ce tout simplement le résultat de ton test booléen qui te génère ces warnings lorsque la condition est fausse?

 

$num_args > 0 ? func_get_arg(1) : ''

 

C'est ton code ou tu essaies de réadapter une base existante?

Posté(e)

Mais normalement : func_get_arg() est appelé seulement si on a un argument (conditionné par $num_args > 0), donc l'argument 1 devrait en théorie exister si on appelle cette fonction ?

Posté(e)

j'ai débuggé en remplaçant le <code type="php">$num_args > 0 ? func_get_arg(1) : '';</code> par

<code type="php">

$num_args > 0 ? func_get_arg(0) : '';

</code>

et ca fonctionne j'espere que l'inscription et le codage n'en patiront pas.

 

J'ai une autre erreur :<citation>Notice: Undefined offset: 1 in C:\wamp\www\test2\modules\membres\inscription.php on line 137</citation>

 

et la ligne en question est :<code type="php">// On vérifie que l'erreur concerne bien un doublon

if (23000 == $erreur[0]) { // Le code d'erreur 23000 siginife "doublon" dans le standard ANSI SQL

 

preg_match("`Duplicate entry '(.+)' for key \d+`is", $erreur[2], $valeur_probleme);

$valeur_probleme = $valeur_probleme[1];

 

if ($nom_utilisateur == $valeur_probleme) {

 

$erreurs_inscription[] = "Ce nom d'utilisateur est déjà utilisé.";

 

} else if ($adresse_email == $valeur_probleme) {

 

$erreurs_inscription[] = "Cette adresse e-mail est déjà utilisée.";

 

} else {

 

$erreurs_inscription[] = "Erreur ajout SQL : doublon non identifié présent dans la base de données.";

}

 

} else {

 

$erreurs_inscription[] = sprintf("Erreur ajout SQL : cas non traité (SQLSTATE = %d).", $erreur[0]);

}

</code> dont la ligne 137 est :<code type="php">$valeur_probleme = $valeur_probleme[1];</code>

 

as tu ne idée ;)

Posté(e)

ton tableau ne contient au mieux qu'une seule valeur et ne dispose que d'un seul indice => 0

 

Je t'invite à consulter la doc de preg_match pour comprendre pourquoi

http://php.net/manual/fr/function.preg-match.php

 

tu peux tester la valeur de retour de preg_match avant d'entrer dans ta structure conditionnelle

Posté(e)

PHP: func_get_arg - Manual

Generates a warning if called from outside of a user-defined function, or if arg_num is greater than the number of arguments actually passed.

 

Je pense que ton erreur d'Undefined offset provient d'un souci similaire : tu ne vérifies pas qu'une variable est un tableau avant d'accéder à l'un de ses éléments, et tu ne vérifies pas si l'élément auquel tu tentes d'accéder existe réellement.

 

$valeur_probleme = $valeur_probleme[1];

Typiquement le genre de code qui me fait hurler, a fortiori lorsque rien ne vérifie que $valeur_probleme est un array et que l'index 1 est accessible...

 

Un autre truc qui me fait hurler c'est de se baser sur les messages d'erreur d'un SGBD précis, configuré d'une manière précise, pour évaluer où se situe le problème, alors qu'il est très simple et très peu coûteux de tester proprement l'existence d'un enregistrement dans une table : en terme de ressources, c'est beaucoup plus rapide de lancer une requête SQL de plus que de faire un preg_match (les expressions régulières en PHP sont monstrueusement lourdes). Et je ne parle même pas du jour où les message d'erreur sera modifié (par ce que la version du SGBD aura changé, parce que le SGBD aura été remplacé par un autre, parce que la langue d'affichage du message aura changé, ...)

 

Mon conseil : fais d'abord un select dans ta table d'utilisateurs avec comme condition username = [ce qui a été saisi] ou email = [ce qui a été saisi] et si vraiment tu veux un message d'erreur spécifique à chacun tu testes lequel des deux a été retourné identique à la saisie. Evite les preg_match et surtout ne te base jamais sur les textes des messages d'erreur retournés par les programmes externes pour faire quoi que ce soit.

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...