petit probleme avec $_SERVER['PHP_SELF']

Eléphant du PHP | 130 Messages

03 oct. 2006, 11:06

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.

Mammouth du PHP | 592 Messages

03 oct. 2006, 11:09

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??

Eléphant du PHP | 130 Messages

03 oct. 2006, 11:18

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>   

Mammouth du PHP | 592 Messages

03 oct. 2006, 11:32

<?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

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

03 oct. 2006, 11:36

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 ;)

Eléphant du PHP | 130 Messages

03 oct. 2006, 11:36

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

Mammouth du PHP | 592 Messages

03 oct. 2006, 11:42

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???

Eléphant du PHP | 130 Messages

03 oct. 2006, 13:33

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.

Mammouth du PHP | 592 Messages

03 oct. 2006, 13:36

tu peut mettre ta fonction en ligne pour voir??

Eléphant du PHP | 130 Messages

03 oct. 2006, 13:39

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>
Modifié en dernier par arno77 le 03 oct. 2006, 14:39, modifié 1 fois.

ViPHP
ViPHP | 3607 Messages

03 oct. 2006, 14:28

é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: )

Eléphant du PHP | 130 Messages

03 oct. 2006, 14:38

comment tu fais

Mammouth du PHP | 592 Messages

03 oct. 2006, 14:41

tu as des boutons en haut des messages

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

Eléphant du PHP | 130 Messages

03 oct. 2006, 14:41

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