Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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 11/03/2011, 13h47   #1
Invité régulier
 
Inscription : juin 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 47
Points : 7
Points : 7
Par défaut exécuter du code php inséré dans une chaine

Bonjour,

Quand j'écris une chaine exemple :
$chaine="jlkjldslq d qsjlkjldqs sd qd qsd qd $variable1 sddqdqs $variable2 ";

les variables $variables1 $variables2 sont rempalcées par leur valeur.

Comment faire si à la place des variables $variable1 et $variable2, je veux mettre du code exemple une condition.

Comment dois-je dans ce cas écrire la chaine afin que les codes contenus s'exécutent dans la chaine

Merci,
Hat
hat_et_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 13h57   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Code :
1
2
3
$chaine="jlkjldslq d qsjlkjldqs sd qd qsd qd";
if (condition) { echo "abcd"; }
echo "sddqdqs";
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 13h59   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Bonne question, c'est en effet possible à partir de PHP 5.3 avec le hack suivant:

Code :
1
2
3
4
5
6
7
 
$_ = function ($v) { return $v; };
 
$a = 1;
$b = 2;
 
echo "Est ce que A vaut B ? {$_($a == $b ? 'oui' : 'non')}";
Affiche: "Est ce que A vaut B ? non"

Si tu ne dispose pas de PHP 5.3 ou que tu ne veux pas utiliser cette méthode, tu n'as plus qu'a renseigner des variables intermédiaires.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/03/2011, 14h18   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
ou comme ca :

Code :
1
2
3
4
5
6
7
8
9
10
$variable1 = 'blabla';
$variable2 = 'blabla';
$chaine = "jlkjldslq d qsjlkjldqs sd qd qsd qd $variable1 sddqdqs $variable2 ";
 
ob_start();
include 'data:,' . urlencode($chaine);
$out = ob_get_clean();
 
echo $out;
//jlkjldslq d qsjlkjldqs sd qd qsd qd blabla sddqdqs blabla
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h30   #5
Invité régulier
 
Inscription : juin 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 47
Points : 7
Points : 7
Merci Benjamin votre réponse correspond à ce que je recherche,

mais je peux pas tester car je travaille sous php 4.2.0.

Il y a vraiment pas autre chose qui fonctionne sous php 4
hat_et_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h42   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Négatif, le support des fonction lambda est assuré à partir de PHP 5.3.

Vous pouvez toujours essayer de bricoler quelque chose avec des eval mais je vous recommande vivement d'utiliser des variables intermédiaires:
Code :
1
2
3
4
5
6
7
 
$a = 1;
$b = 2;
 
$a_vaut_b = $a == $b ? 'oui' : 'non';
 
echo "Est ce que A vaut B ? $a_vaut_b";
ça m'étais sorti de la tête mais on peut toujours utiliser printf:
Code :
1
2
3
4
5
 
$a = 1;
$b = 2;
 
printf("Est ce que A vaut B ? %s", $a == $b ? 'oui' : 'non');
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h42   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Envoyé par hat_et_m Voir le message
Merci Benjamin votre réponse correspond à ce que je recherche,

mais je peux pas tester car je travaille sous php 4.2.0.

Il y a vraiment pas autre chose qui fonctionne sous php 4
le mien devrai marcher mais en faisant plutot

Code :
1
2
$out = ob_get_contents();
ob_end_clean();
mais pourquoi 4.2.0 ??? c'est sortie y'a 9ans !!! tout hébergeur propose PHP 5
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h54   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Oui mais la plupart ne proposent pas PHP 5.3 (j'ai vérifié).

Citation:
mais pourquoi 4.2.0 ??? c'est sortie y'a 9ans !!! tout hébergeur propose PHP 5
ça arrive si on travaille par exemple sous redhat 4: le repos n'a pas PHP 5 et à moins qu'on ne pête la license de support on ne peut pas l'installer.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h08   #9
Invité régulier
 
Inscription : juin 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 47
Points : 7
Points : 7
Je voudrais en fait qu'une chaine codée soit excécutée.

$chaine="<select name="tri_champ" size="1" onchange="submit();">
<option value="||order by p.prix_unitaire asc|Tri par prix croissant" {$_(if($tri_champ=="||order by p.prix_unitaire asc|Tri par prix croissant"){echo "selected";})}>Tri par prix croissant</option>
<option value="||order by p.prix_unitaire desc|Tri par prix décroissant" {$_(if($tri_champ=="||order by p.prix_unitaire desc|Tri par prix décroissant"){echo "selected";})}>Tri par prix décroissant</option>
<option value="||and p.status='meilleure_vente'|Meilleure vente" {$_(if($tri_champ=="||and p.status='meilleure_vente'|Meilleure vente"){echo "selected";})}>Meilleure vente</option>
<option value="||and p.status='nouveau_prod'|Nouveau produit" {$_(if($tri_champ=="||and p.status='nouveau_prod'|Nouveau produit"){echo "selected";})}>Nouveau produit</option>
</select>";

pour pouvoir par exemple réafficher les sélections d'un formulaire après un post

à priori la méthode initiale de Benjamin me semble pratique
hat_et_m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h18   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
à priori la méthode initiale de Benjamin me semble pratique
C'est pratique mais ça reste de l'ordre de la bidouille. Jamais je n'utiliserai cette technique pour un site entier !
Pourquoi ne pas te servir de PHP pour faire ça ??
Tu peux créer des pages que tu nomme ainsi ma_page.html.php
dans lequelles tu mèles le PHP au HTML (à la vieille mode pour ainsi dire):
Code :
1
2
3
4
5
6
7
 
<?php foreach ($comments as $comment): ?>
<div class="comment">
  <h2><?=$comment->title?></h2>
  <p><?=$comment->body?></p>
</div>
<?php endforeach; ?>
Et tu l'inclus avec un bête "include"

A mort les moteurs de templates et autres smarty dégoûtants !
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h19   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
c'est plus une question de technique et de logique, la faut faire autrement pour faire quelque chose de plus propre et moins bidouille parce que la c'est immonde je sais pas comment tu fais pour t'y retrouver

EDIT : Benjamin ta monté une vraie méthode simple et lisible
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h31   #12
Invité régulier
 
Inscription : juin 2006
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 47
Points : 7
Points : 7
Par rapport à l'exemple que je vous ai montré, je n'ai pas vraiment le choix. Je voudrais pouvoir paramétrer le formulaire de tri dans une interface d'administration.
hat_et_m 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 00h15.


 
 
 
 
Partenaires

Hébergement Web