Page 1 sur 3

Pleins de questions, bugs et problèmes...

Posté : 21 avr. 2008, 19:14
par sgrunt
Bonjour,

Je dois réalisé un site marchand pour mon bac. Un site alliant html, css et php.
Le html et css je me débrouille, enfin j'arrive à ce que je veux mais j'ai de grandes idées pour faires des trucs en php mais à part les bases et les conditions je sais pas trop.
J'ai la logique "informatique" je comprends vite mais quand j'ai des erreurs je m'énerve et j'avance pas...
Les oraux sont bientot alors c'est pour ca que je viens vous demander votre aide car mon prof n'aide pas beaucoup...


Mon premier problème c'est ca:

Code : Tout sélectionner

Warning: session_start() [function.session-start]: open(/mnt/104/sda/5/a/fringuescorot/sessions/sess_46659e6dc58bdf03b8200d2297cf5a97, O_RDWR) failed: No such file or directory (2) in /mnt/104/sda/5/a/fringuescorot/connect.php on line 2 Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/104/sda/5/a/fringuescorot/connect.php:2) in /mnt/104/sda/5/a/fringuescorot/connect.php on line 2 Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/104/sda/5/a/fringuescorot/connect.php:2) in /mnt/104/sda/5/a/fringuescorot/connect.php on line 2

Mon script est celui ci:

<?php
session_start();
//connexion à la base Fringues2
require ("connexion.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Fringues.com Boutique de fringues</title>
        <link href="style.css" title="large" rel="stylesheet" type="text/css" media="all" />
    </head>
    <body>
        <div id="global">
            <div id="header"></div>
			
			<div id="menu_top">
				<ul id="navbar">
					<li><a title="Lien" href="accueil.html">Accueil</a></li>
					<li><a title="Lien" href="identification.html">S'identifier</a></li>

[...]
Je ne l'ai pas mis en entier je met juste ce qu'il dit qui ne va pas.
C'est censé être la page ou on entre notre numéro de client et que ca doit se mettre dans "session" pour les autres pages comme les pages de commande qui ont besoin de ce code..

Il me met ces trois lignes de bug et apres il identifie quand même mon numéro client..
Donc j'ai ces lignes de bugs et en dessous j'ai ma récupération de données de la bdd..

Avec Easyphp cette partie du site fonctionnait mais j'ai du tout mettre sur un serveur pour le jour de l'oral donc j'ai choisis free car à chaque fois que j'ai eu besoin j'ai toujours été satisfait.

Donc voila, qu'est ce qui se passe dans mon shmilblick?


Sinon, Je dois faire une partie du site accessible seulement pas les clients et les visiteurs et il faut que le gérant de la société puisse voir des trucs de gérant lui seul genre la liste de ses clients avec leurs numéro et que les autres visiteurs ne peuvent pas voir.. Mon prof m'a sorti un truc de front office et back office, jusque là ok sauf que j'ai rien de concret...
J'aimerais savoir comment faire pour si par exemple j'entre un numero de client spécial comment faire apparaitre des nouveaux liens dans le menu? :S Sachant que tout mon menu est en html (d'ailleur vous en avez une partie dans le script plus haut)

Si vous pensez que c'est trop dur pour un débutant comme moi dite le ou si vous avez d'autres idées.

Toute l'aide possible et imaginable sera la bienvenue.

Merci!

Cordialement
Jerem

Posté : 21 avr. 2008, 22:52
par Ryle
Pour que les sessions fonctionnent chez Free, il faut créer un dossier "sessions/" à la racine de ton site. Prend l'habitude et le temps de lire les messages d'erreur sans t'énerver, 9 fois sur 10 ils contiennent la solution :
open (/mnt/104/sda/5/a/fringuescorot/sessions/....) failed :arrow: le fichier n'a pas pu être ouvert
No such file or directory :arrow: le fichier ou le dossier spécifier n'existe pas

Les autres erreurs en découlent et se résoudront automatiquement lorsque tu auras créé le dossier manquant ;)


Quant à la partie Front / Back Office, la technique est simple : un utilisateur lambda ne doit voir qu'une partie du menu, un administrateur doit le voir entièrement. La différence entre les deux étant l'authentification, il te suffit de mettre en session une info te pemettant de savoir si l'utilisateur est admin ou pas lorsque celui-ci se log. Il ne te reste plus ensuite qu'à mettre des conditions if()autour des éléments à protéger dans ton menu (et dans tes pages) pour t'assurer que seuls les admins les verront :)

Posté : 22 avr. 2008, 07:47
par sgrunt
Bonjour,

Je vais essayer tout ca tout de suite

Je reviendrais poster dans la journée, peut être avec de nouveaux problèmes mais espérons que non ^^

J'ai lu les messages d'erreurs et j'avais pas compris ce que voulait dire ceci enfin je ne comprenais pas car en local j'avais pas besoin de ce dossier session.

Merci beaucoup!

A tres bientot par ici

Cordialement
Jerem


EDIT:

Bon alors j'ai fait pas mal de choses mais j'ai encore quelques questions..

Pour le sessions c'est ok j'ai compris comment ca fonctionne et tout c'est super.
Pour afficher les menus j'ai fait un client admin de numéro 511000 qui est complètement différent des numéro client qui comment comme ceci: 411xxx ou x correspond à 001,002 etc.
Puis j'ai fais une condition dans mon menu comme quoi si le numéro contenu dans session est 511000 alors on affiche sinon on affiche rien (j'ai mis echo ''; )
C'était votre idée.? est ce que c'est une bonne technique?


