| Auteur |
Message |
NSV
Inscrit le: 15 Oct 2004
Messages: 17
|
Posté le:
Lun Déc 13, 2004 9:29 pm | Sujet du message : |
  |
J'étais en train de regarder le codage d'un script pour un chat pgp (PhpMyChat), et je suis tombé sur un code que j'avais jamais vu auparavent :
if(condition1 == condition2) {
//action
};
C'est bien sur le "};" qui m'a interloqué, au derniere nouvelle pour fermer un bloc un simpl } suffit.
Sur de moi, j'abandonne la lecture de ce script vu qu'il était codé bizarrement.
Puis je tombe sur du code Iteasy, et je retombe nez à nez face à un "};" (ligne 47 de header.php).
D'un coup, d'un seul, j'étais plus très sur de moi sur le fait que "};" était une faute.
Donc, je le demande ici, "};" ça existe ?? et ça apporte quoi face au "}" simple ??
++ |
|
|
|
  |
 |
vanquish
Administrateur
Inscrit le: 26 Mar 2004
Messages: 1552
Localisation: /var/www/
|
Posté le:
Mar Déc 14, 2004 2:39 pm | Sujet du message : |
  |
Bonjour !
Le }; provient d'une fatigue accumulée
En fait normalement seul le } est correct mais comme le }; n'est pas signalé comme erreur je ne l'avais même pas vu !
Merci pour l'info. |
_________________ La liberté n'a pas de prix
|
|
   |
 |
NSV
Inscrit le: 15 Oct 2004
Messages: 17
|
Posté le:
Mar Déc 14, 2004 8:06 pm | Sujet du message : |
  |
