En faite j'arrive à récupérer les informations dans un fichier xml.
Le seul truc qui me manque, c'est pour voir prendre les infos dans le fichier qui est séléctionné dans le select du dessus.
En claire ça ferai.
Etape 1 :
Je rempli une première fois le formulaire et je l'enregistre dans un fichier xml -> test1.xml. (pas de problème, là tous la bien)
Etape 2 :
Je rempli une deuxième fois le formulaire qui s’enregistre dans un nouveau xml -> text2.xml
Etape 3:
Je veux modifier test1.xml
J'ai un deuxième formulaire qui me propose dans un champs select les fichier que je peux modifier.
Puis un deuxième champs select qui me propose différents nœuds (différencier par leurs attributs) dans lesquels je peux ajouter ou modifier d'autre nœud.
Retrouver les attribut d'un fichier xml ne me pose pas de problème.
C'est juste de retrouver dynamiquement les attribut du fichier xml sélectionner et ensuite enregistrer dans le bon noeud.
Voilà ce que j'ai commencer à faire :
etape 1 et 2 :
Je créer mon fichier :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Questionnaire</title>
<link rel="stylesheet" media="all" href="includes/styles.css" />
<!--[if lt IE 9]>
<script src="includes/html5ie.js"></script>
<![endif]-->
</head>
<body>
<form method="POST" action="ajoutquestionnaire.php">
<fieldset>
<legend>Création d'un questionnaire</legend>
<p>
<label for="text_titre">Nom du questionnaire :</label>
<input type="text" id="text_titre" name="text_titre"/>
</p>
<p>
<input type="submit" value="Enregistrer et créer une page"/>
</p>
</fieldset>
</form>
</body>
</html>
Je l'enregistre :
Code : Tout sélectionner
<?php
$dom = new DOMDocument('1.0', 'utf-8');
$racine = $dom->createElement('QuestionnaireConfiguration');
$dom->appendChild($racine);
/********AJOUT TITLE****************/
$titre = $dom->createElement('Title');
$textTitre = $dom->createAttribute('text');
$textTitre->value = $_POST['text_titre'];
$titre->appendChild($textTitre);
$racine->appendChild($titre);
/**********************************/
$nomfichier = $_POST['text_titre'];
$nomfichier = str_replace(' ', '_', $nomfichier);
$filename = 'C:/xampp/htdocs/XML/questionnaires/' . $nomfichier . ".xml";
$dom->formatOutput = true;
$dom->normalizeDocument();
$dom->save($filename);
?>
Je créer un premier champ dans mon formulaire et demandant dans quel fichier je veux enregistrer :
<form method="POST" action="ajoutpage.php">
<label for="choixquestionnaire">Choix du questionnaire où ajouter la page :</label>
<select id="choixquestionnaire" name="choixquestionnaire">
<?php
$dirname = 'C:/xampp/htdocs/XML/questionnaires/';
$dir = opendir($dirname);
while($file = readdir($dir)) {
if($file != '.' && $file != '..' && !is_dir($dirname.$file))
{
$file = str_replace('.xml', '', $file);
$file = str_replace('_', ' ', $file);
echo '<option>'.$file.'</option>';
}
}
closedir($dir);
?>
</select>
<p>
<label for="legend_page">Nom de la page :</label>
<input type="text" id="legend_page" name="legend_page"/>
</p>
<p>
<label for="description_page">Description de la page :</label>
<textarea id="description_page" name="description_page"></textarea>
</p>
<fieldset>
<legend>Création d'une question</legend>
<p>
<label for="type_line">Type de la ligne :</label>
<select name="type_line">
<option>QUESTION</option>
<option>NEXT_PAGE_BTN</option>
<option>FINISH_BTN</option>
</select>
</p>
<p>
<label for="text_line">Question :</label>
<input type="text" id="text_line" name="text_line"/>
</p>
<div id="saisies">
</div>
<Input Type="Button" Value="Ajouter une réponse" OnClick="Ajouter()">
</fieldset>
<p>
<input type="submit" name="action" value="Ajouter une autre question" />
<input type="submit" name="action" value="Ajouter une autre page" />
<input type="button" value="Finir le questionnaire" onclick="location.href='index.php';"/>
</p>
</form>
<script type="text/javascript">
var nlignes = 1;
function Ajouter(){
nlignes++;
saisies.insertAdjacentHTML('BeforeEnd','<p><label for="type_input">Type de réponse :</label><select name="type_input_'+nlignes+'"><option> </option><option>text</option><option>textarea</option><option>radio</option><option>checkbox</option></select></p><p><label for="name_input_'+nlignes+'">Nom de la réponse :</label><input type=text name="name_input_'+nlignes+'" id="name_input_'+nlignes+'"/></p><p><label for="value_input_'+nlignes+'">Valeur de la réponse :</label><input type=text name="value_input_'+nlignes+'" id="value_input_'+nlignes+'"/></p>');
};
</script>
J'enregistre :
Code : Tout sélectionner
$dom = new DOMDocument();
$load = $_POST['choixquestionnaire'];
$load = str_replace(' ', '_', $load);
$dom->preserveWhiteSpace = false;
$dom->load('C:/xampp/htdocs/XML/questionnaires/'.$load.'.xml');
$racine = $dom->getElementsByTagName('QuestionnaireConfiguration');
foreach ($racine as $racine) {
echo $racine->nodeValue;
}
/*********AJOUT DE LA PAGE*****************/
$page = $dom->createElement('Page');
$legendPage = $dom->createAttribute('legend');
$legendPage->value = $_POST['legend_page'];
$page->appendChild($legendPage);
$descriptionPage = $dom->createAttribute('description');
$descriptionPage->value = $_POST['description_page'];
$page->appendChild($descriptionPage);
$racine->appendChild($page);
/**************************/
/********AJOUT LINE****************/
$line = $dom->createElement('Line');
$typeLine = $dom->createAttribute('type');
$typeLine->value = $_POST['type_line'];
$line->appendChild($typeLine);
if (!empty($_POST['text_line'])){
$textLine = $dom->createAttribute('text');
$textLine->value = $_POST['text_line'];
$line->appendChild($textLine);
}
$page->appendChild($line);
/**********************************/
/********AJOUT INPUT****************/
for($i=1; $i<100; $i++){
if (!empty($_POST['type_input_'.$i]) && !empty($_POST['name_input_'.$i]) && !empty($_POST['value_input_'.$i])){
$input = $dom->createElement('input');
$typeInput = $dom->createAttribute('type');
$typeInput->value = $_POST['type_input_'.$i];
$input->appendChild($typeInput);
$nameInput = $dom->createAttribute('name');
$nameInput->value = $_POST['name_input_'.$i];
$input->appendChild($nameInput);
$valueInput = $dom->createAttribute('value');
$valueInput->value = $_POST['value_input_'.$i];
$input->appendChild($valueInput);
$line->appendChild($input);
}
}
/***********************************/
$dom->formatOutput = true;
$dom->normalizeDocument();
$dom->save('C:/xampp/htdocs/XML/questionnaires/'.$load.'.xml');
Etape 3 :
Je veux rajouter un noeud dans un noeud "Page"
<html lang="fr">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Questionnaire</title>
<link rel="stylesheet" media="all" href="includes/styles.css" />
<!--[if lt IE 9]>
<script src="includes/html5ie.js"></script>
<![endif]-->
<style>
</style>
</head>
<body>
<form method="POST" action="ajoutquestion.php">
<p>
<label for="choixquestionnaire">Choix du questionnaire où ajouter la page :</label>
<select id="choixquestionnaire" name="choixquestionnaire">
<?php
$dirname = 'C:/xampp/htdocs/XML/questionnaires/';
$dir = opendir($dirname);
while($file = readdir($dir)) {
if($file != '.' && $file != '..' && !is_dir($dirname.$file))
{
$file = str_replace('.xml', '', $file);
$file = str_replace('_', ' ', $file);
echo '<option>'.$file.'</option>';
}
}
closedir($dir);
?>
</select>
</p>
<p>
<label for="choixpage">Choix de la page :</label>
<select id="choixpage" name="choixpage">
<?php
$dom = new DOMDocument();
$dom -> load('C:/xampp/htdocs/XML/questionnaires/test.xml');
$searchNode = $dom->getElementsByTagName( "Page" );
foreach( $searchNode as $searchNode )
{
$legendPage = $searchNode->getAttribute('legend');
echo '<option>'.$legendPage.'</option>';
}
?>
</select>
</p>
<fieldset>
<legend>Création d'une question</legend>
<p>
<label for="type_line">Type de la ligne :</label>
<select name="type_line">
<option>QUESTION</option>
<option>NEXT_PAGE_BTN</option>
<option>FINISH_BTN</option>
</select>
</p>
<p>
<label for="text_line">Question :</label>
<input type="text" id="text_line" name="text_line"/>
</p>
<div id="saisies">
</div>
<Input Type="Button" Value="Ajouter une réponse" OnClick="Ajouter()">
</fieldset>
<p>
<input type="submit" name="action" value="Ajouter une autre question" />
<input type="submit" name="action" value="Ajouter une autre page" />
<input type="submit" name="action" value="Finir le questionnaire" />
</p>
</form>
<script type="text/javascript">
var nlignes = 1;
function Ajouter(){
nlignes++;
saisies.insertAdjacentHTML('BeforeEnd','<p><label for="type_input">Type de réponse :</label><select name="type_input_'+nlignes+'"><option> </option><option>text</option><option>textarea</option><option>radio</option><option>checkbox</option></select></p><p><label for="name_input_'+nlignes+'">Nom de la réponse :</label><input type=text name="name_input_'+nlignes+'" id="name_input_'+nlignes+'"/></p><p><label for="value_input_'+nlignes+'">Valeur de la réponse :</label><input type=text name="value_input_'+nlignes+'" id="value_input_'+nlignes+'"/></p>');
};
</script>
Ici j'ai mit que c'était dans le fichier test.xml, mais il faudrait donc que ça change en fonction de celui qu'on à choisit dans le select au dessus.
Et ensuite je doit enregistrer cet élément dans le bon nœud, ca aussi je ne sais pas comment dire "tu enregistre dans le nœud qui à l'attribut X"
Pour le moment j'ai ça pour l'enregistrement :
Code : Tout sélectionner
<?php
$dom = new DOMDocument();
$load = $_POST['choixquestionnaire'];
$load = str_replace(' ', '_', $load);
$dom->preserveWhiteSpace = false;
$dom->load('C:/xampp/htdocs/XML/questionnaires/'.$load.'.xml');
$racine = $dom->getElementsByTagName('QuestionnaireConfiguration');
foreach ($racine as $racine) {
echo $racine->nodeValue;
}
/********AJOUT LINE****************/
$page = ???
$line = $dom->createElement('Line');
$typeLine = $dom->createAttribute('type');
$typeLine->value = $_POST['type_line'];
$line->appendChild($typeLine);
if (!empty($_POST['text_line'])){
$textLine = $dom->createAttribute('text');
$textLine->value = $_POST['text_line'];
$line->appendChild($textLine);
}
$page->appendChild($line);
/**********************************/
/********AJOUT INPUT****************/
for($i=1; $i<100; $i++){
if (!empty($_POST['type_input_'.$i]) && !empty($_POST['name_input_'.$i]) && !empty($_POST['value_input_'.$i])){
$input = $dom->createElement('input');
$typeInput = $dom->createAttribute('type');
$typeInput->value = $_POST['type_input_'.$i];
$input->appendChild($typeInput);
$nameInput = $dom->createAttribute('name');
$nameInput->value = $_POST['name_input_'.$i];
$input->appendChild($nameInput);
$valueInput = $dom->createAttribute('value');
$valueInput->value = $_POST['value_input_'.$i];
$input->appendChild($valueInput);
$line->appendChild($input);
}
}
/***********************************/
$dom->formatOutput = true;
$dom->normalizeDocument();
$dom->save('C:/xampp/htdocs/XML/questionnaires/'.$load.'.xml');
?>
Voilà j'espere vous avoir donner assez d'informations pour que vous puissiez m'aider
EDIT :
Bon j'ai essayer enregistrer dans le noeud Page en retrouve l'attribut avec xpath
Code : Tout sélectionner
/********AJOUT LINE****************/
$pageAttribute = $_POST['choixpage'];
$xpath = new DomXPath($dom);
$parent = $xpath->query("//Page[@legend=$pageAttribute]");
$line = $dom->createElement('Line');
$typeLine = $dom->createAttribute('type');
$typeLine->value = $_POST['type_line'];
$line->appendChild($typeLine);
if (!empty($_POST['text_line'])){
$textLine = $dom->createAttribute('text');
$textLine->value = $_POST['text_line'];
$line->appendChild($textLine);
}
$parent->item(0)->appendChild($line);
/**********************************/
Et j'ai une bonne grosse erreur :
Fatal error: Call to a member function appendChild() on a non-object in
J'avance, j'avance, mais j'avoue que je commence à craquer lol