8791 sujets

Développement web côté serveur, CMS

Bonjour,

je suis actuellement entrain de créer un formulaire de création dynamique de CV en XML, mais je rencontre un soucis sur lequel je bloque depuis maintenant 1 semaine.
J'ai tout d'abord mon formulaire dans lequel la personne va renseigner ses informations. Arrivé au moment de rentrer ses diplômes obtenus par exemple, la personne choisi tout d'abord le nombre de diplômes qu'elle a obtenu grâce à un SELECT rendu dynamique en le combinant avec du javascript. Ce qui fait que si la personne choisi 2, il y aura 2 champs de saisie d'information concernant le diplôme qui apparaitront et ainsi de suite.

Une fois que la personne aura renseigné toutes ses informations, elle va valider le formulaire qui va donc traiter les informations. C'est là que je vais commencer à bloquer un peu.
Les variables simples pas de problème je les récupères et j'arrive à les insérer sans aucun soucis.
Mais quand j'essaie de récupérer les variables dynamique, c'est à dire celles qui sont en rapport avec le nombre de diplômes rensiegnés, c'est un peu plus compliqué.
Dans la partie diplômes, je demande de renseigner l'année d'obtention, l'intitulé du diplôme ainsi que la ville d'obtention.
Dans mon formulaire, le nom des input était dynamique de façon à avoir anneeObtDiplome1, intituleDiplome1 villeObtention1, anneeObtDiplome2, intituleDiplome2 villeObtention2 si la personne à choisi de renseigner 2 diplômes.

Pour les récuperer comme ça j'ai fait une boucle FOR qui démarre donc à 0 et qui va jusqu'au nombre de diplômes choisis où l'on récupèrera les noms de variables dynamiques.

voila le code la partie en question pour récuperer

for ($i=0; $i<=$nb_diplome; $i++)
{
	$anneeobtention = $_POST["anneeObtDiplome$i"];
	$intitulediplome = $_POST["intituleDiplome$i"];
	$villeobtention = $_POST["villeObtention$i"];
			
	$diplome = "<diplome>
					  <annee_obtention>$anneeobtention</annee_obtention>
					  <intitule_diplome>$intitulediplome</intitule_diplome>
					  <ville_obtention>$villeobtention</ville_obtention>
			  </diplome>";
	echo $diplome;
}


J'ai mis les echo afin de savoir si il les récupère bien et c'est le cas, les données sont bien récupérés.

Par contre une fois que tout est récupéré, je crée une varibale PHP qui va contenir tout le code de mon XML et dans lequel je vais y insérer toutes les données recueillis. Par contre c'est à ce niveau que je pêche car je ne sais pas comment réussir à intégrer dynamiquement toutes les données des diplômes.
Dans mon XML j'ai donc la balise générale qui va contenir tous les diplômes et il faut donc que si j'ai renseigné 2 diplômes, qu'il y ai 2 balises de diplômes qui se crées. Je m'explique : j'ai ma balise XML générale

<diplomes>
</diplomes>

Si j'ai renseigné 2 diplômes il faudra que j'ai

<diplomes>
<diplome>
<annee_obtention>2005</annee_obtention>
<intitule_diplome>Baccalauréat</intitule_diplome>
<ville_obtention>Sarreguemines</ville_obtention>
</diplome>

<diplome>
<annee_obtention>2007</annee_obtention>
<intitule_diplome>DUT SRC</intitule_diplome>
<ville_obtention>Haguenau</ville_obtention>
</diplome>
</diplomes>


et là j'ai des difficultés à trouver comment rentrer dynamiquement tout ça. En fait je pense qu'il faudra faire une autre boucle FOR qu'il faudrait ajouter, mais je ne sais pas comment insérer une boucle FOR dans une variable.
Car là avec le code tel quel, j'ai ma variable $diplome qui contient les balises XML concernant le diplôme, mais comme la variable $diplome reste toujours la même, la nouvelle qui est créé dans la boucle écrase toujours la précédente et si je décide d'insérer la variable $diplome, elle ne m'affichera donc que le dernier diplôme saisie puisque à chaque fois le précédent était écrasé.

Il faudrait donc que je réussisse à incrémenter ma variable $diplome pour que à chaque fois qu'il y a un nouveau diplome, la variable s'appelle $diplome1 $diplome2 ... et de réussir à appeller $diplome1 $diplome2 ... dans la variable $monxml


Mes explications sont peut être un peu confuses et je m'en excuse, je vais vous montrer le code qui parlera surement mieux.