Je vais faire petit peu par petit peu et ne pas tout mélanger..

Donc voici ma question:
J'ai fais un formulaire pour l'inscription d'un nouveau client, il fonctionne bien mais il y a deux détails qui m'embete:

1) si on ne rempli aucun champ et que on fait valider il enregistre dans la bdd avec tout les champs vide.. j'aimerais qu'il dise qu'on a pas rempli tout les champs et qu'on recommence, comment faire?

2)A la fin du formulaire j'ai une case à cocher comme quoi le nouveau client accepte les conditions mais si on ne coche pas ca fonctionne quand même, comment on fait pour que lorsqu'on ne coche pas ca ne s'envoit pas?

De plus, si c'est trop dur, quand un des deux cas précédent ce produit j'aimerais que ce soit une petite boite e dialogue qui s'ouvre comme en VBA avec msgbox mais je ne sais pas le faire.
J'imagine ca comme ca: pour le premier problème une boite de dialogue avec un message "veuillez remplir tout les champs" et un bouton ok et en faisant ok on revient sur la page
Et dans le second cas la même chose mais avec "vous devez accepter les conditions pour vous inscrire"..

Voilà.
J'espère que vous verrez ce message comme c'est une édition..

Merci infiniment!
Cordialement

Posté : 22 avr. 2008, 17:16
par guilt92
Bonjour,

Tu peux valider un formulaire avant de le soumettre en procédant de la facon suivante dans la déclaration :

Code : Tout sélectionner

<form name="mon_formulaire" method="post" onSubmit=" return fonction_validation()"> ... <input type="text" name="texte1"/> <input type="submit".../> </form>
Ainsi lorsque l'on clique sur submit cela exécute la fonction "fonction_validation()". Si celle ci retourne "False" le formulaire n'est pas envoyé. Tu peux donc dans l entete de ta page créer la fonction et vérifier ce que tu veux :

Code : Tout sélectionner

