IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Include pour insérer du code dans un IF


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut Include pour insérer du code dans un IF
    Bonjour,

    J'ai une petite question liée à l'include en php.

    J'ai un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (
    ($foo==$bla) || ($foo1==$blo) || ($foo2==$blu)
    ) 
    { echo $var; }
    J'ai un petit fichier code.txt qui contient des lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ($foo3==$bly) 
    ||
    ($foo4==$blee)
    ||
    etc., et ce généré par un autre code.

    Je n'arrive pas à insérer mon fichier code.txt pour pouvoir allonger la liste des OR de la condition IF.

    Si je fais par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (
    include('code.txt');
    ($foo==$bla) || ($foo1==$blo) || ($foo2==$blu)
    ) 
    { echo $var; }
    cela génère un message d'erreur.

    Comment procéder ?

    Merci par avance.

  2. #2
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 94
    Points
    94
    Par défaut
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include('code.txt');
    if ( eval(file_get_contents('code.txt')) || $truc || $muche )

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    Il me fait une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parse error: syntax error, unexpected '('
    au niveau de la ligne de l'eval.

    Pour info, voilà à quoi ressemble le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    include('code.txt');
     
    if (
     
    eval(file_get_contents('code.txt'))
     
    (($EnumArray_categorie[$j]=="Wikipedia") && ereg("wikipedia",extraitRacine($resultats[$i])))
    ||
    (($EnumArray_categorie[$j]=="Wikipedia") && ereg("wikiquote",extraitRacine($resultats[$i])))
    )
    { ... }
    et code.txt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (($EnumArray_categorie[$j]=="E-commerce") && ereg("fnac",extraitRacine($resultats[$i])))||
    (($EnumArray_categorie[$j]=="") && ereg("ebooks-gratuit",extraitRacine($resultats[$i])))||

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tu pars du mauvais pied. La directive include ne sert par à incorporer des fragments de script dans d'autres scripts mais à inclure des traitements ou de l'affichage. De ce fait, tout ce que contiens ton script include doit impérativement être du PHP valide qui doit pouvoir être interprété séparément de tout autre script.

    Si tu veux vraiment pouvoir séparer tous les cases de ta structure de contrôle dans différents fichiers (ce que je trouve impropre pour ma part), il faut que tu construise l'intégralité de ta structure dans une chaîne de caractères et que tu l'évalues. Mais franchement je te le déconseille vu le problème de sécurité que ça soulève. Il y a forcément un autre moyen, qu'est ce que tu essaie de faire au juste ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    En gros voilà l'idée :

    1) Je tape un mot clé dans un formulaire.
    2) Le script récupère et affiche les 10 premiers résultats Google sur ce mot clé
    3) Pour chacun des 10 liens, il affiche à côté un petit menu déroulant :
    - si le lien Google est déjà qualifié, il affiche la catégorie correspondante (par ex: "Blog"), récupérée d'après une BDD MySql.
    - si le lien n'est pas qualifié, alors le menu déroulant n'affiche rien par défaut, mais propose plusieurs choix.

    L'idée à partir de là est qu'à chaque fois que je qualifie un nouveau lien, il "apprend", c'est-à-dire qu'il va générer un fichier ('code.txt') qui permettra à l'avenir, à chaque fois qu'un lien de ce type reviendra, de faire apparaître dans le menu déroulant la catégorie correspondante.

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Donc tu cherches à faire un cache en somme ?

    Si c'est juste pour se "souvenir" de la qualification d'un domaine, tu peux t'en sortir avec des enregistrements en base simples.

    Si tu veux enregistrer des comportements pour que ton algorithme s'enrichisse. Tu devrais regarder du coté des patron de comportement comme Strategy ou Chain of Responsibility et mettre en cache les objets de strategy ou de la chaine.

    Quoi qu'il en soit, la méthode de construction statique de l'algorithme est une mauvaise idée.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    Oui c'est une manière de voir les choses.

    Enfin dans ma vision, le bout de code avec plein de conditions "OR" était incrémenté au fur et à mesure par le contenu du fichier 'code.txt'.

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    On ne construit pas un programme lors du runtime.

    Oublions la programmation deux secondes et pensons le programme comme une voiture, quand tu veux la modifier, tu vas au garage et tu fais tes modifications à l'arrêt non ? ça ne te viendrait pas à l'esprit d'aller fixer un pot chromé à l'arrière pendant que t'es à 130 sur l'autoroute si ?
    Maintenant, tu peux voir ta voiture autrement; comme celle de Taxi qui peut changer l'espacement des pneus ou le volant sans s'arrêter mais c'est parce que la voiture est équipée pour. C'est une illustration (un peu bête) du pattern strategy.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    Je comprends ta métaphore

    Mais je ne voyais pas cela comme ça, puisque :

    Le script s'effectue.

    Pendant son processus il incrémente le fichier code.txt.

    Le script est fini.

    Et à la prochaine utilisation du script, le script sera modifié par le nouveau contenu de code.txt.

    Donc ce n'est pas vraiment pendant le runtime, si ?

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Si parce que rien ne te garantis qu'un autre script ne va pas lire ce fichier txt pendant que l'autre l'écrit. En réalité ce que tu fais c'est construire des parties de ton programme à la demande, donc en gros faire les changements pendant que tu roules, si pour une raison X ou Y ça se passe mal, tout le reste du service plante et on retrouve la voiture encastrée dans un poteau

    Enfin, moi je te dis comment je m'y serais pris, à toi de voir ce qui te va le mieux, c'est ton projet après tout

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    Ok considérons que la sécurité n'est pas un problème

    Le script ne tourne de toute façon qu'en local sur ma machine.

    Y a-t-il un moyen de faire en gros ce que je voulais faire, l'include d'une partie de script dans ma condition IF ?

  12. #12
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Quoi qu'il en soit, la méthode de construction statique de l'algorithme est une mauvaise idée.
    you mean "dynamique", right ?


    Sinon,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    include('code.txt');
     
    if (
     
    eval(file_get_contents('code.txt'))
     
    (($EnumArray_categorie[$j]=="Wikipedia") && ereg("wikipedia",extraitRacine($resultats[$i])))
    ||
    (($EnumArray_categorie[$j]=="Wikipedia") && ereg("wikiquote",extraitRacine($resultats[$i])))
    )
    { ... }
    il manquerait pas un "||" ligne 6 ?

    (au fait c'est pas parce que j'essaye de t'aider que je cautionne tes façons de -vouloir- faire, car effectivement ça m'a pas l'air très propre, imagine qu'un gus arrive a écraser/éditer/modifier ton fichier code.txt par un moyen quelconque, il execute ce qu'il veut après... )

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par lizardman Voir le message
    il manquerait pas un "||" ligne 6 ?
    Non car le contenu de 'code.txt' se termine par un ||

  14. #14
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Ok considérons que la sécurité n'est pas un problème
    No comment

    you mean "dynamique", right ?
    Non justement, une construction dynamique serait d'évaluer des comportements définis au runtime. Là il s'agit d'écrire physiquement des scripts PHP donc on construit bien quelque chose de statique

  15. #15
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 94
    Points
    94
    Par défaut
    @Benjamin Delespierre : je vois ce que tu veux dire , on créer "dynamiquement" du code statique en gros.


    @cyberIp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    include('code.txt');
    $contenu=file_get_contents('code.txt');
    $contenu .= ((($EnumArray_categorie[$j]=="Wikipedia") && ereg("wikipedia",extraitRacine($resultats[$i])))
    ||
    (($EnumArray_categorie[$j]=="Wikipedia") && ereg("wikiquote",extraitRacine($resultats[$i]))) ) ? " true" : " false"
     
    if (
    eval($contenu)
     
    { ... }
    et ça, ça marche ?

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    il me fait une syntax erreur :

    au niveau de la ligne de l'eval.

  17. #17
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 94
    Points
    94
    Par défaut
    roo il manque une parenthese ... tu peux le voir ça quand même !

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 122
    Points : 38
    Points
    38
    Par défaut
    Sur le IF ? Oui je l'avais ajoutée
    Mais l'erreur est toujours là.

  19. #19
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 69
    Points : 94
    Points
    94
    Par défaut
    fais un pour voir comment c'est foutu stp.

  20. #20
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Bon... Déjà, dans l'idée, rajouter un "include" dans un if, c'est trop crade pour que je te laisse faire.
    Le fait d'écrire dans un fichier et (potentiellement), en même temps de le lire, ça peut provoquer des conflits et, dans le pire des cas, crasher ton fichier (qui se retrouvera tout vide). Maintenant, si c'est un script exécuté seulement en local avec une seule machine, le conflit devient vraiment peu probable.

    La manière propre, c'est de faire une base de donnée (d'autant que visiblement, tu en as déjà une), d'enregistrer tes infos et de te faire une méthode qui va aller checker si ton nouveau lien est déjà connu ou pas.
    Un peu plus simple et qui te conviendras probablement, c'est d'enregistrer tes liens dans un fichier et de te coder une méthode qui va lire ce fichier et retourner "true" ou "false", suivant l'existence d'un nouveau lien (et en cas de false, soyons fou, on écrit la nouvelle entrée dans le-dit fichier).

    C'est parti :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
     
    	/**
    	 * Cette méthode prend une nouvelle entrée en paramètre, vérifie si elle est présente
    	 * dans le fichier 'code.txt' et la rajoute le cas échéant.
    	 * @param string : $nouvelleEntree : la nouvelle entrée à tester.
    	 * @return boolean : true si la nouvelle entrée existait, false sinon.
    	 */
    	function traiteNouvelleEntree($nouvelleEntree) {
    		// première étape, on lit le fichier.
    		$contenu = file_get_contents('code.txt');
    		// Ensuite, on mets chaque ligne du contenu dans un tableau. 
    		$listeLiens = explode("\n", $contenu);
    		//print_r($listeLiens);
    		// Maintenant, on vérifie si la nouvelle entrée existe dans le fichier ou pas. 
    		if (!in_array($nouvelleEntree, $listeLiens)) {
    			// Si on a pas trouvé l'entrée, on la rajoute.
    			// ps : quand on joue avec des fichiers, c'est bien de rajouter des protections pour savoir s'il a bien été
    			// ouvert, mais là, j'ai la flemme ^_^. 
    			$fp = fopen('code.txt', 'a+');
    			fwrite($fp, $nouvelleEntree . "\n");
    			fclose($fp);
    			return false;
    		} else {
    			return true;
    		}
    	}
     
     
     
     
    	// "Début du code", on teste si le formulaire à envoyé quelque chose, et si c'est le cas, on envoie à la fonction.
    	$action = @$_REQUEST['action'];
    	$nouvelleEntree = @$_REQUEST['nouvelleEntree'];
    	if (!empty($action)) {
    		echo ("traitement de l'action ... <br />\n");
    		$result = traiteNouvelleentree($nouvelleEntree);
    		// Et on affiche le résultat.
    		if ($result == false) {
    			echo ("L'entrée a été ajoutée !");
    		} else {
    			echo ("Entrée existante !");
    		}	
    	}
     
     
     
    ?>
     
    <?php /* Petit formulaire qui est présent pour "simuler" ton entrée google. */?>
    <form name="monFormulaire" method="post">
     
    	Nouvelle entrée : <input type="text" name="nouvelleEntree" /><br />
    	<br />
    	<input type="hidden" name="action" value="ajouterEntree" />
    	<input type="submit" value="Valider" />
     
    </form>

    Voilà, avec ça, tu devrais t'en sortir ;-)
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

Discussions similaires

  1. CSS pour insérer du code dans un forum
    Par GreatDeveloperOnizuka dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 13/10/2012, 02h57
  2. [PHP 5.3] Insérer du code dans une balise SPAN via un include
    Par beegees dans le forum Langage
    Réponses: 0
    Dernier message: 05/10/2010, 10h25
  3. Code pour insérer plusieurs valeurs dans une cellule
    Par azerty1956 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/03/2009, 13h09
  4. comment faire pour insérer du code HTML dans un textarea ?
    Par hicham285 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 18/05/2008, 03h35
  5. Aide pour insérer une frame dans un include
    Par ideal dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2006, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo