problèle de arrays

guiguizou
Invité n'ayant pas de compte PHPfrance

30 janv. 2011, 21:50

Salut à tous,
je viens auprès de vous solliciter la résolution d'un problème php sur le quel je plante depuis un moi.Il s'agit de la construction de formulaire à partir d'une classe php odnc les instruction sont envoyé à la classe sous forme de tableau.
Voici ci bas le code source de script .Le problème se situe très probablement au niveau du arrays car le tableau semble vide:
<?php

// Vérification des droits d'accès de la page
if (!utilisateur_est_connecte()) {

	// On affiche la page d'erreur comme quoi l'utilisateur doit être connecté pour voir la page
	include_once CHEMIN_VUE_GLOBALE.'erreur_non_connecte.php';
	
} else {
	
	// Ne pas oublier d'inclure la librairie Form
	include_once CHEMIN_LIB.'form.php';
	
	// "form_modif_infos" est l'ID unique du formulaire
	$form_modif_infos = new Form("form_modif_infos");
	
	$form_modif_infos->method('POST');
	
	$form_modif_infos->add('Email', 'adresse_email')
                         ->label("Votre adresse email")
                         ->Required(false)
                         ->value($_SESSION['email']);
	
	$form_modif_infos->add('Checkbox', 'suppr_avatar')
                         ->label("Je veux supprimer mon avatar")
                         ->Required(false);
	
	$form_modif_infos->add('File', 'avatar')
                         ->filter_extensions('jpg', 'png', 'gif')
                         ->max_size(8192) // 8 Kb
                         ->label("Votre avatar (facultatif)")
                         ->Required(false);
	
	$form_modif_infos->add('Submit', 'submit')
                         ->initial("Modifier ces informations !");
	
	// "form_modif_mdp" est l'ID unique du formulaire
	$form_modif_mdp = new Form("form_modif_mdp");
	
	$form_modif_mdp->method('POST');
	
	$form_modif_mdp->add('Password', 'mdp_ancien')
                       ->label("Votre ancien mot de passe");
	
	$form_modif_mdp->add('Password', 'mdp')
                       ->label("Votre nouveau mot de passe");
	
	$form_modif_mdp->add('Password', 'mdp_verif')
                       ->label("Votre nouveau mot de passe (vérification)");
	
	$form_modif_mdp->add('Submit', 'submit')
                       ->initial("Modifier mon mot de passe !");
	
	// Création des tableaux des erreurs (un par formulaire)
	$erreurs_form_modif_infos = array();
	$erreurs_form_modif_mdp   = array();
	
	// et d'un tableau des messages de confirmation
	$msg_confirm = array();
	var_dump($erreurs_form_modif_infos);
	
	// Validation des champs suivant les règles en utilisant les données du tableau $_POST
	if ($form_modif_infos->is_valid($_POST)) {
	
		list($adresse_email, $suppr_avatar, $avatar) = $form_modif_infos->get_cleaned_data('adresse_email', 'suppr_avatar', 'avatar');
	
		// On veut utiliser le modèle de l'inscription(~/modules/membres.php)
		include_once CHEMIN_MODELE.'membres.php';
	
		// Si l'utilisateur veut modifier son adresse e-mail
		if (!empty($adresse_email)) {
	
			$test = maj_adresse_email_membre($_SESSION['id'], $adresse_email);
	
			if (true === $test) {
	
				// Ça a marché, trop cool !
				$msg_confirm[] = "Adresse e-mail mise à jour avec succès !";
	
			// Gestion des doublons
			} else {
	
				// Changement de nom de variable (plus lisible)
				$erreur =& $test;
	
				// On vérifie que l'erreur concerne bien un doublon
				if (23000 == $erreur[0]) { // Le code d'erreur 23000 signifie "doublon" dans le standard ANSI SQL
	
					preg_match("`Duplicate entry '(.+)' for key \d+`is", $erreur[2], $valeur_probleme);
					$valeur_probleme = $valeur_probleme[1];
	
					if ($adresse_email == $valeur_probleme) {
	
						$erreurs_form_modif_infos[] = "Cette adresse e-mail est déjà utilisée.";
	
					} else {
	
						$erreurs_form_modif_infos[] = "Erreur ajout SQL : doublon non identifié présent dans la base de données.";
					}
	
				} else {
	
					$erreurs_form_modif_infos[] = sprintf("Erreur ajout SQL : cas non traité (SQLSTATE = %d).", $erreur[0]);
				}
	
			}
		}
	
		// Si l'utilisateur veut supprimer son avatar...
		if (!empty($suppr_avatar)) {
	
			maj_avatar_membre($_SESSION['id'], '');
			$_SESSION['avatar'] = '';
	
			$msg_confirm[] = "Avatar supprimé avec succès !";
	
		// ... ou le modifier !
		} else if (!empty($avatar)) {
	
			// On souhaite utiliser la librairie Image
			include_once CHEMIN_LIB.'image.php';
	
			// Redimensionnement et sauvegarde de l'avatar
			$avatar = new Image($avatar);
			$avatar->resize_to(100, 100); // Image->resize_to($largeur_maxi, $hauteur_maxi)
			$avatar_filename = DOSSIER_AVATAR.$id_utilisateur .'.'.strtlower(pathinfo($avatar->get_filename(), PATHINFO_EXTENSION));
			$avatar->save_as($avatar_filename);
	
			// On veut utiliser le modèle des membres (~/modules/membres.php)
			include_once CHEMIN_MODELE.'membres.php';
	
			// Mise à jour de l'avatar dans la table
			// maj_avatar_membre() est définit dans ~/modules/membres.php
			maj_avatar_membre($_SESSION['id'] , $avatar_filename);
			$_SESSION['avatar'] = $avatar_filename;
	
			$msg_confirm[] = "Avatar modifié avec succès !";
		}
	
	} else if ($form_modif_mdp->is_valid($_POST)) {
	
		// On vérifie si les 2 mots de passe correspondent
		if ($form_modif_mdp->get_cleaned_data('mdp') != $form_modif_mdp->get_cleaned_data('mdp_verif')) {
	
			$erreurs_form_modif_mdp[] = "Les deux mots de passes entrés sont différents !";
	
		// C'est bon, on peut modifier la valeur dans la BDD
		} else {
	
	
			// On veut utiliser le modèle de l'inscription (~/modules/membres.php)
			include_once CHEMIN_MODELE.'membres.php';
			maj_mot_de_passe_membre($_SESSION['id'], $mdp);
	
			$msg_confirm[] = "Votre mot de passe a été modifié avec succès !";
		}
	
	}
}

// Affichage des formulaires de modification du profil
include_once CHEMIN_VUE.'formulaires_modifier_profil.php';
Je lai tester avec var_dump mais il m'affiche de problème du genre
Warning: Invalid argument supplied for foreach() in C:\wamp\www\mvc\libs\form.php on line 258
Form étant le nom e la class que j'utilise.Merci à tous

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 janv. 2011, 23:18

salut,

tu ne fournis pas le bon code, celui qu'il te faut regarder est celui de form.php.

vu l'erreur je penche pour une mauvais utilisation de la classe, mais ne connaissant pas la classe on ne peut pas t'aider plus que ça.

vu le message d'erreur effectivement tu ne fournis pas un tableau au foreach situé à la ligne 258 de form.php après je peut pas savoir à quoi ça correspond, regarde et tu trouvera ton erreur.

@+
Il en faut peu pour être heureux ......