Page 1 sur 1

petit probleme avec $_SERVER['PHP_SELF']

Posté : 03 oct. 2006, 11:06
par arno77
Bonjour a tous,

J'ai une variable passé en url (http://arno77.clgon.dom/paideia_admin.php?lien=_ADD_SM)

Dans cette page je fais un $_SERVER['PHP_SELF'] mais ce faisant je perd la variable.

Je comprend pourquoi mais ne sais comment rectifier ce probleme

D'avance merci.

Posté : 03 oct. 2006, 11:09
par fred9999
salut je comprend pas trop ton problème !!!

dans ta page tu as ça par exmple :

$lien=$_GET['lien'];
$serveur=$_SERVER['PHP_SELF'];

??? :?:

et tu as pas ta variable lien??

Posté : 03 oct. 2006, 11:18
par arno77
je vais te mettre mon code se sera plus simple
ma page se divise en deux a gauche un menu

Code : Tout sélectionner

<div id=admin> <a href="./paideia_admin.php?lien=_ADD_SM">Ajouter une sous matière</a> <a href="./paideia_admin.php?lien=_ADD_DEV">Ajouter un nom de devoir</a> <a href="./paideia_admin.php?lien=_ADD_CONT_DEV">Ajouter le contenu d'un devoir</a> </div>
a droite l'affichage
<div id=affichage>';
        /* ---- insertion de l'affichage administratif ---- */
        if (isset($_GET['lien'])){



            if( $_GET['lien']=='_ADD_SM') {'c\'est dans la fontion qui est ic que je fais le $_SERVER['PHP_SELF'] est donc que je perd la variable en rechargeant la page' ;}





            elseif( $_GET['lien']=='_ADD_DEV') {echo 'add dev<br>';}
            elseif( $_GET['lien']=='_ADD_CONT_DEV') {echo 'add dev cont<br>';}
            elseif( $_GET['lien']=='_ALT_SM') {echo 'alt sm<br>';}
            elseif( $_GET['lien']=='_ALT_DEV') {echo 'alt dev<br>';}
            elseif( $_GET['lien']=='_ALT_CONT_DEV') {echo 'alt dev cont<br>';}
            elseif( $_GET['lien']=='_DEL_SM') {echo 'del sm<br>';}
            elseif( $_GET['lien']=='_DEL_DEV') {echo 'del dev<br>';}
            else{echo 'del dev cont<br>';}
        }else{
            echo _MESSAGE_ADMIN_ACCUEIL ;
        } 
    //include_once ( './gestion_du_site/affichage_admin.php');
    echo'
  </div>   

Posté : 03 oct. 2006, 11:32
par fred9999
<?php echo"<div id=affichage>"; 
        /* ---- insertion de l'affichage administratif ---- */ 
        if (isset($_GET['lien']))
{
            if( $_GET['lien']=='_ADD_SM')
			 {
			 echo $_SERVER['PHP_SELF'];
			 } 
            elseif( $_GET['lien']=='_ADD_DEV') {echo 'add dev<br>';} 
            elseif( $_GET['lien']=='_ADD_CONT_DEV') {echo 'add dev cont<br>';} 
            elseif( $_GET['lien']=='_ALT_SM') {echo 'alt sm<br>';} 
            elseif( $_GET['lien']=='_ALT_DEV') {echo 'alt dev<br>';} 
            elseif( $_GET['lien']=='_ALT_CONT_DEV') {echo 'alt dev cont<br>';} 
            elseif( $_GET['lien']=='_DEL_SM') {echo 'del sm<br>';} 
            elseif( $_GET['lien']=='_DEL_DEV') {echo 'del dev<br>';} 
            else{echo 'del dev cont<br>';} 
        }else{ 
            echo "_MESSAGE_ADMIN_ACCUEIL" ; 
        }  
    //include_once ( './gestion_du_site/affichage_admin.php'); 
    echo"</div>"; 

ET tu souhaite faire koi en gros??

sinon dès que tu obtien ta variable affiche la pour voir

