Aide pour creation repertoire telephonique en php -> xml

Petit nouveau ! | 5 Messages

13 nov. 2016, 20:49

Bonjour à tous,

Voila je me suis lancer dans la création d'un repertoire telephonique pour envois sur mes sip phone.
J'ai réussis à pas mal avancer, mais je suis bloquer sur quelques trucs et donc peut être quelqu'un aura la solution pour m'aider.

Je vous mets le script php que j'ai créé :
<?php
if (isset($_POST['insert']))
{
	$xml = new DomDocument("1.0","UTF-8");
	$xml->load('phonebook.xml');	
	
	$cname = $_POST['c_name'];
	$cnom = $_POST['c_nom'];
	$tphone = $_POST['t_phone'];
	$account = $_POST['a_count'];
	$groupe = $_POST['g_roupe'];
	
	$rootTag = $xml->getElementsByTagName("AddressBook")->item(0);
	
	$infoTag = $xml->createElement("Contact");
		$nameTag = $xml->createElement("FirstName", $cname);
		$nomTag = $xml->createElement("LastName", $cnom);
		
		$genreTag = $xml->createElement("Phone"," "); 
		$phoneTag = $xml->createElement("phonenumber", $tphone);
		$genreTag ->setAttribute("type","Work");
		
		$accountTag = $xml->createElement("accountindex", $account);
		$groupeTag = $xml->createElement("downloaded", $groupe);
		
		$infoTag->appendChild($nameTag);
		$infoTag->appendChild($nomTag);
		$infoTag->appendChild($genreTag);
		$infoTag->appendChild($phoneTag);
		$infoTag->appendChild($accountTag);
		$infoTag->appendChild($groupeTag);
		
	
	$rootTag->appendChild($infoTag);
	$xml->save('phonebook.xml');
}

?>
<html>
	<body>
<form action="ajouter.php" method="post">
<h1>AJOUTER CONTACTS</h1></br>
PRENOM <input type = "text" name = "c_name" /></br>
NOM <input type = "text" name = "c_nom" /></br>
TELEPHONE <input type = "text" name = "t_phone"/></br>
COMPTE : <input type = "radio" name = "a_count" value="1" checked>1</br>
GROUPE : <input type = "radio" name = "g_roupe" value="0" checked>0</br>
 <input type = "submit" name="insert" value = "ajouter"/>
 <input type="button" value="Accueil" onclick="document.location.href='index.html';">
</form>
	</body>
</html>
alors le résultat c'est ca :

Code : Tout sélectionner

<AddressBook> <Contact> <FirstName>Bernard</FirstName> <LastName>bouvier</LastName> <Phone type="Work"></Phone> <phonenumber>0123456789</phonenumber> <accountindex>1</accountindex> <downloaded>0</downloaded> </Contact> </AddressBook>

hors moi j'aimettre que cela soit ca (pour que cela soit accepter par mes sip phones) :

Code : Tout sélectionner

<AddressBook> <Contact> <FirstName>Bernard</FirstName> <LastName>bouvier</LastName> <Phone type="Work"> <phonenumber>0123456789</phonenumber> </Phone> <accountindex>1</accountindex> <downloaded>0</downloaded> </Contact> </AddressBook>
Alors je galères je ne trouve pas de solutions.

Ensuite j'aimerais pouvoir faire un script php pour verifier qu'il n'y ai pas de doublons a chaque fois que je rentre un contact si il existe deja qu'il ne ne me le réécrive pas.
Et pour finir j'aimerais avoir sur une page web la liste de mes contacts comme ca je verrais le répertoire avant qu'il ne se synchronise si vous avez des idées merci par avance :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

14 nov. 2016, 00:57

Bonjour,

Alors pour tes 3 questions :

1) pour la balise <phonenumber> qui doit être dans <Phone >, c'est juste que tu fais appendChild($phoneTag) sur $infoTag (qui correspond à <contact>) et pas sur ta balise <Phone>

2) Pour vérifier qu'il n'y ait pas de doublon, avant de procéder à la modification, tu pourrais charger le XML du répertoire existant et chercher dedans pour voir si le n° existe déjà avec un xpath.

3) Vu que ton répertoire est en XML, je vois 2 possibilités :
- soit créer une feuille de style XSLT, c'est le plus efficace car directement interprété par le navigateur web, ça demande de comprendre le principe des XSLT mais ce n'est pas insurmontable non plus surtout que ton XML est très simple.
- soit faire un petit script PHP qui va charger ton XML et faire une boucle sur tous tes contacts pour afficher les infos. Avec simplexml en PHP c'est très rapide à faire.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

14 nov. 2016, 08:12

MERCI pour ta réponse mais je dois être trop bête car je ne comprends pas ton 1) car dès que je change :
$infoTag->appendChild($phoneTag); par : $infoTag->appendChild($infoTag); cela fais planter le formulaire

Pour les réponses 2 et 3 je vais me pencher dessus merci vraiment en tout cas :)

Mammouth du PHP | 1967 Messages

14 nov. 2016, 10:07

c'est ceci
$infoTag->appendChild($phoneTag);
qu'il faut remplacer par
$genreTag->appendChild($phoneTag);
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 5 Messages

14 nov. 2016, 11:46

Alors un TRES GRAND MERCI à toi, cela fonctionne tres bien puis je encore abusé de ta patience ????
j'ai fais un script pour effacer les entrées mais visiblement cele ne fonctionne pas peux tu m'aider à réparer ma ou mes erreurs ?

voici le script :

<?php
if (isset($_REQUEST['delete']))
{
$xml = new DomDocument("1.0","UTF-8");
$xml->load('phonebook.xml');

$cnom = $_POST['c_nom'];

$xpath=new DOMXPATH($xml);

foreach($xpath->query("/AddressBook/Contact/FirstName/[name='$cnom']") as $node)
{
$node->parentNode->removeChild($node);
}

$xml->formatoutput=true;
$xml->save('phonebook.xml');
}
?>
<html>
<body>
<form action="effacer.php" method="post">
<h1>EFFACER CONTACTS</h1></br>
NOM :<input type="text" name="c_nom" /></br>
<input type="submit" name="delete" value="supprimer"></br>
<input type="button" value="Accueil" onclick="document.location.href='index.html';">
</form>
</body>
</html>

Merci par avance !

Mammouth du PHP | 1967 Messages

14 nov. 2016, 12:34

Il faut que tu debug ton code, commence par afficher tes variables $_POST pour être sur de leur valeur, vérifie que ton code passe par là où il devrait, que ton Xpath récupère les bon noeuds.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 5 Messages

14 nov. 2016, 12:45

Merci vraiment je vais regarder cela merci encore :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

14 nov. 2016, 16:03

Pour info, pour afficher la valeur de tes variables et faciliter ton debugage, le mieux est d'utiliser la fonction var_dump()
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 5 Messages

14 nov. 2016, 16:04

heu ... j en suis pas la encore lol :) Et finalement merci j'ai compris et cela je pense va bien m'aider :)