modifier un utilisateur

Mammouth du PHP | 536 Messages

25 juin 2007, 11:12

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
?>
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Mammouth du PHP | 536 Messages

25 juin 2007, 14:55

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();
   }
Modifié en dernier par béka le 25 juin 2007, 15:22, modifié 3 fois.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 15:15

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 15:19

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

25 juin 2007, 15:20

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.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 15:24

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

25 juin 2007, 15:25

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
Modifié en dernier par béka le 21 août 2007, 11:38, modifié 1 fois.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 15:27

Relit bien ton code et regarde bien dans quel cas tu passes dans le dernier else.
C'est absolument pas le bon moment ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

25 juin 2007, 15:30

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 ?
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 15:39

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']
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

25 juin 2007, 15:43

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
Modifié en dernier par béka le 21 août 2007, 11:41, modifié 2 fois.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 16:03

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

25 juin 2007, 16:05

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.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juin 2007, 16:18

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

25 juin 2007, 16:24

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.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!