PHP, if/else empeche PHPMailer : pourquoi....?

Jmp.anon Messages postés 64 Date d'inscription samedi 24 novembre 2012 Statut Membre Dernière intervention 12 février 2024 - 12 févr. 2024 à 11:38
 phpdoc - 12 févr. 2024 à 13:43

Bonjour,

j'ai inséré un "if/else" dans une page qui prévoit l'utilisation de la fonction PHPMailer et ça plante. Je ne comprends pas pourquoi. Pouvez vous m'aider svp?

1) Avant ma modif:

j'ai dans ma page une partie PHP qui me permet d'envoyer par mail les données de mon formulaire en utilisant la fonction PHPMailer. Elle fonctionne très bien.
Dans le code, elle commence par : <?php use PHPMailer\PHPMailer\PHPMailer;
Ensuite, il y a 50 lignes qui suivent tout à fait normales pour traiter, sécuriser et transmettre les datas par mail, jusqu'à la fin avec évidemment : ?>

2) Ma modif:

J'ai souhaité mettre un if pour vérifier que dans mon formulaire, il y a une info que je considère comme obligatoire. en gros la structure c'est : si la variable $obligatoire=4, alors on fait PHPMailer, sinon on dit que c'est impossible.
ça donne qqch d'assez classique:
<?php if ($obligatoire == 4) { use PHPMailer\PHPMailer\PHPMailer;
Ensuite il y a les 50 autres lignes dont je parlais ci-dessus, les memes évidemment.
Ce à quoi j'ai donc rajouté la fin de mon "if/else" avec:
} else {echo 'impossible';} ?>
(oui, la variable $obligatoire est bien définie, j'ai vérifié)

3)Avec cette modif, j'ai le message d'erreur suivant:

Parse error: syntax error, unexpected token "use" in C:\wamp64\www\TESTS\message.php on line56
Ce qui veut dire qu'avec mon if/else, il ne reconnait plus l'appel de la fonction PHPMailer qui commence par use PHPMailer\PHPMailer\PHPMailer;
et là, je ne comrpends pas... où est mon erreur...?

Merci de votre aide !

1 réponse

Jmp.anon Messages postés 64 Date d'inscription samedi 24 novembre 2012 Statut Membre Dernière intervention 12 février 2024
Modifié le 12 févr. 2024 à 13:26

Bon, j'ai trouvé une solution pour régler le probleme (mais pas pour le comprendre, si qq'un veut bien m'expliquer je suis preneur)

Toute la partie "PHP Mailer" (les 50 lignes), je les ai mises sur un fichier PHP à parti que j'appelle dans mon if via la fonctionnalité "include".

Là, ça marche. Je n'ai absolument rien changé dans la syntaxe sinon... bizarre.

0

Le mot-clé use doit être déclaré dans le contexte le plus externe d'un fichier (le contexte global) ou alors dans les déclarations d'espace de noms. Ceci car l'importation est effectuée à la compilation et non durant l'éxecution, donc on ne peut empiler les contextes. 

https://www.php.net/manual/fr/language.namespaces.importing.php#language.namespaces.importing.scope

0