Page 1 sur 1

modifier un utilisateur

Posté : 25 juin 2007, 11:12
par béka
j'aimerais modifer les attributs d'un utilisateur qu'on choisit dans un menu déroulant. J'ai déjà commencé à faire un bout de code, mais je connais très peu XML (ça fait depuis qq jours seulement que je travaille avec) et ce bout de code ne marche pas.

Pour l'instant, lorsqu'on sélectionne un utilisateur dans le menu déroulant, les info qui apparaissent dans le deuxième formulaire ne correspondent pas à l'utilisateur choisi. Et donc du coup, après je ne peux pas faire la modif.

Voici mon code, si quelqu'un peut m'aider.
<?
//on ouvre le document users.xml
$document = new DomDocument();
$document->load('../xml/users.xml');
$racine = $document->documentElement;

$result_find = $document->getElementsByTagName('info'); //on recherche tous les éléments qui ont come nom de balise 'info'
?>

<html>
<head><title>Modifier un utilisateur</title></head>
<body>

<!--formulaire qui permet de choisir les users à modifier-->
<b>Veuillez choisir quel utilisateur modifier</b><br /><br />
<form method="post" action="modif_user.php">
<select name="mail">
  <option selected>Choisir l'utilisateur &agrave; modifier</option>
  <?
  foreach ($result_find as $result) {//pour chacun des éléments trouvés, on le renomme en 'mail'
  ?>
  <option><? echo $result->getAttribute('mail'); ?></option><? } ?>
</select> 
<input type="submit" value="Modifer" />
</form> 
<!-- fin du formulaire -->


<? if( (isset($_POST['mail'])) && $_POST['mail'] != "Choisir l'utilisateur &agrave; modifier" ) {
$mail_user =  $_POST['mail'];
?>

<!--formulaire qui permet de faire les modifications-->
<?
?>
<form method="post" action="modif_user.php">
  Adresse mail : <input type="text" name="mail" value="<? echo $result->getAttribute('mail'); ?>" /><br />
  Mot de passe : <input type="text" name="password" value="<? echo $result->getAttribute('password'); ?>" /><br />
  Droits : <input type="text" name="right" value="<? echo $result->getAttribute('right'); ?>" /><br />
  <br /><?  ?>
  <input type="submit" value="Modifier" />
</form> 
<!-- fin du formulaire -->

<? 
} //fin de if
?>

Posté : 25 juin 2007, 14:55
par béka
J'ai avancé dans mes recherches depuis ce matin. Et là j'arrive à afficher les informations en fonction de l'utilisateur. Seulement quand je valide le deuxième formulaire, la fonction Modif_user ne s'applique pas. Quelqu'un peut-il m'aider à comprendre pourquoi ?

Voici le code
<?
//on ouvre le document users.xml
$document = new DomDocument();
$document->load('../xml/users.xml');
$racine = $document->documentElement;

$result_find = $document->getElementsByTagName('info'); //on recherche tous les éléments qui ont come nom de balise 'info'


//fonction qui permet de modifier un utilisateur
function Modif_user()
{
$mail = $racine->setAttribute('mail', '$mail_modif');
$password = $racine->setAttribute('password', '$password_modif');
$right = $racine->setAttribute('right', '$right_modif');
}
?>

<html>
<head><title>Modifier un utilisateur</title></head>
<body>

<!--formulaire qui permet de choisir les users à modifier-->
<b>Veuillez choisir quel utilisateur modifier</b><br /><br />
<form method="post" action="modif_user.php">
<select name="mail">
  <option selected>Choisir l'utilisateur &agrave; modifier</option>
  <?
  foreach ($result_find as $result) {//pour chacun des éléments trouvés, on le renomme en 'mail'
  ?>
  <option><? echo $result->getAttribute('mail'); ?></option><? } ?>
</select> 
<input type="submit" value="Choisir" />
</form> 
<!-- fin du formulaire -->