Ca me rassure alors ;o)
Les }; ça n'existe pas
Donc ligne 22 de 0sys_connexion_administration.php, y'a la meme erreur aussi ;o)
Et dans 0admin_header.php, donc y'a aussi pleins de petite erreur ;o)
Tiens d'ailleurs, un truc qui m'ennerve fortement :
le "exit();" !!
Par exemple ce code dans le 0admin_header.php (en ayant corriger les }
if(!isset($_SESSION['ip_utilisateur'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
if($_SESSION['ip_utilisateur'] != $_SERVER['REMOTE_ADDR']) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
if(!isset($_SESSION['hash_acces_utilisateur'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
if($_SESSION['hash_acces_utilisateur'] != $hash_acces) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
if(!isset($_GET['sid'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
if($_GET['sid'] != session_id()) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
if(!isset($_SESSION['user_agent'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
if($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
exit();
}
@ob_start("ob_gzhandler");
...
Ce code par exemple, il aurait pas été plus logique, a la place d'utiliser des if en gogo et des exit() dans chaque, de coder avec la fameuse technique du if - elseif - else : logique non ? car quand on veut faire un autre test si le premier était faux, on met un elseif.
Donc ça donnerais :
if(!isset($_SESSION['ip_utilisateur'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
elseif($_SESSION['ip_utilisateur'] != $_SERVER['REMOTE_ADDR']) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
elseif(!isset($_SESSION['hash_acces_utilisateur'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
elseif($_SESSION['hash_acces_utilisateur'] != $hash_acces) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
elseif(!isset($_GET['sid'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
elseif($_GET['sid'] != session_id()) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
elseif(!isset($_SESSION['user_agent'])) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
elseif($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
else {
@ob_start("ob_gzhandler");
.....
}
Avec ce type de codage on voit toute de suite mieux les relations entre chaque test.
Je vois pas vraiment pk y'a des exit(); dans tout les sens, et pas que dans vos script.
Pour moi quand y'a un exit(); c'est que simplement l'imbrication des conditions (ou/et boucles) a été mal faite et que donc on ne peut arreter un script sans l'intervention d'un exit();
Alors qu'un if () {} et en else{} réponde dans la grande majorité des cas à cette demande.
Mais apparement le "else" est souvent oublié, et donc apres le test "if" qu'il rentre ou pas, le prog continue et affiche ce qui ne devrait pas afficher, donc le codeur rajoute un exit() au moins il est tranquille.
Mais si a la base il avait mis un else en toute logique ça serait jamais arrivé
++
EDIT :
En relisant le code, j'ai vu une simplification supplémentaire :
if(!isset($_SESSION['ip_utilisateur'] ||
$_SESSION['ip_utilisateur'] != $_SERVER['REMOTE_ADDR'] ||
!isset($_SESSION['hash_acces_utilisateur']) ||
$_SESSION['hash_acces_utilisateur'] != $hash_acces ||
!isset($_GET['sid']) ||
$_GET['sid'] != session_id() ||
!isset($_SESSION['user_agent'])
|| $_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']) {
$titre_page = "Autorisation refusée";
require("./0sys_autorisation_refusee.php");
}
else {
@ob_start("ob_gzhandler");
.....
}
Ca fait un énorme if, mais on gagne pas mal de ligne et donc de la place. |
|
|
|
  |
 |
vanquish
Administrateur
Inscrit le: 26 Mar 2004
Messages: 1552
Localisation: /var/www/
|
Posté le:
Mar Déc 14, 2004 8:22 pm | Sujet du message : |
  |
Hello !
Oui carrément tu as raison !
Merci je ferai les modifs
Par contre kékitonfait mes exit(); ?  |
_________________ La liberté n'a pas de prix
|
|
   |
 |
NSV
Inscrit le: 15 Oct 2004
Messages: 17
|
Posté le:
Mar Déc 14, 2004 8:28 pm | Sujet du message : |
  |
D'ailleurs dans le meme style (j'écris dans une nouveau message, car on risque de plus rien comprendre sinon)
dans 0admin_afficher_masquer_statistiques.php :
if($afficher_stats == "0") {
$nouvelle_configuration = str_replace("afficher_stats = \"0\"", "afficher_stats = \"1\"", $configuration);
$handle = fopen("./0sys_config.php","w+");
fwrite($handle,$nouvelle_configuration);
echo "<h1>Opération éffectuée</h1>
<p>Les statistiques de bas de pages sont maintenant affichées.</p>";
}
if($afficher_stats == "1") {
$nouvelle_configuration = str_replace("afficher_stats = \"1\"", "afficher_stats = \"0\"", $configuration);
$handle = fopen("./0sys_config.php","w+");
fwrite($handle,$nouvelle_configuration);
echo "<h1>Opération éffectuée</h1>
<p>Les statistiques de bas de pages sont maintenant désactivées.</p>";
}
Vu que logiquement, si la premiere condition est réalisé, la deuxieme ne le sera jamais, il faut mettre elseif à la place du 2° if.
Au moins quand le premier test est vrai, le parser zappera direct le test de l'autre en voyant que c'est un elseif (donc à tester que si les test précédent sont faux).
En mettant un autre if, tu obliger le parser à vérifier si la condition est vrai ou pas. Donc plus de travail pour lui.
D'ailleurs un autre truc bizarre, mais ne connaissant pas suffisament iteasy, je peux pas etre sur, mais apparament la varaiable $afficher_stats devrait etre de type entier (et oui meme si on déclare pas les types, ils existe quand meme ;o). Or ici, on teste si $afficher_stats == "0", mais en mettant des "", ça indique que c'est une chaine de caractère.
Logiquement, il est plus pratique de manipuler des entiers, donc peut etre qu'il serait mieux d'enlever les "".
Il serait aussi justicieux de regrouper des informations communes.
Mais je sais toujours pas tout viens $afficher_stats. Passage par URL ?
Donc en tout ça donnerais :
if($afficher_stats == 0 || $afficher_stats == 1) {
$handle = fopen("./0sys_config.php","w+");
echo "<h1>Opération éffectuée</h1>
<p>Les statistiques de bas de pages sont maintenant ";
if($afficher_stats == 0) {
$nouvelle_configuration = str_replace("afficher_stats = 0", "afficher_stats = 1", $configuration);
echo "affich.</p>";
}
elseif($afficher_stats == 1) {
$nouvelle_configuration = str_replace("afficher_stats = 1", "afficher_stats = 0", $configuration);
echo "désactiv"; // Pousser à bout l'amélioration ;o)
}
echo "ées.</p>";
fwrite($handle,$nouvelle_configuration);
}
Y'a surement pas tout qui est bon a prendre ;o) mais y'a surement des trucs interessant dans ce que je dis ;o) |
|
|
|
  |
 |
NSV
Inscrit le: 15 Oct 2004
Messages: 17
|
Posté le:
Mar Déc 14, 2004 8:33 pm | Sujet du message : |
  |
| vanquish a écrit: | Hello !
Oui carrément tu as raison !
Merci je ferai les modifs
Par contre kékitonfait mes exit(); ?  |
Je l'ai hait ;o)
J'aime pas les exit() pour 2 raisons :
1°) J'ai jamais appris à programmer dans n'importe quel langage avec ce genre de (pseudo) astuce.
2°) On croit justement que c'est une astuce, c'est pratique, tu fout un exit() et ça arrete ton script d'un coup. Mais il arrive souvent par exemple qu'on mette à la fin des page php un require("footer.php"); qui permet de finir un page php avec les balise de fermeture html.
Mais le preobleme quand y'a un exit(); c'est qu'on saute tout ça. Donc les pages crées par des scripts ayant exécutés un exit() seront des pages pas fini, et donc pas conforme aux standards vu qu'il manquera au minimun un </body></html> et souvent bien plus.
++ |
|
|
|
  |
 |
vanquish
Administrateur
Inscrit le: 26 Mar 2004
Messages: 1552
Localisation: /var/www/
|
Posté le:
Mer Déc 15, 2004 8:21 am | Sujet du message : |
  |
Pas dans Itseasy ! |
_________________ La liberté n'a pas de prix
|
|
   |
 |
NSV
Inscrit le: 15 Oct 2004
Messages: 17
|
Posté le:
Mer Déc 15, 2004 2:37 pm | Sujet du message : |
  |
C'est possible mais je trouve que les exit(); poussent bug
DOnc je les évite |
|
|
|
  |
 |
|
|
Rappel du sujet de la page : }; ???
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|