Page 1 sur 1

PHP et javascript

Posté : 27 févr. 2009, 18:10
par captainstf
Salut à tous j'ai un petit soucis pour exécuter un code javascript grâce à php :

Lorsque j'ai ceci :
if ( isset($G_config['ip_maintenance']) 
      && $G_config['ip_maintenance']!=='0.0.0.0'
      && $G_config['ip_maintenance']!==get_ip()){
  echo"<SCRIPT language='JAVASCRIPT'>";
	echo 'window.open("divers/maintenance.html","_self");';
	echo"</SCRIPT >";
}
Le code fonctionne et je suis redirigé vers ma page de maintenance

Par contre si je place ce code dans une fonction php dans un fichier de procédure et que j'execute ceci :
<?php
require_once "proc_php.php";
mode_maintenance();
avec le fichier proc_php.php comme ceci :
<?php
//******************************************************************************
// Test mode maintenance
//******************************************************************************
function mode_maintenance() {
    if ( isset($G_config['ip_maintenance']) 
          && $G_config['ip_maintenance']!=='0.0.0.0'
          && $G_config['ip_maintenance']!==get_ip()){
      echo '<SCRIPT language="JAVASCRIPT">';
    	echo 'window.open("divers/maintenance.html","_self");';
    	echo '</SCRIPT>';
  	}
}
?>
Et bien là ça ne fonctionne plus !!!
Quelqu'un pourrait il m'expliquer pour quelle raison, y a un truc qui m'échappe là !!

Merci d'avance !
@++
stf

Posté : 27 févr. 2009, 18:22
par sylvaing26
Et comme ca ?
require_once "proc_php.php"; 
mode_maintenance($G_config['ip_maintenance'])); 
<?php 
//****************************************************************************** 
// Test mode maintenance 
//****************************************************************************** 
function mode_maintenance($G_config['ip_maintenance'])) { 
    if ( isset($G_config['ip_maintenance'])  
          && $G_config['ip_maintenance']!=='0.0.0.0' 
          && $G_config['ip_maintenance']!==get_ip()){ 
      echo '<SCRIPT language="JAVASCRIPT">'; 
        echo 'window.open("divers/maintenance.html","_self");'; 
        echo '</SCRIPT>'; 
      } 
} 
?>
[/php]

Posté : 27 févr. 2009, 18:22
par Ryle
Tout simplement parce qu'à l'intérieur de ta fonction, la variable $G_config n'est pas définie.

Il te faut soit la passer en paramètre de ta fonction, soit la déclarer comme "global" à l'intérieur de cette dernière :)

Nota : PHP n'exécute pas du code javascript. PHP génère du code html qu'ensuite le navigateur interprête et va le cas échéant, exécuter la partie javascript ;)

Posté : 28 févr. 2009, 16:47
par captainstf
Merci pour votre aide !!

Cela fonctionne avec passage de paramètre. Par contre la déclaration de mon tableau :
global $G_config['ip_maintenance'];
Me donne le message d'erreur :

Code : Tout sélectionner

Parse error: syntax error, unexpected '[', expecting ',' or ';' in proc_php.php on line 6
Pourtant j'aurais préféré cette solution que je trouvais plus propre !

Si vous avez un dernier tuyau ?? Je prends !!

Merci
@++
Stéphane

Posté : 28 févr. 2009, 16:58
par sylvaing26
si tu definit
$G_config = $G_config['ip_maintenance'];
et qu'ensuite tu fais 
global $G_config;

Posté : 01 mars 2009, 02:26
par captainstf
Si je fais ça dans ma procédure ça ne fonctionne pas , $G_config est vide. Et dans la page appelante, je n'en vois pas trop l'intérêt, autant passer un paramètre.
Mais merci quand même !

Posté : 01 mars 2009, 14:06
par Ryle
C'est effectivement la variable (le tableau) qu'il te faut déclarer comme global, et pas une valeur de celui-ci (d'où le message d'erreur quand tu utilises les crochets :))
<?php 
//****************************************************************************** 
// Test mode maintenance 
//****************************************************************************** 
function mode_maintenance() { 

    global $G_config; // permet d'accéder à la variable $G_config qui est définie hors de la fonction

    if ( isset($G_config['ip_maintenance'])  
          && $G_config['ip_maintenance']!=='0.0.0.0' 
          && $G_config['ip_maintenance']!==get_ip()){ 
      echo '<SCRIPT language="JAVASCRIPT">'; 
        echo 'window.open("divers/maintenance.html","_self");'; 
        echo '</SCRIPT>'; 
      } 
} 
?>
C'est normalement tout ce que tu as à faire :)

Posté : 02 mars 2009, 10:02
par captainstf
Désolé, j'avais la solution sous les yeux et pourtant...

Merci beaucoup pour votre aide !

@ bientôt !
Stéphane