function return_validation() { //cas d'un input nommé texte1 vide par exemple if(document.mon_formulaire.texte1.value == "") return false; else return true; }
tu as le cas simple ici d'une fonction de validation qui ne marchera pas si le texte1 est vide.
Tu peux de plus afficher un message :

Code : Tout sélectionner

function return_validation() { //cas d'un input nommé texte1 vide par exemple if(document.mon_formulaire.texte1.value == "") { alert("Texte1 est vide !"); return false; } else return true; }
En espérant que cela t'aidera...

Posté : 22 avr. 2008, 18:33
par sgrunt
Bonjour!

Merci de ton aide. Mais je n'arrive pas à le faire fonctionner...
Il doit y avoir quelque chose qui m'échappe.

mon "form" est comme ceci:
<form method="post" action="Donneesformulaire.php" name="formulaire"
 onSubmit="return fonction_validation()">
Et au début de mon script j'ai rajouté ce que tu m'as donné:
<?php
//définition de variables à transmettre vers d'autres scripts
session_start();
//connexion à la base Fringues2
require ("connexion.php");

$numero=$_SESSION["numclt"];

// fonction pour validation du formulaire
function return_validation()
{

if(document.formulaire.nom.value == "")
    {
    alert("Nom est vide !");
    return false;
    }
else return true;
}
?>
J'ai regardé des tutos sur le net à propo de cette méthode pour éviter de re-poster ici direct mais j'ai pas trouvé grand chose..
Juste que j'ai cru comprendre que c'était du javascript alors je me suis dit qu'il fallait que je ne le mette pas dans mes balises php alors j'ai essayer avec <script language="javascript"></script>

Mais dans tout les cas le formulaire passe comme une lettre à la poste :(

Une idée? ca doit être tout bête comme d'hab...

Merci en tout cas!

EDIT: Ah! ce ne serait pas parce que ma fonction n'a pas le même nom? dans form: "fonction_validation" et dans le script:"return_validation" ?
J'essaye en tout cas.
EDIT2: Bon apparament c'est pas ca...:/
EDIT 3: C'est bon ca fonctionne mais c'est bizarre..

mon script ressemble à ca maintenant:
<?php
//définition de variables à transmettre vers d'autres scripts
session_start();
//connexion à la base Fringues2
require ("connexion.php");

$numero=$_SESSION["numclt"];

// fonction pour validation du formulaire

?>
<script language="javascript">
function validation(frm)
{

if(document.formulaire.nom.value == "")
    {
    alert("Nom est vide !");
    return false;
    }
else return true;
}
</script>

[...] mon html [...]

<form method="post" action="Donneesformulaire.php" name="formulaire" 
onSubmit="return validation(this)">
Voilà mais j'ai eu un changement de police dans ma page donc je vais résoudre ca et aussi comment faire pour que ce soit pour plusieurs champs aussi (prenom,adresse, code postal etc..) et pour la checkbox?

Posté : 23 avr. 2008, 10:50
par guilt92
Pour tester plusieurs champs tu as plusieurs possibilités :

Soit tu utilise simplement le "OU" dans ta boucle de test par exemple

Code : Tout sélectionner

if(document.formulaire.nom.value == "" || document.formulaire.autre_nom.value == "") //et ainsi de suite
Sinon, pour faire plus propre tu peux aussi créer un message adapté aux champs qui ne sont pas remplis par exemple :

Code : Tout sélectionner

function return_validation() { var msg_erreur = ""; if(document.formulaire.nom.value == "") msg_erreur += "Le champ Nom ne doit pas etre vide\n"; if(document.formulaire.Autre_CHAMP.value == "") msg_erreur += "Le champ Autre_Champ ne doit pas etre vide\n"; //et ainsi de suite //Si msg_erreur n'est pas vide cela veut dire que tu as AU MOINS 1 erreur donc : if(msg_erreur) { alert(msg_erreur); //tu affiches ton message d'erreur return false; //tu ne valides pas le formulaire } else return true; }
Enfin, pour tester la valeur d'une checkbox tu as l'attribut checked qui te renvoie "true" si la case est cochée et "false" si elle ne l'est pas.
Tu peux donc faire comme test :

Code : Tout sélectionner

if(!document.formulaire.nom_checkbox.check) msg_erreur+= "Vous devez cocher la case !";

Posté : 23 avr. 2008, 12:20
par sgrunt
Bonjour,

En fait cette nuit j'ai continuer à chercher dans mon coin car je n'avais pas encore de réponses.
Du coup, j'ai abouti à quelque chose qui fonctionne mais ca ne ressemble pas trop à ce que vous m'avez proposé juste avant bien que ce soit a peu pres pareil alors j'ai peur que ce soit pas très bon? Vous voulez bien vérifier?

Et de plus, il parait que c'est pas bien d'utiliser les alert pour ceci et encore moins le javascript?
Donc je suis un peu perdu, ca m'a semblé être plus simple pour aboutir à quelque chose de concret.

Aussi mon code est un peu à ralonge et ca fait un peu bricolage je trouve non?

voici le code en début de page:
<script language="javascript">
function validation(frm)
{

if(document.formulaire.nom.value == "")
    {
    alert("* Veuillez remplir tous les champs obligatoires !");
    return false;
    }
if(document.formulaire.prenom.value == "")
    {
    alert("* Veuillez remplir tous les champs obligatoires !");
    return false;
    }
if(document.formulaire.adresse.value == "")
    {
    alert("* Veuillez remplir tous les champs obligatoires !");
    return false;
    }
if(document.formulaire.codepostal.value == "")
    {
    alert("* Veuillez remplir tous les champs obligatoires !");
    return false;
    }
if(document.formulaire.ville.value == "")
    {
    alert("* Veuillez remplir tous les champs obligatoires !");
    return false;
    }
if(document.formulaire.Statut.value == "")
    {
    alert("* Veuillez remplir tous les champs obligatoires !");
    return false;
    }
if(document.formulaire.termes.value == "1") {
	alert("* Vous devez accepter les conditions générales de ventes");
	return false;
	}
else return true;
}
</script>
(Avec le form qui va avec)

Le résultat c'est que tant qu'on a pas remplir les champs que je veux il y a une fenetre d'alerte (une seule à la fois) et lorqu'on a fini les champs et pas coché il y a aussi une fenetre d'alerte. Mais ca fonctionne par ordre il n'y a pas 7 fenetre d'alerte qui s'ouvre en même temps si on a rien rempli (ce dont j'avais peur)

Donc voilà, j'aimerais vos avis?
J'ai essayer de le faire seul avec votre aide et un peu google alors j'ai fais comme j'ai compris.

Merci infiniment en tout cas

J'aurais d'autres questions pour plus tard ^^

Posté : 23 avr. 2008, 12:38
par guilt92
Cela est correct.
Il n'y a pas 7 messages d'alerte pour la raison suivante : le return false renvoie la valeur false (donc ne valide pas le formulaire) et termine l'exécution de la fonction, donc les autres cas ne sont pas étudiés.

La solution que vous avez utilisé correspond en fait à ma première proposition qui est d'utiliser le "OU" sauf que vous faites cela au cas par cas. C'est syntaxiquement correct et cela fonctionnera. L'alternative que je proposais dans la deuxième solution était de créer un message qui donne le nom des champs incorrect donc qui pourrait dire par exemple :

"* Le champ Prénom doit être rempli
* Le champ Code postal doit être rempli"

Ce qui est plus complet.
Néanmoins j'insiste sur le fait que votre code est correct et opérationnel sauf peut etre pour le checkbox : à ma connaissance la value ne change pas, il faut utiliser l'attribut checked.

Posté : 23 avr. 2008, 14:17
par sgrunt
Bonjour,

J'ai modifié on script pour le rendre plus léger et complet grâce à vos explications.
De plus l'alerte pour la checkbox ne fonctionnait pas en effet, j'avais mal fait mes test je devais être fatigué. :roll:

Du coup on passe de 40lignes à 20 ^^ et la checkbox fonctionne :)
Voici le code:
<script language="javascript">
function validation()
{
var msg_erreur = "";

if(document.formulaire.nom.value == "") msg_erreur += "* Le champ Nom ne doit pas être vide\n"; 
if(document.formulaire.prenom.value == "") msg_erreur += "* Le champ Prenom ne doit pas être vide\n";
if(document.formulaire.adresse.value == "") msg_erreur += "* Le champ Adresse ne doit pas être vide\n";
if(document.formulaire.codepostal.value == "") msg_erreur += "* Le champ Code Postal ne doit pas être vide\n";
if(document.formulaire.ville.value == "") msg_erreur += "* Le champ Ville ne doit pas être vide\n";
if(document.formulaire.Statut.value == "") msg_erreur += "* Le champ Catégorie ne doit pas être vide\n";
if(!document.formulaire.termes.checked) msg_erreur += "* Vous devez accepter les conditions de ventes!";
if(msg_erreur)
    {
    alert(msg_erreur); 
    return false; 
    }
else return true;
} 
</script>
Sinon, il y a un moyen simple de mettre un titre à la fenetre d'alerte? Pour remplacer [Application Javascript] Histoire de faire plus "pro"..

C'est cool ce formulaire est bientôt fini sans être bâclé ça fait plaisir!
Merci à vous.

Des remarques sur le code?

EDIT: cette nuit quand j'essayai seul j'avais lu ca: http://forum.hardware.fr/hfr/Programmat ... 1423_1.htmNotament ce qu'ils disent sur l'utilisation de cette méthode (surtout à la page 2).Je ne sais pas trop quoi en penser?

Posté : 23 avr. 2008, 14:32
par guilt92
Personnellement je pense que le code est bon.
Après, pour un formulaire plus conséquent on pourrait envisager de parcourir les éléments du formulaire avec une boucle pour ne pas avoir à écrire un cas pour chaque champ mais bon, chaque chose en son temps ;)
Peut être que quelqu'un de plus expérimenté que moi vous donnera des conseils pour améliorer ce code mais en tous cas je pense qu'il fonctionne bien tel quel.

En revanche il est impossible de changer le titre d'une fenêtre de dialogue.

Quant à l'utilisation de cette méthode je ne la trouve pas génante mais après c'est à toi de voir. Je pense par contre qu elle ne doit pas empécher les vérifications coté serveur avant le traitement de l'information (ajout dans une bdd ou autre)...

Posté : 23 avr. 2008, 16:11
par sgrunt
Ok ben ça ira comme cela :)
Si quelqu'un a quelque chose à proposer sur mes problèmes d'avant faut le faire, merci :)

Alors mon prochain problème c'est un problème de listes déroulantes..

Donc c'est pour commander on choisit son produit dans la liste et on fait valider puis sur la prochaine page on choisit la quantité etc.

Il faut que la liste des produits ce mette à jours en fonction de ma bdd.

J'ai commencé à faire ma liste et j'arrive à la faire ce que je veux sauf que j'ai tout les produit à la suite et j'aimerais faire une première liste ou l'ion choisira la catégorie des produits ( ici ce sera 'homme','femme' ou 'enfant') et ensuite avoir les produits en fonction de cette catégorie dans une deuxieme liste qui se mettra à jour en fonction de ce premier choix.

Je ne vois pas trop comment faire..c'est pas faute d'avoir cherché.
Voici déjà mon code: ( il n'y a qu'une liste ou il y a tout les produit de ma table produit)
		echo '<h2>Veuillez choisir un produit à commander :</h2>';
// on veut faire une liste déroulante pour choisir un produit
		$requete4="select * from produit" ;//recherche du catalogue des produits (TOUS)
		$result=mysql_query($requete4) or die ("Requête4 impossible".mysql_error());//exécution de la requête
		
		echo '<select name="codeprodf" size="1">';
 if ($ligne=mysql_fetch_assoc($result))
  {
    echo '<option selected value = "' . $ligne["nump"] . '">' . $ligne["nump"] .' '. $ligne["nomp"] .'</option>';
    // le value est  ce qu'on récupère comme valeur' : nump
    // la suite est ce que l'on visualise à l'écran codeprod et nomp
  
    while ($ligne=mysql_fetch_assoc($result))
    {
    // on fait une itération pour voir les lignes suivantes qui ne seront pas sélectionnées par défaut
	echo '<option value = "' . $ligne["nump"] . '">' . $ligne["nump"] .' '. $ligne["nomp"] .'</option>';
    }
  }
// fin de select
  echo'</select>
<input type="submit" value="valider">  ';
J'ai créé un champ catégorie dans ma table car je pensais l'utiliser mais je ne sais pas comment.Ses valeur seraient soit homme soit femme soit enfant.

Je suis actuellement en train de regarder ce tuto :
http://www.phpfrance.com/forums/voir_sujet-4562.php

J'ai posté maintenant comme ca j'essaie de comprendre les tutos et je pourrais parler ici en parallèle.

Merci merci :)

