PHP et javascript

Eléphanteau du PHP | 11 Messages

27 févr. 2009, 18:10

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

Mammouth du PHP | 686 Messages

27 févr. 2009, 18:22

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]

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 févr. 2009, 18:22

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

28 févr. 2009, 16:47

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

Mammouth du PHP | 686 Messages

28 févr. 2009, 16:58

si tu definit
$G_config = $G_config['ip_maintenance'];
et qu'ensuite tu fais 
global $G_config;

Eléphanteau du PHP | 11 Messages

01 mars 2009, 02:26

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 !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 mars 2009, 14:06

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

02 mars 2009, 10:02

Désolé, j'avais la solution sous les yeux et pourtant...

Merci beaucoup pour votre aide !

@ bientôt !
Stéphane