Le formulaire !!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<script language="javascript" type="text/javascript">
			function affiche_text_reponse(formulairecv) {
			  var Obj  = document.getElementById( 'D_INPUT'); // Recup du DIV
			  var Html = ""; // le nouveau contenu
			  var nb_rep = eval(formulairecv.nb_diplome.value);
			  for (i=1; i<=nb_rep; i++) {

				Html += "<br/><br/><fieldset><legend>Information Diplome"+i+"</legend><table><tbody><tr><td>Année dobtention:</td><td><input name='anneeObtDiplome"+i+"' size='20' type='text'></td></tr><tr><td><br></td></tr><tr><td>Intitulé du diplôme:</td><td><input name='intituleDiplome"+i+"' size='20' type='text'></td></tr><tr><td>Ville d'obtention:</td><td><input name='villeObtention"+i+"' size='20' type='text'></td></tr></tbody></table></fieldset><br/>";}
			Obj.innerHTML = Html; // ecriture dans le DIV
			} 
		</script>
		
		<script language="javascript" type="text/javascript">
			function affiche_languep(formulairecv) {
			  var Obj  = document.getElementById( 'languep1'); // Recup du DIV
			  var Html2 = ""; // le nouveau contenu
			  var languep2 = eval(formulairecv.languep.value);
			  for (i=1; i<=languep2; i++) {
				Html2 += "<br/><br/><table><tbody><tr><td>Langue parlée "+i+" : </td><td><input name='langue_parlee"+i+"' size='20' type='text'></td></tr></tbody></table><br/>";}
			Obj.innerHTML = Html2; // ecriture dans le DIV
			} 
		</script>
		
		<script language="javascript" type="text/javascript">
			function affiche_languee(formulairecv) {
			  var Obj  = document.getElementById( 'languee1'); // Recup du DIV
			  var Html3 = ""; // le nouveau contenu
			  var languee = eval(formulairecv.languee.value);
			  for (i=1; i<=languee; i++) {
				Html3 += "<br/><br/><table><tbody><tr><td>Langue écrite "+i+" : </td><td><input name='langue_ecrite"+i+"' size='20' type='text'></td></tr></tbody></table><br/>";}
			Obj.innerHTML = Html3; // ecriture dans le DIV
			} 
		</script>
		
		<script language="javascript" type="text/javascript">
			function affiche_languel(formulairecv) {
			  var Obj  = document.getElementById( 'languel1'); // Recup du DIV
			  var Html4 = ""; // le nouveau contenu
			  var languel = eval(formulairecv.languel.value);
			  for (i=1; i<=languel; i++) {
				Html4 += "<br/><br/><table><tbody><tr><td>Langue lue "+i+" : </td><td><input name='langue_lue"+i+"' size='20' type='text'></td></tr></tbody></table><br/>";}
			Obj.innerHTML = Html4; // ecriture dans le DIV
			} 
		</script>
	</head>


	<body>
		<div>
		<p style="color: rgb(255, 0, 0);" align="center">
			<u>
			FORMULAIRE DE CREATION DE CV
			</u>
		</p>
		
		<form name="FormulaireCV" method="post" action="gen_xml.php5" target="_blank" onsubmit='return window.confirm("Ces informations seront envoyées vers une page externe. \nVoulez-vous continuer ?");'>
		
		<fieldset>
			
				<legend>Donnée personnelle</legend>
				<br>
				
			<table border="0">
				<tbody><tr>
					<td>
						<label>
							Intitulé du Poste Recherché:
						</label>
					 </td>
					 <td>
						<input name="titreCV" size="20" type="text">
					 </td>
				</tr>
			  
				<tr><td><br></td></tr>
				  
				<tr>
					<td>
						<label>
							Civilité : 
						</label>
					 </td>
					 <td>
						<input name="sivilite" size="20" value="M" checked="checked" type="radio">M
						<input name="sivilite" size="20" value="Mme" type="radio">Mme
						<input name="sivilite" size="20" value="Mlle" type="radio">Mlle
					</td>
				</tr>
				
				<tr><td><br></td></tr>
				
				<tr>
					<td>
						<label>
							Nom : 
						</label>
					</td>
					<td>
						<input name="nom" size="20" type="text">
					</td>
				</tr>
		  
				<tr><td><br></td></tr>
		  
				<tr>
					<td>
						<label>
							Prénom :
						</label>
					</td>
					<td>
						<input name="prenom" size="20" type="text">
					</td>
				</tr>
				
				 <tr><td><br></td></tr>
				
				<tr>
					<td>
						<label>
							Age:
						</label>
					 </td>
					 <td>
						<input name="age" size="20" type="text">
					</td>
			   </tr>
				
				<tr><td><br></td></tr>
		  
				<tr>
					<td>
						 N° de rue:
					</td>
					<td>
						 <input name="numRue" size="20" type="text">
					</td>
				</tr><tr>
				
				</tr><tr><td><br></td></tr>
				
				<tr>
				   <td>
						Rue:
				   </td>
				   <td>
					   <input name="rue" size="20" type="text">	 
					</td>
				</tr>
				
				<tr><td><br></td></tr>
			   
			   <tr>
					<td> 
						<label>
							Ville :
						</label>
					 </td>
					 <td>
						<input name="vile" size="20" type="text">
					</td>
			   </tr>
			   
			   <tr><td><br></td></tr>
			   
			   <tr>
					<td> 
						<label>
							Code Postal:
						</label>
					 </td>
					 <td>			   
						<input name="cp" size="20" type="text">
					</td>
			   </tr> 
			   
			   <tr><td><br></td></tr>	   
		
				<tr>
					<td>		
						<label>
							Pays :
						</label>
				   </td>
				   <td>
						<input name="pays" size="20" type="text">
					</td>
				</tr>
				
				<tr><td><br></td></tr>
		
				<tr>
					<td>
						<label>
							Téléphone :
						</label>
					</td>
					<td>
						<input name="tel" size="20" type="text">
					</td>
				</tr>
				
				<tr><td><br></td></tr>
				 
				 <tr>
					<td>
						<label>
							E-mail :
						</label>
					</td>
					<td>
						<input name="mail" size="20" type="text">
					</td>
				</tr>
				
				<tr><td><br></td></tr>
				
				<tr>
					<td>
						<label>
							Site Web :
						</label>
					 </td>
					 <td>
						<input name="web" size="20" type="text">
					</td>
				</tr>
				
			   
			</tbody></table>
		</fieldset>
		
		<br>
		
		<fieldset>
			<legend>
				Diplome:
			</legend>
			
			<fieldset>
				<legend>Nombre de diplômes obtenus</legend>
				<select id="nb_diplome" name="nb_diplome" onChange="affiche_text_reponse(form)">
					<?php
						for ($i=0; $i<=5; $i++)
						{
							echo"<option id='$i' value='$i'>$i</option>";
						}
					?>
				</select>
			</fieldset>
			
			<div id="D_INPUT" name="D_INPUT"></div>
			
			  
		</fieldset>
		
		<br>
		
		<fieldset>
			<legend>
				Savoir faire:
			</legend>
			
			<fieldset>
				<legend>Nombre langues parlées</legend>
				<select id="languep" name="languep" onChange="affiche_languep(form)">
					<?php
						for ($i=0; $i<=5; $i++)
						{
							echo"<option id='$i' value='$i'>$i</option>";
						}
					?>
				</select>
				
				<div id="languep1" name="languep1"></div>
			</fieldset> 

			<fieldset>
				<legend>Nombre langues écrites</legend>
				<select id="languee" name="languee" onChange="affiche_languee(form)">
					<?php
						for ($i=0; $i<=5; $i++)
						{
							echo"<option id='$i' value='$i'>$i</option>";
						}
					?>
				</select>
				
				<div id="languee1" name="languee1"></div>
			</fieldset>
			
			<fieldset>
				<legend>Nombre langues lues</legend>
				<select id="languel" name="languel" onChange="affiche_languel(form)">
					<?php
						for ($i=0; $i<=5; $i++)
						{
							echo"<option id='$i' value='$i'>$i</option>";
						}
					?>
				</select>
				
				<div id="languel1" name="languel1"></div>
			</fieldset>
		</fieldset>
		
		<br>
		
		<fieldset>
			<legend>
				Expériences Professionnelles:
			</legend>
		   
			<table>
				<tbody><tr>
					<td>
						Nom entreprise:
					</td>
					<td>
						<input name="nomEntrep" size="20" type="text">
					</td>
				</tr>
				
				<tr><td><br></td></tr>
				
				<tr>
					<td>
						Date de début:
					</td>
					<td>
						<input name="dateDeb" size="20" type="text"> (mm/aaaa)
					</td>
				</tr>
				
				<tr><td><br></td></tr>
				
				<tr>
					<td>
						Date de fin:
					</td>
					<td>
						<input name="dateFin" size="20" type="text"> (mm/aaaa)
					</td>
				</tr>
				<tr><td><br></td></tr>
				
				<tr>
					<td>
						Ville:
					</td>
					<td>
						<input name="villeEntrep" size="20" type="text"> 
					</td>
				</tr>
				
				<tr><td><br></td></tr>
				
				<tr>
					<td>
						Description:
					</td>
					<td>
						<textarea rows="10" cols="50">				</textarea>
					</td>
				</tr>
			</tbody></table>	
		</fieldset>
		
		<br>
		
		<fieldset>
			<legend>
				Travaux réalisés:
			</legend>
		   
			<table>
				<tbody><tr>
					<td>
						Titre:
					</td>
					<td>
						<input name="nomEntrep" size="20" type="text">
					</td>
				</tr>
				
				<tr><td><br></td></tr>
				
				<tr>
					<td>
						Année de la réalisation:
					</td>
					<td>
						<input name="dateDeb" size="20" type="text"> 
					</td>
				</tr>
				
			  <tr><td><br></td></tr>
				
				<tr>
					<td>
						Description:
					</td>
					<td>
						<textarea rows="10" cols="50">				</textarea>
					</td>
				</tr>
			</tbody></table>	
		</fieldset>
		
		<br>
		
		<fieldset>
			<legend>
				Divers:
			</legend>
		   
			<table>
				<tbody><tr>
					<td>
						Nom:
					</td>
					<td>
						<input name="nomEntrep" size="20" type="text">
					</td>
				</tr>
				
				<tr><td><br></td></tr>
					   
				<tr>
					<td>
						Description:
					</td>
					<td>
						<textarea rows="5" cols="30">				</textarea>
					</td>
				</tr>
			</tbody></table>	
		</fieldset>
			
			<br/><br/><br/>
	
			<fieldset style="text-align:center">
				<legend>Envoyer votre CV</legend>
				<input type="submit" value="Valider votre CV" />
				<input type="reset" value="Annuler la saisie" />
			</fieldset>
		</form>
		
		</div>
	
	</body>