Cordialement

EDIT: les commentaires ne sont pas finis, c'est parce que je dois rendre mes scripts commentés

Posté : 24 avr. 2008, 17:35
par sgrunt
Bonjour,

J'ai réussi a faire mes listes déroulants dynamiques liées tout seul grâce à votre tuto super bien!
Ça marche du feu de dieu :)

On passe à mon prochain problème? :lol:

Allez c'est parti:

Le processus actuel de commande c'est: je choisis mon produit dans la liste déroulante, je fais valider, j'arrive sur une page qui récapitule et me demande la quantité, je met la quantité, je valide et j'arrive sur ma troisième page qui envois la commande dans ma bdd (avec INSERT INTO etc.)
Sauf que... on ne peut commander qu'un article :S

Donc, déjà à la base je voulais un panier pour l'ergonomie. Donc j'ai passé ma journée a faire fonctionner ce foutu panier. Et j'ai réussi !

Donc le nouveau scénario pour commander c'est:
1) Je choisis mon produit dans la liste déroulante, je valide.
2)Il me dit le produit que j'ai choisi, si c'est bon j'ajoute au panier sinon retour sur la liste déroulante.
3)J'ai ajouté au panier tout ce que je veux, je valide (bouton "commander")
4)J'arrive sur la derniere page qui fait office de transfert dans la bdd et qui affiche que la commande a bien été transmise.

