8791 sujets

Développement web côté serveur, CMS

Bonjour, me revoilà Smiley confused

essayons d'être clair...

J'ai créé un espace adminsitrateur sur mon site.
De celui-ci un bouton permet de donner des droits à un nouvel admin.
En cliquant dessus je fais apparaître un formulaire avec lequel on valide et inscrit dans une BDD un nouvel administrateur.
Lorsque je rempli le formulaire et que j'envoi les données... quizz, rien ! Smiley biggol

Voici le code de mes pages:
La page Espace administrateur
<script language="javascript">
function tache_a_effectuer(tache)
{
     document.selection.submit()
     document.location.href= tache;
}
</script>


<!-- Style -->
<link rel="stylesheet" href="styles/espace_admin.css" type="text/css">
<!-- Contenu -->
<div id="contenu_page_de_texte">
          <div class="image_de_titre">
          <img src="images/fl-rouge-orange.gif">
          </div>
          <H1>Bienvenue <?php echo htmlentities(trim($_SESSION['prenom'])); ?> !</H1>
          
          <form action="espace_admin.php" method="post" name="selection"> 
                <table class="menu_admin">
                    <tr>
                        <td><input type="image" name="mise_a_jour" value="horloge" alt="mise à jour de la date" src="images/horloge.gif" onClick="javascript:tache_a_effectuer('date_mise_a_jour.php');"/></td>
                        <td><input type="image" name="a_la_une" alt="ajouter un post dans la zone à la une" value="a_la_une" src="images/a_la_une_bouton.gif"></td>
                        <td><input type="image" name="zoom_sur" alt="ajouter un post dans la zone zoom sur" value="zoom_sur" src="images/zoom_sur_bouton.gif"></td>
                        <td><input type="image" name="nouvel_admin" alt="ajouter un administrateur" value="nouvel_admin"  src="images/nouvel_admin.gif"></td>
                        <td><input type="image" name="deconnection" alt="sortir de l'espace administrateur" value="deconnect" onClick="javascript:tache_a_effectuer('deconnexion_admin.php');" src="images/btn-espace-client-deconnexion.gif" /></td>
                    </tr>
                 </table>
          </form> 
          <?php
              function recup_date(){
              if ($db = @mysql_connect('localhost','root',''))
              {
                  mysql_select_db('mise-a-jour',$db);
                  $result = mysql_query("SELECT `date` FROM `date-de`");
                  while ($reponse = mysql_fetch_array($result))
                                {
                                return $reponse["date"];
                                }
                  mysql_close($db);
                }
                else{
                      return 'connection failed';
                }
          }
          
          
          if($_SERVER['REQUEST_METHOD'] == 'POST') {
          if (isset($_POST["mise_a_jour_x"])&& isset($_POST["mise_a_jour_y"])){
          $texte = 'date de dernière mise à jour : '.recup_date() ;
           }
           elseif (isset($_POST["nouvel_admin_x"])&& isset($_POST["nouvel_admin_y"])){
                       include ('permanents/inscription_admin.inc.html');  
              } 
          // elseif (isset($_POST["sortie_admin_x"]) && isset($_POST["sortie_admin_y"])){}
          else {$texte = 'bouton encore non affecté';}
          echo $texte;
          }?>
          
          
</div>

La page qui s'inclue pour faire apparaitre le formulaire
inscription_admin.inc.html

Inscription à l'espace membre :<br />
      <form action="espace_admin.php" method="post">
          <table>
                <tr>
                    <td>Login :</td>
                    <td><input type="text" name="login2" value="<?php if (isset($_POST['login2'])) echo htmlentities(trim($_POST['login2'])); ?>"></td>
                </tr>
                <tr>
                     <td>Mot de passe :</td>
                     <td><input type="password" name="pass2" value="<?php if (isset($_POST['pass2'])) echo htmlentities(trim($_POST['pass2'])); ?>"></td>
                </tr>
                <tr>
                     <td>Confirmation du mot de passe :</td>
                     <td><input type="password" name="pass_confirm2" value="<?php if (isset($_POST['pass_confirm2'])) echo htmlentities(trim($_POST['pass_confirm2'])); ?>"></td>
                </tr>
                <tr>
                      <td>Prénom :</td>
                      <td><input type="text" name="nom2" value="<?php if (isset($_POST['nom2'])) echo htmlentities(trim($_POST['nom2'])); ?>"></td>
                </tr>
                <tr> 
                      <td>Nom :</td>
                      <td><input type="text" name="prenom2" value="<?php if (isset($_POST['prenom2'])) echo htmlentities(trim($_POST['prenom2'])); ?>"></td>
                </tr>
                <tr>
                      <td><input type="button" name="inscription" onClick="javascript:tache_a_effectuer('inscription_admin.php');" value="Inscription"></td>
                </tr>      
            </table>
</form>

La page php qui doit traiter le formulaire vers une BDD
inscription_admin.php

<?php