</html>





Le code qui va générer mon XML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
	<?php

		$title = $_POST["titreCV"];
		$civilite = $_POST["civilite"];
		$nom = $_POST["nom"];
		$prenom = $_POST["prenom"];
		$age = $_POST["age"];
		$numRue = $_POST["numRue"];
		$rue = $_POST["rue"];
		$ville = $_POST["ville"];
		$cp = $_POST["cp"];
		$pays = $_POST["pays"];
		$tel = $_POST["tel"];
		$mail = $_POST["mail"];
		$web = $_POST["web"];
		$nb_diplome = $_POST["nb_diplome"];
		$r = 0;
		
		for ($i=0; $i<=$nb_diplome; $i++)
		{
			$anneeobtention = $_POST["anneeObtDiplome$i"];
			$intitulediplome = $_POST["intituleDiplome$i"];
			$villeobtention = $_POST["villeObtention$i"];
			
			$diplome = "<diplome>
							<annee_obtention>$anneeobtention</annee_obtention>
							<intitule_diplome>$intitulediplome</intitule_diplome>
							<ville_obtention>$villeobtention</ville_obtention>
						</diplome>";
			echo $diplome;
		}
		$vide = "";
		
		/*if ( $title == $vide or $link == $vide or $date == $vide){
		Echo "<b>Veuillez remplire toute les information demander</b><br><br>
		<a href=\"form.php\">Retour</a>";
		} else {
		
		Echo "$title <br> $link <br> $date";*/
		
		$monxml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>
					<cvs>
						<cv>
							<titre_cv>$title</titre_cv>
							
							<info_perso>
								<civilite>$civilite</civilite>
								<nom>$nom</nom>
								<prenom>$prenom</prenom>
								<age>$age</age>
								<adresse>
									<numero>$numRue</numero>
									<rue>$rue</rue>
									<ville code_postal='$cp'>$ville</ville>
									<pays>$pays</pays>
								</adresse>
								<numero_telephone>$tel</numero_telephone>
								<email>$mail</email>
								<site_web>$web</site_web>
								
							</info_perso>
							
							<diplomes>
							//C'EST À CE NIVEAU QU'IL FAUT QUE JE PUISSE INSERER LES BALISES DU DIPLOMES ET JE NE SAIS VRAIMENT PAS COMMENT FAIRE		
							</diplomes>
							
							<formation>
								<annee_debut></annee_debut>
								<annee_fin></annee_fin>
								<nom_formation></nom_formation>
								<nom_etbalissement></nom_etbalissement>
							</formation>
							
							<savoir_faire>
								<langues_parlee>
									<nom_parlee></nom_parlee>
								</langues_parlee>
								<langues_ecrites>
									<nom_ecrites></nom_ecrites>
								</langues_ecrites>
								<competence_metier>
									<nom_competence></nom_competence>
								</competence_metier>
							</savoir_faire>
							
							<experience_pro>
								<nom_entreprise debut='' fin=''></nom_entreprise>
								<ville></ville>
								<description></description>
								<!--<mois_debut></mois_debut>
								<annee_debut></annee_debut>
								<mois_fin></mois_fin>
								<annee_fin></annee_fin>-->
							</experience_pro>
							
							<travaux_realises>
								<contenu_travaux>
									<titre_travaux>200</titre_travaux>
									<annee_travaux></annee_travaux>
									<description></description>
								</contenu_travaux>
							</travaux_realises>

							
							<divers>
								<contenu>
									<nom></nom>
									<description></description>
								</contenu>
							</divers>
							
							
							
						</cv>
					</cvs>";
		file_put_contents("news2.xml",$monxml);
		echo'<script language="Javascript">
		alert("CV créé avec succès !");
		window.location.replace("news2.xml");
		</script>';
		//}
	
	?>