Là ou je suis perdu c'est à partir de la fin de la 3) et la 4)

Je ne trouve pas comment envoyer à ma page 4) à l'aide d'un bouton submit tout les produits et toutes les quantités pour chaque produit?

Et dans la page de l'étape 4), comment faire pour enregistrer plusieurs articles et plusieurs quantité pour un seul numeroclient?

Faut il utiliser la variable session?au moins pour récupéré le numero client je pense?

ma table commande est comme ceci:
CREATE TABLE IF NOT EXISTS `commande` (
  `numcdecl` int(11) NOT NULL auto_increment,
  `datecdecl` date NOT NULL,
  `numpcdecl` varchar(4) NOT NULL,
  `qtepcdecl` int(4) NOT NULL,
  `qteplivcl` int(4) NOT NULL,
  `numclcde` int(11) NOT NULL,
  PRIMARY KEY  (`numcdecl`),
  KEY `numpcdecl` (`numpcdecl`,`numclcde`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=100 ;
Il faudra la modifier, non?

J'ai réaliser toute la partie panier grace à ce site:
http://jcrozier.developpez.com/articles/web/panier/


Merci de m'avoir aider jusqu'ici! Après ce gros point noir j'aurais bientot fini et je penses que je ne vous embêterais plus..

J'ai progressé énormément grâce à votre aide en ces quelques jours.

Cordialement

Posté : 25 avr. 2008, 10:53
par guilt92
Tu as plusieurs possibilités pour gérer ton panier :

Soit à chaque fois que l'utilisateur ajoute un produit à son panier tu le stockes dans une table temporaire de ta base de données, et quand la commande est validée tu ajoutes le contenu de ta table provisoire dans l'autre table, sinon tu utilises effectivement les variables de sessions :

tu as un tableau en variable de session qui contient les champs nécessaires au panier, et au moment ou la commande est validée tu copies tous les éléments de ton tableau dans la base...

Pour ta table il faut simplement que le champ "Numéro de client" ne soit pas une clé primaire, ainsi tu peux ajouter autant d'item que tu veux avec le meme numéro client. En revanche tu peux prévoir un "numéro de commande" qui est le même pour tous les items d'une meme commande mais qui s'incrémente à chaque nouvelle commande...

j espere que cela t aidera...

Posté : 25 avr. 2008, 13:27
par Cyrano
Pour les paniers, tu as aussi ce tuto-là

Posté : 26 avr. 2008, 15:17
par sgrunt
Bonjour,

@ Cyrano: J'avais regardé ce tuto là en premier mais j'aimais pas trop la facon d'expliquer je m'y perdais, j'ai trouvé l'autre (celui que j'ai cité)plus simple. :roll:

@guilt92: Je penses utiliser la méthode de session car j'ai l'impression que ce sera plus simple pour moi .
Je commence par refaire ma table commande mais j'ai pas trop compris le raisonnement, la clé primaire deviens le numero de commande? il va y avoir des doublons non? il y aura autant de ligne que de référence de produit?

Le script de ma table est bon alors? puisque numcdecl correspond au numero de commande qui s'incrémente et le numéro client(numclcde) est clé étrangère en référence à ma table client

Le numéro de commande doit être clé primaire?

Ma table commande de mon post précédent est elle bonne?

Merci beaucoup de votre aide