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; ?>" /> <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; ?>" /> <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 !!