<? 
if( (isset($_POST['mail'])) && ($_POST['mail'] != "Choisir l'utilisateur &agrave; modifier") )
{
  $mail_user =  $_POST['mail'];
  
  for ($i=0; $i<$result_find->length; $i++ )
    {
      $mail = $result_find->item($i)->getAttribute('mail');
      $password = $result_find->item($i)->getAttribute('password');
      $right = $result_find->item($i)->getAttribute('right');
      if ($mail == $mail_user) 
      { ?>
        <!--formulaire qui permet de faire les modifications-->
        <form method="post" action="modif_user.php" onSubmit="Modif_user()">
        <table>
        <tr>
          <td>Adresse mail : </td>
          <td><input type="text" name="mail_modif" size="50" value="<? echo $mail; ?>" /><br /></td>
        </tr>
        <tr>
          <td>Mot de passe : </td>
          <td><input type="text" name="password_modif" value="<? echo $password; ?>" /><br /></td>
        </tr>
        <tr>
          <td>Droits : </td>
          <td><input type="text" name="right_modif" value="<? echo $right; ?>" /><br /></td>
        </tr>
        <tr>
          <td colspan="2" align="right"><input type="submit" value="Modifier" /><input type="reset" value="Annuler" /></td>
        </tr>
        </table>
        </form>
        <!-- fin du formulaire --><?
      }    
    }
}
elseif( (isset($_POST['mail_modif'])) && ($_POST['password_modif']) && ($_POST['right_modif']) )
   {
     //on initialise les variables pour les utiliser lors de la mise à jour du fichier
     $mail_modif = $_POST['mail_modif'];
     $password_modif = $_POST['password_modif'];
     $right_modif = $_POST['right_modif'];
     Modif_user();
   }

Posté : 25 juin 2007, 15:15
par zeus
Désolé j'ai été déconnecté et du coup mon commentaire a été posté en Invité.
Je me suis permis de copier/coller le message invité dans ta réponse ;)

Posté : 25 juin 2007, 15:19
par zeus
Que contient la méthode JS Modif_user() ?

Désolé mais nous n'avons toujours pas de boule de cristal et nous te demandons encore et toujours de nous donner le code qui bloque ;)

Posté : 25 juin 2007, 15:20
par béka
J'ai éditer mon code pour te mettre la fonction et le reste de mon code.

Le problème est que la modf ne se fait pas.oui oui tu as bien fait.

Posté : 25 juin 2007, 15:24
par zeus
la méthode Modif_user() dans l'attribut onSubmit doit être en JS.

Si tu veux utiliser une méthode PHP, il faut que tu repasses par l'exécution du code PHP

Posté : 25 juin 2007, 15:25
par béka
oui c'est ce que j'ai fait plus bas dans mon code. Regardes je l'ai mis a jour.

Voilà le message d'erreur que j'ai :

Code : Tout sélectionner

Notice: Undefined variable: racine in ...\users\modif_user.php on line 17

Posté : 25 juin 2007, 15:27
par zeus
Relit bien ton code et regarde bien dans quel cas tu passes dans le dernier else.
C'est absolument pas le bon moment ;)

Posté : 25 juin 2007, 15:30
par béka
je rentre dans le dernier else lorsqu'on récupère les valeurs des champs du dernier formulaire.
Et ensuite j'initialise des variables que j'utilise dans la fonction Modif_user().

Non c'est pas ?

Posté : 25 juin 2007, 15:39
par zeus
elseif( (isset($_POST['mail_modif'])) && ($_POST['password_modif']) && ($_POST['right_modif']) )
Après ce if, affiche le contenu de $_POST['password_modif'] et $_POST['right_modif']

Posté : 25 juin 2007, 15:43
par béka
Tien,s regarde, revoilà tout mon code :
<?

//on ouvre le document users.xml
$document = new DomDocument();
$document->load('../xml/users.xml');
$racine = $document->documentElement;

$result_find = $document->getElementsByTagName('info'); //on recherche tous les éléments qui ont come nom de balise 'info'


//fonction qui permet de modifier un utilisateur
function Modif_user()
{
$mail = $racine->setAttribute('mail', '$mail_modif');
$password = $racine->setAttribute('password', '$password_modif');
$right = $racine->setAttribute('right', '$right_modif');
}
?>

<html>
<head><title>Modifier un utilisateur</title></head>
<body>

<!--formulaire qui permet de choisir les users à modifier-->
<b>Veuillez choisir quel utilisateur modifier</b><br /><br />
<form method="post" action="modif_user.php">
<select name="mail">
  <option selected>Choisir l'utilisateur &agrave; modifier</option>
  <?
  foreach ($result_find as $result) {//pour chacun des éléments trouvés, on le renomme en 'mail'
  ?>
  <option><? echo $result->getAttribute('mail'); ?></option><? } ?>
