2014-08-27 2 views
0

Donc, dans mon fichier php j'ai plusieurs ensembles de balises php ouverture et fermeture. Il ressemble fondamentalement quelque chose comme ceci:variables globales PHP entre les balises

<input id="myID" type="text" value="<?php 
$value="x"; 
echo $value; 
?>"> 
<input id="yourID" type="text" value="<?php echo $someValue; ?>" 

est-il de toute façon de se référer à $value dans la deuxième série de crochets php? J'ai essayé d'utiliser GLOBAL['index'] pour faire référence à $value, mais j'obtiens une erreur d'index indéfinie.

Toute aide ou conseil est appréciée.

+0

Vous pouvez simplement réutiliser '$ value'. – showdev

+0

'$ value' devrait être dans la portée de tout le document (en tenant compte de la portée de la fonction) –

+1

Un aparté: puisque vous injectez des valeurs de PHP en HTML, vous devriez ** toujours ** utiliser' htmlspecialchars'. Lisez les docs dessus, il est important que vous obteniez les paramètres corrects et "correct" dépend du contexte dans lequel vous injectez (par exemple dans une valeur d'attribut entre guillemets). – Jon

Répondre

3

Utilisez simplement echo $value.

Le contexte de variable ne change pas simplement parce que vous avez rouvert la balise PHP. <?php et ?> sont juste des drapeaux pour l'analyseur, et n'ont aucune incidence sur ce que votre code fait à l'intérieur d'eux.

Depuis que vous venez de commencer, je vous recommande également de regarder dans un moteur de template tel que Smarty. Cela vous aidera à séparer la logique de l'application de votre sortie. Assurez-vous également d'utiliser htmlspecialchars() autour de toute donnée arbitraire utilisée dans le contexte de HTML, pour vous assurer que les caractères réservés sont échappés et que vous ne créez aucun point d'attaque XSS.

+0

Je le faisais à l'origine, mais c'est là que le problème s'est posé en premier lieu. Je recevais une erreur indéfinie. – Wold

+1

@Wold Cela fonctionne définitivement. Si vous nous montrez votre code qui n'a pas fonctionné, nous pourrions être en mesure de faire une suggestion. – Brad

+0

Je suppose que mon problème doit être ailleurs alors, je reviendrai sur mon code. – Wold

2

La portée variable de PHP est au niveau de la fonction. La fermeture d'un bloc de code <?php ... ?> ne modifie pas le niveau de votre étendue.

par exemple.

<html> 

<?php $x = 'foo'; ?> 

<body> 

<?php echo $x; ?> 

affichera foo comme prévu. Si vous utilisez des fonctions, alors ce serait une autre affaire:

function foo() { 
    $x = 'foo'; 
} 
foo(); 
echo $x; // undefined variable 

et cela ne changerait peu importe combien de/quelques <?php ... ?> blocs de code que vous utilisez.