</body>
</html>



J'ai volontairement omis de saisir les variables dans la fin du document car cela fonctionnera sur le même système que les diplômes. Donc si il y a possibilité de résoudre les diplômes, ça débloquera le reste du document aussi puisque l'on fonctionnera sur le même principe.


Je vous remercie d'avance en espérant que quelqu'un réussira à m'aiguiller, car là je désespère.

Merci

Arnaud S.
Modifié par bibi-arnaud (01 Jul 2008 - 16:31)
Mets des crochets aux variables de formulaire qui sont dupliqués, comme ça tu récupéreras un tableau dans $_POST. Ça doit pouvoir simplifier ton problème si j'ai bien compris.
Surfoo a écrit :
Mets des crochets aux variables de formulaire qui sont dupliqués, comme ça tu récupéreras un tableau dans $_POST. Ça doit pouvoir simplifier ton problème si j'ai bien compris.


Il faudrait que je les mettes à quel endroit exactement les crochets ?
Après j'arriverais à rentrer dans ma variable $monxml tous les diplômes créés ?
C'est simple à voir, il suffit à la place de


for ($i=0; $i<=$nb_diplome; $i++)

{

	$anneeobtention = $_POST["anneeObtDiplome$i"];

	$intitulediplome = $_POST["intituleDiplome$i"];

	$villeobtention = $_POST["villeObtention$i"];

			

	$diplome = "<diplome>

					  <annee_obtention>$anneeobtention</annee_obtention>

					  <intitule_diplome>$intitulediplome</intitule_diplome>

					  <ville_obtention>$villeobtention</ville_obtention>

			  </diplome>";

	echo $diplome;

}