// on teste si le visiteur a soumis le formulaire  
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') { 
   // on teste l'existence de nos variables. On teste également si elles ne sont pas vides 
   if ((isset($_POST['login2']) && !empty($_POST['login2'])) && (isset($_POST['pass2']) && !empty($_POST['pass2'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) { 
      // on teste les deux mots de passe 
      if ($_POST['pass2'] != $_POST['pass_confirm2']) { 
         $erreur = 'Les 2 mots de passe sont différents.'; 
      } 
      else { 
         $base = mysql_connect ('localhost', 'root', ''); 
         mysql_select_db ('compte_membres', $base); 
         
         // on recherche si ce login est déjà utilisé par un autre membre 
         $sql = 'SELECT count(*) FROM log_admin WHERE login="'.mysql_escape_string($_POST['login2']).'"'; 
         $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
         $data = mysql_fetch_array($req); 
 
         if ($data[0] == 0) { 
            $sql = 'INSERT INTO log_admin VALUES("", "'.mysql_escape_string($_POST['login2']).'", "'.md5(mysql_escape_string($_POST['pass'])).'", "'.mysql_escape_string($_POST['nom']).'", "'.mysql_escape_string($_POST['prenom']).'")'; 
            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
 
            session_start(); 
            $_SESSION['login2'] = $_POST['login2']; 
            $_SESSION['prenom2'] = $_POST['prenom2'];
            echo $_SESSION['prenom2'].' a été inscrit en tant qu\'administrateur'; 
            exit(); 
         } 
         else { 
            $erreur = 'Un membre possède déjà ce login.'; 
         } 
      } 
   } 
   else { 
      $erreur = 'Au moins un des champs est vide.'; 
   }  
}  

if (isset($erreur)) echo '<br />',$erreur;  
?>

Merci de votre aide future Smiley biggrin
Modifié par Boubou57 (01 Dec 2008 - 13:17)
Peux-tu être un peu plus précis ?
Que signifie "rien" ? L'inscription dans la base de données ne se fait pas ? Les données envoyées par POST sont erronées ?
A toute fin utile, il peut être judicieux d'installer l'extension Firefox Firebug qui pourra te permettre d'analyser les données envoyées par le formulaire...

EDIT : il me semble que les donnée POST envoyées pour des champs de type image diffèrent d'un navigateur à l'autre, donc la clause :

if(isset($_POST["nouvel_admin_x"]) && isset($_POST["nouvel_admin_y"]))

peut retourner FALSE, donc pas d'inclusion postérieure de la page inscription_admin.inc.html
Modifié par kalipka (27 Nov 2008 - 18:47)
Plus précis...biensûr Smiley smile

L'inclusion de la page html qui contient le formulaire a bien lieu.
Mais lorsque valide le formulaire, j'ai l'ouverture d'une page vierge qui correspond à la page inscription_admin.php (Ca je crois savoir d'où ça vient: De ma fonction javascript Smiley rolleyes )

Mais surtout, aucun affichage dans la BDD...
kalipka a écrit :
il me semble que les donnée POST envoyées pour des champs de type image diffèrent d'un navigateur à l'autre
Ah ? Jamais entendu ça. Smiley murf

Tu aurais un lien vers un article qui en parle ?


Edit: pour être plus précis il me semble effectivement que pour IE le point supérieur gauche est à x=0 y=0 et que pour (tous ?) les autres c'est x=1 y=1... mais les noms des variables POST envoyées sont à priori toujours les mêmes... non ?

Edit2: @Boubou57 > sans regarder tout le code tu te compliques quand même la vie avec ce formulaire et ce Javascript complètement inutiles ici. Tu pourrais faire tout simplement :
<a href="lien1.php"><img src="monimage1.jpg" width="100" height="100" alt="lien1" /></a>
<a href="lien2.php"><img src="monimage2.jpg" width="100" height="100" alt="lien2" /></a>
<a href="lien3.php"><img src="monimage3.jpg" width="100" height="100" alt="lien3" /></a>

Modifié par Heyoan (28 Nov 2008 - 14:12)
Bon alors après avoir regardé le code de plus près...

* si la variable mise_a_jour_x existe il est inutile de tester l'existence de mise_a_jour_y.

* la boucle while de la fonction PHP recup_date est également inutile puisque tu t'arrêtes au premier résultat. Il faudrait plutôt utiliser
return mysql_result($result, 0);

* il me semble bien que le formulaire de la page inscription_admin.inc.html devrait pointer vers inscription_admin.php et pas espace_admin.php. Encore une utilisation inutile de Javascript... dont le code en l'occurrence ne fonctionne pas. Smiley cligne

* puisque la page inscription_admin.inc.html contient du code PHP elle devrait avoir l'extension .php ce qui permettrait entre autres choses d'éviter que tes identifiants de connexion puissent être récupérés. Smiley langue
Modifié par Heyoan (28 Nov 2008 - 14:51)
> Heyoan
Oui c'est ça, j'avais le souvenir d'une différence d'un navigateur à un autre... Rien à voir avec les données POST en effet... Je m'abstiendrai à l'avenir... Smiley confused
Heyoan a écrit :

puisque la page inscription_admin.inc.html contient du code PHP elle devrait avoir l'extension .php ce qui permettrait entre autres choses d'éviter que tes identifiants de connexion puissent être récupérés. Smiley langue


En ce qui concerne les boutons, je vais me rapprocher de ce que tu m'as proposé plus haut. Smiley smile

Pour la citation ci-dessus, je ne savais pas que les identifiants pouvaient être récupérés dans ce cas là: Cette page html est appelée par un include dans une page php. Peux-tu me confirmer cela?

Sinon, merci de tes remarques toujours précieuses.
a+

Smiley cligne
Boubou57 a écrit :

Pour la citation ci-dessus, je ne savais pas que les identifiants pouvaient être récupérés dans ce cas là: Cette page html est appelée par un include dans une page php. Peux-tu me confirmer cela?
Eh bien il y a peu de chances que quelqu'un tombe directement sur la page html mais si cela arrivait les identifiants seraient bel et bien visibles. Smiley murf
Heyoan,
je te remercie d'éclairer à chque fois ma lanterne ... Smiley lol

La méthode avec


<a href="lien1.php"><img src="monimage1.jpg" width="100" height="100" alt="lien1" /></a>



au lieu des boutons me permets de résoudre la problème exposé et en bonus... mon code gagne en fluidité et donc mon site en rapidité...

a+
Modifié par Boubou57 (01 Dec 2008 - 13:19)