Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 16h02   #1
Nouveau Membre du Club
 
Inscription : octobre 2009
Messages : 100
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 100
Points : 27
Points : 27
Par défaut if/else séparé en deux fichiers ?

Bonjour,

Ma question est simple même si apparemment je pense avoir trouver la réponse : es-ce possible de commencer un if/else dans un fichier "header.php" et de le finir dans un fichier "footer.php", d'inclure ça dans un "index.php" et que ça fonctionne ?

Pour l'explication je suis sur un petit site perso et je fais mes page de la manière suivante : un fichier "header.inc.php" qui contient le code de ma page depuis <html> en passant par le menu ainsi que tout ce qui est fixe pour le haut de chaque page jusqu'à l'ouverture de ma div de contenu variable, et un fichier "footer.inc.php" qui contient le code de la fermeture de ma div de contenu variable jusqu'à </html>. Ces deux fichiers sont inclus dans un "index.php" qui contient les variables de paramétrage des pages, et mon contenu variable.

Maintenant ce que je veux faire, c'est ouvrir une connexion BDD, vérifier si elle est correcte, si c'est le cas j'affiche le contenu variable, sinon j'affiche un message d'erreur, mais dans les deux cas je veux que la page s'affiche tout de même (logo, menu, etc.. et pas juste un message d'erreur).

Cette manière de fonctionner m'oblige donc à ouvrir un if/else dans un fichier et le fermer dans un autre, et l'erreur que j'ai semble venir de là. Le code assemblé dans un même fichier aucun problème, mais séparé ça ne marche pas. Pour vous es-ce possible ou y-a-t-il un moyen de le faire fonctionner ainsi ?

Pour info comme je n'ai pas le projet sur moi je fais mes essais sur des pages de test dont voici les codes :

header.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
	<head>
		<title>Test connexion BDD :: <?php echo $title; ?></title>
	</head>
	<body>
		<?php
			include("class.mysql.php");
			include("config.php");
			$mysql = new MySQL;
			$mysql->open($host,$dbname,$user,$password);
		?>
		<div>
			<?php
				if(!$mysql->isConnected()){
					echo $mysql->getConnectionErrorMessage();
				}else{
			?>
footer.php
Code :
1
2
3
4
5
6
7
8
9
10
			<?php
					$mysql->close();
				}
			?>
		</div>
		<div>
			Mon footer
		</div>
	</body>
</html>
index.php
Code :
1
2
3
4
5
6
7
8
<?php
	$title = "Test 1";
	include("header.php");
?>
	<div>Mon contenu</div>
<?php
	include("footer.php");
?>
Merci d'avance pour vos réponse

PS : ma solution actuelle serait de faire mon if/else directement dans le index.php mais cela m'oblige à faire un copier-coller de cette condition dans chacune de mes pages (ou à faire une page modèle) et en cas de changement de fonctionnement d'accès à la base de données (j'utilise un classe perso pour l'accès à MySQL car je vais héberger mes pages chez Free et après recherche PDO semblerai ne pas ou mal fonctionner chez eux) cela m'obligerait à parcourir tous les fichiers pour faire les modifications.
neo18045 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 17h06   #2
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
Bonjour,

En php un bloc d'instruction peut commencer dans un fichier et se terminer dans un autre.
En fait c'est comme si le serveur qui interprète le code ne voyait qu'un seul fichier, tous les fichiers étant mis bouts à bouts en fonction des inclusions.

Cependant pour permettre une bonne lisibilité du code il faut éviter de faire des if, for, while, ... qui commencent dans un fichier et se termine dans un autre...
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 17h11   #3
Nouveau Membre du Club
 
Inscription : octobre 2009
Messages : 100
Détails du profil
Informations personnelles :
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 100
Points : 27
Points : 27
C'est ce que je pensais aussi qu'il n'y aurait pas d'importance à les séparés car au final il serait interprété comme un seul et même code. Mais là j'ai bien une erreur parce que mon if/else est séparé, plus précisément parce que mon else est ouvert dans un fichier et fermer dans un autre.

Je viens de faire le test réunissant uniquement ce bloc d'instruction dans mon fichier index et là pas de soucis.

De quoi celà pourrrait-il venir ?
neo18045 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h02   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

Citation:
En php un bloc d'instruction peut commencer dans un fichier et se terminer dans un autre.
A bon ?

De mémoire il me semble avoir lu l'inverse.
D'ailleurs, ça sous entends qu'il serait possible aussi de créer le début d'une classe ou d'une fonction dans un fichier et la suite dans un autre.
Ca me semble improbable.


Par curiosité j'ai essayé (debut_if.php/fin_if.php), et ça me renvoie une erreur de syntaxe :
Citation:
Parse error: syntax error, unexpected $end in ...\debut_if.php on line 5
Pour ma part, il faudrait initialiser au minimum une variable, et l'exploiter dans 2 conditions, dans les 2 fichiers.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
// Fichier 1 (initialisation)
$isConnected = $mysql->isConnected();
 
if ($isConnected === TRUE) {
    ... etc ...
}
 
// Fichier 2
if ($isConnected === TRUE) {
    ... etc ...
}
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 12h45   #5
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
Citation:
En php un bloc d'instruction peut commencer dans un fichier et se terminer dans un autre.
Citation:
Envoyé par RunCodePhp Voir le message
Salut

A bon ?

De mémoire il me semble avoir lu l'inverse.
D'ailleurs, ça sous entends qu'il serait possible aussi de créer le début d'une classe ou d'une fonction dans un fichier et la suite dans un autre.
Ca me semble improbable.
... Mea culpa... Je sais pas ce que j'avais bu ce jour là pour dire une telle connerie !
Je crois que j'ai mélangé ce que je voulais dire...
Voici ce qui est possible de faire :
Code :
1
2
3
4
5
6
 
if (/* ma condition */) {
   include 'monfichier.php';
} else {
   include 'monautrefichier.php';
}
ou
Code :
1
2
3
4
 
function myFunction () {
   include 'encoreunfichier.php';
}
Mais effectivement si un bloc de code peut être sur plusieurs fichiers, son ouverture '{' et sa cloture '}' doivent être sur le même fichier.
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h27.


 
 
 
 
Partenaires

Hébergement Web