D'avoir


for ($i=0; $i<=$nb_diplome; $i++)

{

	$anneeobtention = $_POST["anneeObtDiplome$i"];

	$intitulediplome = $_POST["intituleDiplome$i"];

	$villeobtention = $_POST["villeObtention$i"];

			

	$diplome .= "<diplome>

					  <annee_obtention>$anneeobtention</annee_obtention>

					  <intitule_diplome>$intitulediplome</intitule_diplome>

					  <ville_obtention>$villeobtention</ville_obtention>

			  </diplome>";

	echo $diplome;

}


J'ai rajouté un "." (point) devant le signe "=" (égale) de la valeur de ta variable $diplome.

Voilà un autre exemple pour comprendre :


$ton_xml .= "quelque chose"; 



$ton_xml .= " de bizarre";



echo $ton_xml;



//$ton_xml donne : "quelque chose de bizarre"

Modifié par Super_baloo8 (01 Jul 2008 - 16:18)
Merci Super_baloo8, ça fonctionne !!

TU me sauves la vie là Smiley lol Smiley lol Smiley lol

J'avais essayé les trucs les plus tordus, mais à aucun moment je n'avais pensé à ça tout simplement.
Comme quoi à essayer de faire compliquer, de créer des boucles à tire la rigo .... on en oublie l'essentiel et les bases les plus simples.


En tout cas merci beaucoup, tu m'as rendu un grand service.

Arnaud S.