Posté : 03 oct. 2006, 11:36
par Ryle
Tu devrais faire un tour dans la doc sur la liste des valeurs disponibles dans $_SERVER[] et voir à quoi elles correspondent :)

$_SERVER['PHP_SELF'] te retourne uniquement l'adresse web du fichier.
Le contenu de $_SERVER['QUERY_STRING'] devrait t'interesser ;)

Posté : 03 oct. 2006, 11:36
par arno77
en fait dans ma fonction je fais afficher des matieres en fonction de la classe selectionner si il s'agit de sixieme ca n'affiche pas grec ou latin alors que si il s'agit d'une classe superieure c possible.

donc une premiere selection dans une liste deroulante pour la classe qui recharge automatiquement en gardant la classe selectionner et ne m'affiche que les matieres de cette classe

Posté : 03 oct. 2006, 11:42
par fred9999
je comprend pas trop pkoi tu entre quelques chose dans ta variable
pour réecrirre la meme chose en echo
<?php echo"<div id=affichage>"; 
        /* ---- insertion de l'affichage administratif ---- */ 
        if (isset($_GET['lien']))
		{
            if( $_GET['lien']=='_ADD_SM')
			 {
			 echo $_SERVER['PHP_SELF'];
			 } 
            else
			{
			$affi=str_replace("_"," ",$_GET['lien']);
			echo '$affi<br>';
			} 
        }else{ 
            echo "_MESSAGE_ADMIN_ACCUEIL" ; 
        }  
    //include_once ( './gestion_du_site/affichage_admin.php'); 
    echo"</div>"; 
non je sais pas si c'es pas plu simple???

Posté : 03 oct. 2006, 13:33
par arno77
le $_SERVER['PHP_SELF'] se fait dans une fonction qui se trouve a l'endroit ou tu fais l'echo.donc en fait

<?php <div id=affichage>'; 
        /* ---- insertion de l'affichage administratif ---- */ 
        if (isset($_GET['lien'])){ 
// dans la fonction affiche modif je fais le $_SERVER['PHP_SELF'] 
//------------------------------------------------------------------------
        if( $_GET['lien']=='_ADD_SM') { affiche_modif();} 
//------------------------------------------------------------------------
//------------------------------------------------------------------------
            elseif( $_GET['lien']=='_ADD_DEV') {echo 'add dev<br>';} 
            elseif( $_GET['lien']=='_ADD_CONT_DEV') {echo 'add dev cont<br>';} 
            elseif( $_GET['lien']=='_ALT_SM') {echo 'alt sm<br>';} 
            elseif( $_GET['lien']=='_ALT_DEV') {echo 'alt dev<br>';} 
            elseif( $_GET['lien']=='_ALT_CONT_DEV') {echo 'alt dev cont<br>';} 
            elseif( $_GET['lien']=='_DEL_SM') {echo 'del sm<br>';} 
            elseif( $_GET['lien']=='_DEL_DEV') {echo 'del dev<br>';} 
            else{echo 'del dev cont<br>';} 
        }else{ 
            echo _MESSAGE_ADMIN_ACCUEIL ; 
        }  
    //include_once ( './gestion_du_site/affichage_admin.php'); 
    echo' 
  </div> 


Sinon je ne fais apparaitre les nom de mes variable que pour verifier que mes tests marchent bien.

Posté : 03 oct. 2006, 13:36
par fred9999
tu peut mettre ta fonction en ligne pour voir??

Posté : 03 oct. 2006, 13:39
par arno77
Voici la fonction
/* ---- connection a la base de donnée ---- */
$serveur = ""; 
$admin   = ""; 
$mdp     = ""; 
$base    = ""; 

$idr = isset($_POST['nom_classe'])?$_POST['nom_classe']:null;
?> 