</select> 
<input type="submit" value="Choisir" />
</form> 
<!-- fin du formulaire -->


<? 
if( ((isset($_POST['mail'])) && ($_POST['mail'] != "Choisir l'utilisateur &agrave; modifier") )) 
{
  $mail_user =  $_POST['mail'];
  
  for ($i=0; $i<$result_find->length; $i++ )
    {
      $mail = $result_find->item($i)->getAttribute('mail');
      $password = $result_find->item($i)->getAttribute('password');
      $right = $result_find->item($i)->getAttribute('right');
      if ($mail == $mail_user) 
      { ?>
        <!--formulaire qui permet d'écrire les modifications-->
        <form method="post" action="modif_user.php">
        <table>
        <tr>
          <td>Adresse mail : </td>
          <td><input type="text" name="mail_modif" size="50" value="<? echo $mail; ?>" /><br /></td>
        </tr>
        <tr>
          <td>Mot de passe : </td>
          <td><input type="text" name="password_modif" value="<? echo $password; ?>" /><br /></td>
        </tr>
        <tr>
          <td>Droits : </td>
          <td><input type="text" name="right_modif" value="<? echo $right; ?>" /><br /></td>
        </tr>
        <tr>
          <td colspan="2" align="right"><input type="submit" value="Modifier" />&nbsp;&nbsp;<input type="reset" value="Annuler" /></td>
        </tr>
        </table>
        </form>
        <!-- fin du formulaire -->
        <?
      }    
    }
}
elseif( (isset($_POST['mail_modif'])) && ($_POST['password_modif']) && ($_POST['right_modif']) )
{
  //on initialise les variables pour les utiliser lors de la mise à jour du fichier
  $mail_modif = $_POST['mail_modif'];
  $password_modif = $_POST['password_modif'];
  $right_modif = $_POST['right_modif'];
  echo $_POST['password_modif'];
  //Modif_user(); //on appelle la fonction pour mettre a jour les information d'un utilisateur
}
?>
et quand je fais un echo de $_POST['password_modif']; dans mon deuxième elseif j'ai bien un affichage de ce que j'attends. C'est pour ça, ça veut bien dire qu'on rentre dans cette condition, on exécute même la fonction Modif_user() seulement j'ai le message d'erreur suivant :

Code : Tout sélectionner

Notice: Undefined variable: racine in ..\users\modif_user.php on line 17 Fatal error: Call to a member function setAttribute() on a non-object in ..\users\modif_user.php on line 17

Posté : 25 juin 2007, 16:03
par zeus
Il y a des fois, je me demande si tu cherches de ton côté où si tu attends le bec ouvert :-k

Le message d'erreur signifie que PHP ne connait pas la variable $result dans la fonction Modif_user().
Il faut donc que tu passes les variables en paramètre ;)

Posté : 25 juin 2007, 16:05
par béka
non mais je cherche, c'est juste que XML c'est tout nouveau pour moi.
Mais ce que je ne comprends pas, c'est que ces paramètre sont définis juste au dessus de la fonction.

Regarde :
<?
//on ouvre le document users.xml
$document = new DomDocument();
$document->load('../xml/users.xml');
$racine = $document->documentElement;

$result_find = $document->getElementsByTagName('info'); //on recherche tous les éléments qui ont come nom de balise 'info'


//fonction qui permet de modifier un utilisateur
function Modif_user()
{
$mail = $racine->setAttribute('mail', '$mail_modif');
$password = $racine->setAttribute('password', '$password_modif');
$right = $racine->setAttribute('right', '$right_modif');
}
?>
C'est pour ça, je ne comprends pas.

Posté : 25 juin 2007, 16:18
par zeus
C'est pas un problème de XMl, juste de code PHP

La portée d'une variable "normale" est locale. C'est à dire qu'elle n'est pas disponible dans une fonction si elle est définie en dehors.

Tu as donc 2 solutions :
- ne pas mettre le code dans une fonction mais directement à la place de l'appel de la fonction
- passer les paramètres à la fonction pour qu'ils soient disponibles dans la fonction

Posté : 25 juin 2007, 16:24
par béka
EDIT :

En fait j'ai encore changé, j'ai préféré exécuté directement mon code plutot que de créer une fonction.
Voilà donc le code :
<?

//on ouvre le document users.xml
$document = new DomDocument();
$document->load('../xml/users.xml');
$racine = $document->documentElement;

