insertion php dans here-document

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : insertion php dans here-document

par titi22 » 16 mai 2008, 23:33

Merci Cyrano ça marche nickel :D

par Cyrano » 15 mai 2008, 22:28

En (apparemment) plus long mais plus propre et avec la syntace HEREDOC, ça aurait donné ceci :
function dsp_crypt($cfg=0,$reload=1) 
{
    // Affiche le cryptogramme
    $sid = SID;
    $str = <<<CHAINE
  <table>
    <tr>
      <td>
        <img id="cryptogram" src="{$_SESSION['cryptdir']}/cryptographp.php?cfg={$cfg}&{$sid}'>
      </td>

CHAINE;
    if ($reload)
    {
        $title = ($reload != 1) ? $reload : null;
        $str .= <<<CHAINE
      <td>
        <a title="{$title}" style="cursor:pointer" onclick="document.images.cryptogram.src='{$_SESSION['cryptdir']}/cryptographp.php?cfg={$cfg}&{$sid}&'+ Math.round(Math.random(0)*1000)+1"><img src="{$_SESSION['cryptdir']}/images/reload.png"></a>
      </td>

CHAINE;
    }
        $str .= <<<CHAINE
    </tr>
  </table>

CHAINE;

    return $str;
}
Pour info, j'ai réalisé une proportion plus que notable de la nouvelle version du site www.auchandirect.fr : je n'ai utilisé pratiquement que ce système avec HEREDOC. C'est très facile de travailler avec ça si on est un peu discipliné coté HTML/JavaScript/CSS ainsi que coté PHP bien entendu.

par titi22 » 15 mai 2008, 22:12

bonjour,

j'ai donc réecrit cela :
 function dsp_crypt($cfg=0,$reload=1) {
 // Affiche le cryptogramme
$test01 = "<table><tr><td><img id='cryptogram' src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."'></td>";
$test02 = "$test01"."if ($reload)"."<td><a title='".($reload==1?'':$reload)."' style=\"cursor:pointer\" onclick=\"javascript:document.images.cryptogram.src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."&'+Math.round(Math.random(0)*1000)+1\"><img src=\"".$_SESSION['cryptdir']."/images/reload.png\"></a></td>"."</tr></table>";

return $test02;
 }
c'est netement mieux puisque l'image apparais bien maintenant mais j'ai encore un problème avec la forme concaténée de "if ($reload)" puisqu'il apparait sur la page sous forme " if (1)".

Merci

par rami » 14 mai 2008, 22:09

Définis une variable en lui affectant la première chaîne que tu affiches via echo.
Puis utilises la concaténation sur cette même variable avec le sautres chaînes, puis retourne cette variable.

Regarde http://phpdebutant.org/article55.php pour plus d'informations.

par titi22 » 14 mai 2008, 15:35

bonjour,
tu modifies test() pour qu'elle renvoie une chaîne (le code précédent fonctionnera du coup)
je met la fonction test ci dessous, je ne suis pas capable de l'adapté tout seul Merci.

Code : Tout sélectionner

function test($cfg=0,$reload=1) { // Affiche le cryptogramme echo "<table><tr><td><img id='cryptogram' src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."'></td>"; if ($reload) echo "<td><a title='".($reload==1?'':$reload)."' style=\"cursor:pointer\" onclick=\"javascript:document.images.cryptogram.src='".$_SESSION['cryptdir']."/cryptographp.php?cfg=".$cfg."&".SID."&'+Math.round(Math.random(0)*1000)+1\"><img src=\"".$_SESSION['cryptdir']."/images/reload.png\"></a></td>"; echo "</tr></table>"; }
il s'agit en fait de l'image d'un captcha.
le scripte vient du site captcha.fr

par Cyrano » 13 mai 2008, 23:16

dans du HEREDOC, tu peux mettre des variables, idéalement entre accolades, mais uniquement des variables : pas de constantes ni de fonctions.
<?php
$tableau = array("du texte dans un tableau");
$var1 = "variable";
$var2 = <<<CODE_HTML
<p>Du code html avec une {$var1} ou encore {$tableau[0]}</p>

CODE_HTML;
echo($var2);
?>

par rami » 13 mai 2008, 23:13

J'imagine donc que la fonction test() fait des echo (ou print) directement. Tu as du coup 3 possibilités :
- tu modifies test() pour qu'elle renvoie une chaîne (le code précédent fonctionnera du coup)
- tu n'utilises pas la syntaxe HEREDOC
- tu utilises les fonctions de bufferisation de sortie : ob_start() /ob_get_contents / ob_end_clean() (mais c'est pas très beau)

par titi22 » 13 mai 2008, 23:07

non ça ne marche pas :cry:
l'image que renvoi la fonction test s'affiche en dehors du herdoc ( par $test = test(); je pense )
et pas dans celui-ci comme voulu.

par rami » 13 mai 2008, 22:48

Sauf erreur de ma part, je ne crois pas qu'il soit possible d'utiliser des fonctions avec la syntaxe HERDOC. Tu pourrais faire comme ça:
<?php
$test = test();
$skin['contenu'] .= <<<EOD
<div>
$test
</div>
EOD;
 
include("template.php");

?>

insertion php dans here-document

par titi22 » 13 mai 2008, 22:31

Bonjour,
je souhaiterai savoir comment insérer du php entre les balises <<<EOD et EOD; il doit y avoir une syntaxe particulière car avec <?PHP code ?> ça ne marche pas.
Voici le code simplifié ou je souhaiterai insérer notamment le fonction test:

Code : Tout sélectionner

<?php $skin['contenu'] .= <<<EOD <div> <?php test(); ?> </div> EOD; include("template.php"); ?>
Merci de votre aide