<html> 
  <head> 
    <title>Sélectionner une matiere selon la classe choisie</title> 
  </head> 
  <body> 
    <?php 
      if(isset($_POST['ok']) && isset($_POST['nom_matiere']) && $_POST['nom_matiere'] != "") {  
        $classe_selectionnee = $_POST['nom_classe']; 
        $matiere_selectionnee = $_POST['nom_matiere']; 
      } 
      $connexion = mysql_pconnect($serveur, $admin, $mdp); 
      if($connexion != false) { 
        $choixbase = mysql_select_db($base, $connexion); 
        $sql1 = "SELECT `id_classe`, `nom_classe`". 
        " FROM `classes`". 
        " ORDER BY `id_classe`"; 
        $rech_classe = mysql_query($sql1);
        $code_classe = array(); 
        $nom_classe = array();     
        $nb_classes = 0; 
        if($rech_classe != false) { 
          while($ligne = mysql_fetch_assoc($rech_classe)) { 
            array_push($code_classe, $ligne['id_classe']); 
            array_push($nom_classe, $ligne['nom_classe']);  
            $nb_classes++; 
          } 
        } 
    ?>
 
      <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgcls"> 
        <fieldset> 
          <legend>Ajouter une sous matiere</legend>
          Pour la classe de:<br> 
          <select name="nom_classe" id="nom_classe" onchange="document.forms['chgcls'].submit();"> 
            <option value="-1">- - - Choisissez une classe - - -</option> 
            <?php
           
              for($i = 0; $i < $nb_classes; $i++) { 
                ?> 
                <option value="<?php echo($code_classe[$i]); ?>"<?php echo((isset($idr) && $idr == $code_classe[$i])?" selected=\"selected\"":null); ?>><?php echo($nom_classe[$i]); ?></option> 
                <?php 
              } 
            ?> 
          </select><br><br>
          <?php 
          mysql_free_result($rech_classe); 
          if(isset($idr) && $idr != -1){ 
            $sql2 = "SELECT `id_matiere`, `nom_matiere`". 
            " FROM `matiere`". 
            " WHERE `id_classe` = ". $idr ."". 
            " ORDER BY `id_matiere`;"; 
            if($connexion != false){ 
              $rech_mat = mysql_query($sql2, $connexion); 
              $nd = 0; 
              $code_matiere = array();
              $nom_matiere = array();
              while($ligne_mat = mysql_fetch_assoc($rech_mat)){ 
                array_push($code_matiere, $ligne_mat['id_matiere']);
                array_push($nom_matiere, $ligne_mat['nom_matiere']);
                $nd++; 
              } 
              ?>
              Dans la matière :<br>
              <select name="nom_matiere" id="nom_matiere">
                <?php 
                for($d = 0; $d<$nd; $d++){ 
                  ?> 
                  <option value="<?php echo($code_matiere[$d]); ?>"<?php echo((isset($matiere_selectionnee) && $matiere_selectionnee == $code_matiere[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_matiere[$d]); ?></option> 
                  <?php 
                } 
                ?> 
              </select> <br><br>
              J'ajoute la sous matiere :<br>
              <input name="nom_sous_matiere" type="text" size="60"><br><br>
              <?php 
            } 
            mysql_free_result($rech_mat); 
          } 
          ?> 
          <br /><input type="submit" value="Envoyer" />
        </fieldset> 
      </form> 
      <?php 
      mysql_close($connexion); 
      }else{  
          ?> 
          <p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p> 
          <?php 
        } 
      ?> 
  </body> 
</html>

Posté : 03 oct. 2006, 14:28
par jojolapine
édite rapidement ton message en remplacement tes logins et mot de passes par des ***** c'est pas bien malin de mettre tout ça en clair
(le modérateur qui passera par là pourra effacer mon message :wink: )

Posté : 03 oct. 2006, 14:38
par arno77
comment tu fais

Posté : 03 oct. 2006, 14:41
par fred9999
tu as des boutons en haut des messages

sinon t'inkiet pas j'ai pas gardé tes codes d'accès :wink: :wink:

Posté : 03 oct. 2006, 14:41
par arno77
c'est bon j'ai vu ou c'etais.
J'ai pas fait attention mais de toute façon c'est en local pas d'acces possible de maniére physique depuis l'exterieure pour l'instant
Merci