$result_find = $document->getElementsByTagName('info'); //on recherche tous les éléments qui ont come nom de balise 'info'


//fonction qui permet de modifier un utilisateur
function Modif_user()
{
//on ouvre le document users.xml
$document = new DomDocument();
$document->load('../xml/users.xml');
$racine = $document->documentElement;

$result_find = $document->getElementsByTagName('info'); //on recherche tous les éléments qui ont come nom de balise 'info'

//initialisation des variables
$mail_modif = $_POST['mail_modif'];
$password_modif = $_POST['password_modif'];
$right_modif = $_POST['right_modif'];
$mail_init = $_POST['mail_init'];

for ($i=0; $i<$result_find->length; $i++ )
    {
      $mail = $result_find->item($i)->getAttribute('mail');
      $password = $result_find->item($i)->getAttribute('password');
      $right = $result_find->item($i)->getAttribute('right');
      if ($mail == $mail_init) 
      {
        $result_find->setAttribute('mail', '$mail_modif');
        $result_find->setAttribute('password', '$password_modif');
        $result_find->setAttribute('right', '$right_modif');
        $document->save('../xml/users.xml');
      }
    }
}
?>

<html>
<head><title><? echo MODIF_USER_TITLE; ?></title></head>
<body>

<!--formulaire qui permet de choisir les users à modifier-->
<b><? echo MODIF_USER_TITLE_FORM; ?></b><br /><br />
<form method="post" action="modif_user.php">
<select name="mail">
  <option selected><? echo MODIF_USER; ?></option>
  <?
  foreach ($result_find as $result) {//pour chacun des éléments trouvés, on le renomme en 'mail'
  ?>
  <option><? echo $result->getAttribute('mail'); ?></option><? } ?>
</select> 
<input type="submit" value="<? echo MODIF_CHOOSE_BUTTON; ?>" />
</form> 
<!-- fin du formulaire -->


<? 
if( ((isset($_POST['mail'])) && ($_POST['mail'] != MODIF_USER) )) 
{
  $mail_user =  $_POST['mail'];  
  for ($i=0; $i<$result_find->length; $i++ )
    {
      $mail = $result_find->item($i)->getAttribute('mail');
      $password = $result_find->item($i)->getAttribute('password');
      $right = $result_find->item($i)->getAttribute('right');
      if ($mail == $mail_user) 
      { ?>
        <!--formulaire qui permet d'écrire les modifications-->
        <form method="post" action="modif_user.php">
        <input type="hidden" name="mail_init" value="<? echo $mail; ?>" />
        <table>
        <tr>
          <td><? echo MODIF_MAIL; ?></td>
          <td><input type="text" name="mail_modif" size="50" value="<? echo $mail; ?>" /><br /></td>
        </tr>
        <tr>
          <td><? echo MODIF_PASSWORD; ?></td>
          <td><input type="text" name="password_modif" value="<? echo $password; ?>" /><br /></td>
        </tr>
        <tr>
          <td><? echo MODIF_RIGHT; ?></td>
          <td><input type="text" name="right_modif" value="<? echo $right; ?>" /><br /></td>
        </tr>
        <tr>
          <td colspan="2" align="right"><input type="submit" value="<? echo MODIF_FORM_MODIFY; ?>" />&nbsp;&nbsp;<input type="reset" value="<? echo MODIF_FORM_RESET; ?>" /></td>
        </tr>
        </table>
        </form>
        <!-- fin du formulaire -->
        <?
      }    
    }
}
elseif( (isset($_POST['mail_modif'])) && ($_POST['password_modif']) && ($_POST['right_modif']) )
{
  //on initialise les variables pour les utiliser lors de la mise à jour du fichier
  $mail_init = $_POST['mail_init'];
  $mail_modif = $_POST['mail_modif'];
  $password_modif = $_POST['password_modif'];
  $right_modif = $_POST['right_modif'];
  //Modif_user(); //on appelle la fonction pour mettre a jour les information d'un utilisateur
  for ($i=0; $i<$result_find->length; $i++ )
    {
      $mail = $result_find->item($i)->getAttribute('mail');
      //$password = $result_find->item($i)->getAttribute('password');
      //$right = $result_find->item($i)->getAttribute('right');
      if ($mail == $mail_init) 
      {
        echo "mail à modifier retrouvé : ".$mail." = ".$mail_init;
        $result_find->setAttribute('mail', '$mail_modif');
        $result_find->setAttribute('password', '$password_modif');
        $result_find->setAttribute('right', '$right_modif');
        $document->save('../xml/users.xml');
      }
    }
}
?>
$mail_init correspond à l'adresse mail qu je dois modifier. Je la passe grace à un champ caché depuis mon formulaire.
Le problème vient toujours de setAttribute, car le echo qui juste avant apparait bien.

