Problème php "Erreur de syntaxe"
Résolu/Fermé
mikmuk
Messages postés
156
Date d'inscription
dimanche 22 août 2010
Statut
Membre
Dernière intervention
17 janvier 2013
-
Modifié par mikmuk le 1/06/2012 à 22:29
mikmuk Messages postés 156 Date d'inscription dimanche 22 août 2010 Statut Membre Dernière intervention 17 janvier 2013 - 4 juin 2012 à 19:42
mikmuk Messages postés 156 Date d'inscription dimanche 22 août 2010 Statut Membre Dernière intervention 17 janvier 2013 - 4 juin 2012 à 19:42
A voir également:
- Problème php "Erreur de syntaxe"
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur 3005 france tv - Forum TV & Vidéo
5 réponses
Utilisateur anonyme
1 juin 2012 à 22:50
1 juin 2012 à 22:50
Bonsoir
Il te manque au moins un } pour refermer le if (mysql_query($insertion)) {
Mais si c'est vraiment la fin de ton fichier, il manque aussi </body></html>
Il te manque au moins un } pour refermer le if (mysql_query($insertion)) {
Mais si c'est vraiment la fin de ton fichier, il manque aussi </body></html>
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
1 juin 2012 à 23:10
1 juin 2012 à 23:10
Réorganise ton code , il est passablement mal structuré et illisible.
mikmuk
Messages postés
156
Date d'inscription
dimanche 22 août 2010
Statut
Membre
Dernière intervention
17 janvier 2013
7
2 juin 2012 à 11:36
2 juin 2012 à 11:36
J'ai suivis un tutoriel pour ça donc déjà pour le réorganiser c'est mal parti :s ensuite je ne vois pas où je dois ajouter l'accolade mes connaissances en php sont assez limitées :/
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
3 juin 2012 à 12:48
3 juin 2012 à 12:48
Bonjour,
2 choses me chiffonnent:
1° ceci:
devrait plutôt être comme ecci:
je sais qu'on peut faire selpon la première manière, mais c'est déconseillé dans les bonnes pratiques...
2° ceci:
Ce serait mieux comme ceci:
dans votre code, vous avez diu HTML qui contient du PHP qui contient du HTML....
dans ma version vous êtes en HTML, vous passez en PHP et vous revenez à du HTML...
C'est ce qui est préconisé comme bonne pratique par le créateur de PHP lui-même!
A+
2 choses me chiffonnent:
1° ceci:
if (inscription_mail($mail, $pseudo, $mdp)) $sent = 'Un mail de confirmation vous a été envoyé.'; else $sent = 'Un mail de confirmation devait être envoyé, mais son envoi a échoué, vous êtes cependant bien inscrit.';
devrait plutôt être comme ecci:
if (inscription_mail($mail, $pseudo, $mdp)) { $sent = 'Un mail de confirmation vous a été envoyé.'; } else { $sent = 'Un mail de confirmation devait être envoyé, mais son envoi a échoué, vous êtes cependant bien inscrit.'; }
je sais qu'on peut faire selpon la première manière, mais c'est déconseillé dans les bonnes pratiques...
2° ceci:
<?php if ($_SESSION['erreurs'] > 0) { ?> ......code HteuMeulLeu..... <?php } ?>
Ce serait mieux comme ceci:
<?php if ($_SESSION['erreurs'] > 0): ?> ......code HteuMeulLeu..... <?php endif; ?>
dans votre code, vous avez diu HTML qui contient du PHP qui contient du HTML....
dans ma version vous êtes en HTML, vous passez en PHP et vous revenez à du HTML...
C'est ce qui est préconisé comme bonne pratique par le créateur de PHP lui-même!
A+
Pour le 1° : ajouter des accolades quand il n'y a qu'une seule instruction n'apporte rien. Ça sert juste à entretenir la confusion que les accolades font partie de la syntaxe du if alors que ça n'a aucun rapport. De plus, c'est contradictoire avec ton 2°. La notion de "bonne pratique" n'est pas une justification par elle-même, si une pratique est meilleure qu'une autre il y a une raison et tu n'en donnes pas.
Pour le 2° : ce que tu proposes ne modifie en rien les imbrications du php / html. Tu as uniquement remplacé
{ }
par
: endif;
et strictement rien d'autre.
J'ignore où tu as vu que le créateur de PHP lui-même préconisait "cette bonne pratique" (tu as un lien ?). Dans le manuel en ligne de php, on n'en parle même pas au chapitre sur le 'if', il faut aller fouiller dans le chapitre sur les syntaxes alternatives pour trouver cette écriture :
https://www.php.net/manual/fr/control-structures.alternative-syntax.php
Et surtout, quel rapport avec le Syntax error: unexpected: End of File qui est la question posée ?
Pour le 2° : ce que tu proposes ne modifie en rien les imbrications du php / html. Tu as uniquement remplacé
{ }
par
: endif;
et strictement rien d'autre.
J'ignore où tu as vu que le créateur de PHP lui-même préconisait "cette bonne pratique" (tu as un lien ?). Dans le manuel en ligne de php, on n'en parle même pas au chapitre sur le 'if', il faut aller fouiller dans le chapitre sur les syntaxes alternatives pour trouver cette écriture :
https://www.php.net/manual/fr/control-structures.alternative-syntax.php
Et surtout, quel rapport avec le Syntax error: unexpected: End of File qui est la question posée ?
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
4 juin 2012 à 01:27
4 juin 2012 à 01:27
Bonsoir:
CITE: "J'ignore où tu as vu que le créateur de PHP lui-même préconisait "cette bonne pratique" (tu as un lien ?)."
...de sa bouche même, conférences PHP PARIS 2010 à La Villette.
A+
CITE: "J'ignore où tu as vu que le créateur de PHP lui-même préconisait "cette bonne pratique" (tu as un lien ?)."
...de sa bouche même, conférences PHP PARIS 2010 à La Villette.
A+
Merci de cette précision, qui explique que j'ignorais où tu avais vu ça.
Si tu veux bien, peux-tu me préciser s'il disait :
1 - D'utiliser : endif; au lieu de { } ?
ou 2 - de remplacer
"diu HTML qui contient du PHP qui contient du HTML...." par une version où
"vous êtes en HTML, vous passez en PHP et vous revenez à du HTML..."
Si c'est le 1, te rappelles-tu quelle justification il donnait ? En tous cas, Il y a du boulot à faire dans la doc officielle PHP, et des habitudes à changer chez les programmeurs J'utilise toujours { } , et regarde toi-même ce que tu écris dans la 1ère "chose qui [te] chiffonne"
Si c'est le 2, pourquoi l'évoquer puisque ta proposition ne change absolument rigoureusement strictement rien ?
Si tu veux bien, peux-tu me préciser s'il disait :
1 - D'utiliser : endif; au lieu de { } ?
ou 2 - de remplacer
"diu HTML qui contient du PHP qui contient du HTML...." par une version où
"vous êtes en HTML, vous passez en PHP et vous revenez à du HTML..."
Si c'est le 1, te rappelles-tu quelle justification il donnait ? En tous cas, Il y a du boulot à faire dans la doc officielle PHP, et des habitudes à changer chez les programmeurs J'utilise toujours { } , et regarde toi-même ce que tu écris dans la 1ère "chose qui [te] chiffonne"
Si c'est le 2, pourquoi l'évoquer puisque ta proposition ne change absolument rigoureusement strictement rien ?
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
Modifié par mpmp93 le 4/06/2012 à 10:19
Modifié par mpmp93 le 4/06/2012 à 10:19
Bonjour
C'est la seconde solution: "vous êtes en HTML, vous passez en PHP et vous revenez à du HTML..."
Il le disait en anglais. C'était justifié par le fait qu'il était assez critique vis à vis des moteurs de templates en général, alors que PHP dispose justement de mécanismes permettant de se passer généralement des moteurs de templates.
Il expliquait qu'il avait conçu PHP initialement pour gérer un CV. Selon la nature du visiteur qui répondait à une première question, il reformait son VC de manière avantageuse par rapport au profil de son visiteur. Et le mécanisme décrit avec les if: endif; en était une des clés.
Dans la pratique, parce que je développe intensivement avec netBeans (avec Zend Studio c'est du même tonneau...), si vous faites ceci:
Vous êtes dans le cas typique où l'analyseur DOM intégré à netbeans ne verra pas que vous avez intégré une ligne <tr>...</tr> dans <table>
En faisant comme le préconise Rasmus Lerdorf (inventeur du PHP), c'est à dire comme ceci:
l'analyseur DOM de netbeans verra la structure HTML complète de votre tableau.
Les "best pratices" recommandées par des pointures en programmation PHP préconisent d'éviter l'inclusion de HTML dans du PHP. J'insiste sur le fait que c'est une recommandation. mais si on la suit, on évite la fragmentation du code en "poupée russe".
Donc, si on utilise bien PHP comme "moteur de template", voici ce qu'il est recommandé d'éviter:
et on lui préférera:
L'intérêt - et je le vois tous les jours - c'est qu'on détecte les erreurs de structuration dans le code HTML final.
En PHP on a deux approches:
- du code HTML qui contient du PHP: c'est le cas d'une page dite "template"
- du code PHP pur: c'est le cas d'une classe ou un groupe de fonctions
Un template minimal:
là je simplifie à l'extrême, mais c'est ainsi que fonctionne toutes les applis PHP orientées MVC. Les grosses applications professionnelles sont en MVC pur sur socle Zend Framework et dérivés.
Après rasmus lerdorf, il y a deux autres personnes qui ont aidé à la promotion de PHP. Ce sont les créateurs de ZEND. La société ZEND a mis au point Zend Framework. Je vous invite à vous y intéresser. par exemple la classe View, ici:
http://framework.zend.com/manual/fr/zend.view.html
Et sur cette page:
http://framework.zend.com/manual/fr/zend.view.scripts.html
vous avez un exemple dans la documentation de Zend Framework que je copie et colle ici:
Vous voyez donc que je n'invente rien.
A+
C'est la seconde solution: "vous êtes en HTML, vous passez en PHP et vous revenez à du HTML..."
Il le disait en anglais. C'était justifié par le fait qu'il était assez critique vis à vis des moteurs de templates en général, alors que PHP dispose justement de mécanismes permettant de se passer généralement des moteurs de templates.
Il expliquait qu'il avait conçu PHP initialement pour gérer un CV. Selon la nature du visiteur qui répondait à une première question, il reformait son VC de manière avantageuse par rapport au profil de son visiteur. Et le mécanisme décrit avec les if: endif; en était une des clés.
Dans la pratique, parce que je développe intensivement avec netBeans (avec Zend Studio c'est du même tonneau...), si vous faites ceci:
<table> <?php if ($montest) { echo "<tr><td>ligne à afficher</td></tr>"; } ?> </table>
Vous êtes dans le cas typique où l'analyseur DOM intégré à netbeans ne verra pas que vous avez intégré une ligne <tr>...</tr> dans <table>
En faisant comme le préconise Rasmus Lerdorf (inventeur du PHP), c'est à dire comme ceci:
<table> <?php if ($montest): ?> <tr><td>ligne à afficher</td></tr> <?php endif; ?> </:table>
l'analyseur DOM de netbeans verra la structure HTML complète de votre tableau.
Les "best pratices" recommandées par des pointures en programmation PHP préconisent d'éviter l'inclusion de HTML dans du PHP. J'insiste sur le fait que c'est une recommandation. mais si on la suit, on évite la fragmentation du code en "poupée russe".
Donc, si on utilise bien PHP comme "moteur de template", voici ce qu'il est recommandé d'éviter:
echo "<td>".$valeur."</td>";
et on lui préférera:
<td><?php echo $valeur; ?></td>
L'intérêt - et je le vois tous les jours - c'est qu'on détecte les erreurs de structuration dans le code HTML final.
En PHP on a deux approches:
- du code HTML qui contient du PHP: c'est le cas d'une page dite "template"
- du code PHP pur: c'est le cas d'une classe ou un groupe de fonctions
Un template minimal:
<?php include 'initialiseEnvironnement.php'; ?> ?> <html> <head> <title><?php echo $titre; ?></title> </head> <body> ...... </body> </html>
là je simplifie à l'extrême, mais c'est ainsi que fonctionne toutes les applis PHP orientées MVC. Les grosses applications professionnelles sont en MVC pur sur socle Zend Framework et dérivés.
Après rasmus lerdorf, il y a deux autres personnes qui ont aidé à la promotion de PHP. Ce sont les créateurs de ZEND. La société ZEND a mis au point Zend Framework. Je vous invite à vous y intéresser. par exemple la classe View, ici:
http://framework.zend.com/manual/fr/zend.view.html
Et sur cette page:
http://framework.zend.com/manual/fr/zend.view.scripts.html
vous avez un exemple dans la documentation de Zend Framework que je copie et colle ici:
<?php if ($this->livres): ?> <!-- La table des livres --> <table> <tr> <th>Auteur</th> <th>Titre</th> </tr> <?php foreach ($this->livres as $cle => $livre): ?> <tr> <td><?php echo $this->escape($livre['auteur']) ?></td> <td><?php echo $this->escape($livre['titre']) ?></td> </tr> <?php endforeach; ?> </table> <?php else: ?> <p>Aucun livre à afficher</p> <?php endif; ?>
Vous voyez donc que je n'invente rien.
A+
Très intéressant. Si je comprends bien ce que tu décris, il est préférable de laisser les éléments structurants (les balises) en html plutôt que de les mettre à l'intérieur d'un echo php car dans ce dernier cas, ils échappent aux contrôles faits par les outils comme netBeans et Zend Studio.
Je retiens l'idée, car elle s'applique aussi à mon simple éditeur texte (pspad) qui est capable d'associer les ouvertures et fermetures de balises. Il est vrai que n'étant pas un pro, mes applications ne sont jamais bien compliquées, et que je peux me permettre de perdre un peu de temps à débugger là où un pro a besoin d'être efficace. Car j'avoue être fainéant et souvent préférer un 'echo' unique à une partie de ping-pong entre html et php.
Mais je ne vois pas du tout le rapport avec la 2°chose qui te chiffonne :
<?php
if ($_SESSION['erreurs'] > 0) {
?>
......code HteuMeulLeu.....
<?php
}
?>
Ce serait mieux comme ceci:
<?php if ($_SESSION['erreurs'] > 0): ?>
......code HteuMeulLeu.....
<?php endif; ?>
On est bien d'accord que le SEUL changement, c'est de remplacer une paire d'accolades par un : et un endif ? Ça n'a aucun rapport avec l'élément important qui est le masquage des balises par le php.
Mais je ne suis qu'un amateur, je ne dois pas tout comprendre.
Autre remarque : je me demande si nous n'avons pas fait fuir mikmuk ^^
Je retiens l'idée, car elle s'applique aussi à mon simple éditeur texte (pspad) qui est capable d'associer les ouvertures et fermetures de balises. Il est vrai que n'étant pas un pro, mes applications ne sont jamais bien compliquées, et que je peux me permettre de perdre un peu de temps à débugger là où un pro a besoin d'être efficace. Car j'avoue être fainéant et souvent préférer un 'echo' unique à une partie de ping-pong entre html et php.
Mais je ne vois pas du tout le rapport avec la 2°chose qui te chiffonne :
<?php
if ($_SESSION['erreurs'] > 0) {
?>
......code HteuMeulLeu.....
<?php
}
?>
Ce serait mieux comme ceci:
<?php if ($_SESSION['erreurs'] > 0): ?>
......code HteuMeulLeu.....
<?php endif; ?>
On est bien d'accord que le SEUL changement, c'est de remplacer une paire d'accolades par un : et un endif ? Ça n'a aucun rapport avec l'élément important qui est le masquage des balises par le php.
Mais je ne suis qu'un amateur, je ne dois pas tout comprendre.
Autre remarque : je me demande si nous n'avons pas fait fuir mikmuk ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
2 juin 2012 à 12:17
2 juin 2012 à 12:17
L'accolade est à mettre après la dernière instruction concernée par le if (mysql_query($insertion)). Et quelles instructions sont concernées par le if, c'est à toi de le savoir car c'est toi qui sais ce que tu veux faire (je me trompe ?).
Je suppose qu'ici, c'est complètement à la fin (entre balises <?php et ?> quand même.
Je suppose qu'ici, c'est complètement à la fin (entre balises <?php et ?> quand même.