message d'erreur :

Code : Tout sélectionner

Fatal error: Call to undefined method DOMNodeList::setAttribute() in ..\users\modif_user.php on line 119

EDIT

J'AI TROUVE !!!!!!!!!!!!

Voila la solution définitive pour modifier un attribut d'un noeud d'un fichier xml en fonctnio de ce qui est passé ds un formulaire (c'est pas très bien expliqué là)
<?

//on ouvre le document users.xml
$document = new DomDocument();
$document->load('../xml/users.xml');
$racine = $document->documentElement;

$result_find = $document->getElementsByTagName('info'); //on recherche tous les éléments qui ont come nom de balise 'info'

?>

<html>
<head><title><? echo MODIF_USER_TITLE; ?></title></head>
<body>

<!--formulaire qui permet de choisir les users à modifier-->
<b><? echo MODIF_USER_TITLE_FORM; ?></b><br /><br />
<form method="post" action="modif_user.php">
<select name="mail">
  <option selected><? echo MODIF_USER; ?></option>
  <?
  foreach ($result_find as $result) {//pour chacun des éléments trouvés, on le renomme en 'mail'
  ?>
  <option><? echo $result->getAttribute('mail'); ?></option><? } ?>
</select> 
<input type="submit" value="<? echo MODIF_CHOOSE_BUTTON; ?>" />
</form> 
<!-- fin du formulaire -->


<? 
if( ((isset($_POST['mail'])) && ($_POST['mail'] != MODIF_USER) )) 
{
  $mail_user =  $_POST['mail'];  
  for ($i=0; $i<$result_find->length; $i++ )
    {
      $mail = $result_find->item($i)->getAttribute('mail');
      $password = $result_find->item($i)->getAttribute('password');
      $right = $result_find->item($i)->getAttribute('right');
      if ($mail == $mail_user) 
      { ?>
        <!--formulaire qui permet d'écrire les modifications-->
        <form method="post" action="modif_user.php">
        <input type="hidden" name="mail_init" value="<? echo $mail; ?>" />
        <table>
        <tr>
          <td><? echo MODIF_MAIL; ?></td>
          <td><input type="text" name="mail_modif" size="50" value="<? echo $mail; ?>" /><br /></td>
        </tr>
        <tr>
          <td><? echo MODIF_PASSWORD; ?></td>
          <td><input type="text" name="password_modif" value="<? echo $password; ?>" /><br /></td>
        </tr>
        <tr>
          <td><? echo MODIF_RIGHT; ?></td>
          <td><input type="text" name="right_modif" value="<? echo $right; ?>" /><br /></td>
        </tr>
        <tr>
          <td colspan="2" align="right"><input type="submit" value="<? echo MODIF_FORM_MODIFY; ?>" />&nbsp;&nbsp;<input type="reset" value="<? echo MODIF_FORM_RESET; ?>" /></td>
        </tr>
        </table>
        </form>
        <!-- fin du formulaire -->
        <?
      }    
    }
}
elseif( (isset($_POST['mail_modif'])) && ($_POST['password_modif']) && ($_POST['right_modif']) )
{
  //on initialise les variables pour les utiliser lors de la mise à jour du fichier
  $mail_init = $_POST['mail_init'];
  $mail_modif = $_POST['mail_modif'];
  $password_modif = $_POST['password_modif'];
  $right_modif = $_POST['right_modif'];
  for ($i=0; $i<$result_find->length; $i++ )
    {
      $mail = $result_find->item($i)->getAttribute('mail');
      if ($mail == $mail_init) 
      {
        $result_find->item($i)->setAttribute("mail", "$mail_modif");
        $result_find->item($i)->setAttribute("password", "$password_modif");
        $result_find->item($i)->setAttribute("right", "$right_modif");
        $document->save('../xml/users.xml');
        echo "L'utilisateur a bien été modifié";
      }
    }
}
?>
Merci zeus pour ton aide.