Ajouter des champs texte

Résolu/Fermé
basttov - 27 août 2007 à 13:10
 basttov - 28 août 2007 à 19:21
Bonsoir voilà, j'ai voulu récuperer le contenu des champs textes dynamiques dans un formuliare puis l'inserer dans la base de donnees mysql ;
selon le besoin je clique sur le bouton ajouter et un champ de texte s'ajoute ,le probleme c que je veux recuperer le contenu des champs ajoutés puis l'inserer dans une table mysql;
voici le code si dessous et merci bien j'ai besoin de votre aide:

<button onClick="javascript:addSelect();" type="button">Ajouter Patente </button>

<!-- Création d'une liste modèle, qui ne sera pas visible -->
<div id="divCible"> </strong><strong><strong>Patente1</s
trong> <strong> :</stron
g>
<input type=text size=20 id="select_patente" name="patente">
<strong>   Adres
se1  :</strong> 
<textarea id="select_adresse" name="adresee">
</div>
<?php
echo "<script type=\"text/javascript\">\n";

echo " var i=0;

function addSelect()
{
i++;

// On récupère l'endroit où devra être ajouté la liste

var divCible = document.getElementById(\"divCible\");

// On récupère la liste modèle

var selModele = document.getElementById(\"select_patente\");
var selModele2 = document.getElementById(\"select_adresse\");

// On la clone dans une nouvelle variable

var nvxSel = selModele.cloneNode(true);
var nvxSel2 = selModele2.cloneNode(true);
// (pour la présentation, on crée un retour à la ligne)

var br = document.createElement(\"br\");

// On adapte les attributs de la nouvelle liste : nom, id et affichage
nvxSel.name = \"patente\" + i;
nvxSel.id = \"patente\" + i;
nvxSel.style.display = \"inline\";
nvxSel2.name = \"adresse\" + i;
nvxSel2.id = \"adresse\" + i;
nvxSel2.style.display = \"inline\";

// On ajoute tout ça à l'emplacement voulu
Ajouter();
nvxSel.value='';
divCible.appendChild(nvxSel);
Ajouter2();
nvxSel2.value='';
divCible.appendChild(nvxSel2);
divCible.appendChild(br);

var nlignes = 1;
function Ajouter(){
nlignes++;
divCible.insertAdjacentHTML('BeforeEnd','<str
ong> <br>Patente '+nlignes+'  :</strong>')
return nlignes;
};
function Ajouter2(){
divCible.insertAdjacentHTML('BeforeEnd','&nb
sp;    &
nbsp;<strong>Adresse' +nlignes+'  :</strong>')
};
echo "</script>\n";
exit();
?>

10 réponses

Salut,

Qu'est ce qui ne marche pas ? Donnes nous plus de précisions sur les erreurs qui sont données lors de l'exécution du script.

Permets moi qqs remarques:

- mets ton Javascript entre les balises <head> </head> de ta page html et écris le "normalement" plutôt que de le créer par des echo en php. Cela t'évitera tous les échappements \", et donc plus facile a débugger.

- insertAdjacentHTML n'est d'après ce que j'ai lu compatible seulement en IE, utilises plutôt innerHTML
1
J'ai repris ton code, il ne marche pas chez moi, il y avait pas mal d'erreurs, manque de point virgules etc....

donc si tu veux essayes celui là, j'ai remis le Javascript normalement entre les balises head et ecris sans le php (c'est beaucoup plus facile à débugger !!)

Donc le code ci dessous fonctionne mais seulement sous Internet Explorer à cause de la fonction:
insertAdjacentHTML qui n'est pas reconnue par Mozilla firefox

<html>
<head>
<script language="javascript" type="text/javascript">
 var i=0;
function addSelect(){

i++;
// On récupère l'endroit où devra être ajouté la liste
var divCible = document.getElementById("divCible");
// On récupère la liste modèle
var selModele = document.getElementById("select_patente");
var selModele2 = document.getElementById("select_adresse");
// On la clone dans une nouvelle variable

var nvxSel = selModele.cloneNode(true);
var nvxSel2 = selModele2.cloneNode(true);
// (pour la présentation, on crée un retour à la ligne)

var br = document.createElement("<br>");

// On adapte les attributs de la nouvelle liste : nom, id et affichage
nvxSel.name = "patente"+i;
nvxSel.id = "patente"+i;
nvxSel.style.display = "inline";
nvxSel2.name = "adresse"+i;
nvxSel2.id = "adresse"+i;
nvxSel2.style.display = "inline";

// On ajoute tout ça à l'emplacement voulu
Ajouter();
nvxSel.value='';
divCible.appendChild(nvxSel);
Ajouter2();
nvxSel2.value='';
divCible.appendChild(nvxSel2);
divCible.appendChild(br);

}

var nlignes = 1;
function Ajouter(){
nlignes++;
divCible.insertAdjacentHTML('BeforeEnd','<strong> <br>Patente'+nlignes+'  :</strong>');
/*divCible.innerHTML='<strong> <br>Patente'+nlignes+'  :</strong>';*/
return nlignes;
}
function Ajouter2(){
divCible.insertAdjacentHTML('BeforeEnd','&nbsp;&nbsp;<strong>Adresse'+nlignes+':</strong>');
/*divCible.innerHTML='&nbsp;&nbsp;<strong>Adresse'+nlignes+':</strong>';*/
}
</script>
</head>

<body>
 <form name="form1" method="post" action="traitement.php">
 
 <button onClick="javascript:addSelect();" type="button">Ajouter Patente </button>

<!-- Création d'une liste modèle, qui ne sera pas visible -->
<div id="divCible"> <strong>Patente1:</strong>
<input type="text" size="20" id="select_patente" name="patente">
<strong>   Adresse1  :</strong> 
<textarea id="select_adresse" name="adresse"></textarea>
</div>
</form>
</body>
</html>
1
je vous remercie Alain42 de vous voir interessé à mon prob,pourtant
tu peux copier le code,ca marche tres bien,je clique sur le bouton ajouter un champs text s'ajoute ici pas de probleme,mais il me faut me faut une facon pour recuperer le contenu de ces champs textes ajoutées; vous y etes?
j'ai deja ecris le code en javascript mais peut importe le language avec lequel le code est ecrit,mob prob c coment puis je recuperer le contenu de ces champs ajoutées soit en javascript soit en php.
je vous salut de ma part;merci encore une fois.
0
oui ca je le sais,ca a marché aussi chez moi avec javascript ainsi qu'avec php;
le probleme c que je veux recuperer le contenu (la valeur ) de chaque champs ajoutée vous y etes?
par exemple le contenu de patente2 adresse2 et patente3 adresse3 je dois le recuperer dans une variable puis l'inserer dans mysql;
c'est la ou je peux rien faire;je crois maintenant que tu as assimilé le prob et merci d'avance .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pour répondre à ta question:

dans la balise <form tu mets action="enregistrement.php"


et voici le code du fichier enregistrement.php: je n'ai pas pu tester la partie connexion à la base

<?php
// le formulaire poste les valeurs de tous les champs dans un array $_POST avec comme cle le nom du champ
$array_patente = array();
$array_adresse = array();
foreach($_POST as $cle=>$value){
	//on recupere les valeurs des champs qui commencent par "patente" et on les stoke dans un array
	if(substr($cle,0,7)=="patente"){
		$array_patente[]=$value;
	}
	//on recupere les valeurs des champs qui commencent par "adresse" et on les stoke dans un array
	if(substr($cle,0,7)=="adresse"){
		$array_adresse[]=$value;
	}
}

//print_r($_POST);
//print_r($array_patente);
//print_r($array_adresse);

$cnx=mysql_connect("host","login","password");// la tu mets tes codes
$db=mysql_select_db("base",$cnx);// le nom de ta base
$nb=0;
for ($i=0,$i<sizeof($array_patente),$i++){
$req="INSERT INTO ta_table (patente,adresse) VALUES('".$array_patente[$i]."','".$array_adresse[$i].")";
$res=mysql_query($req);
$nb++;
}
echo "<HTML><BODY>".$nb." enregistrements ont été faits dans la base !</HTML></BODY>";
?>
0
merci,j'ai essayé
mais ca me donne une requete vide pas d'insertion dans la base de données,
donc il n'arrive pas à recuperer le contenu de ces champs.
je vais essayé d'ameliorer ce code ,et si t'as une idée ca serait la bienvenue.
0
Essaye en décommantant ces trois lignes pour voir ce que tu reçois

//print_r($_POST);
//print_r($array_patente);
//print_r($array_adresse);
0
excusez moi,je reprends ,je suis parvenu à recuperer le contenu dans les deus tableaux $array_patente et $array_adresee
avec le meme code ca marche bien mais le prob ici je crois sur la syntaxe de la requete ,car il me donne une requete vide pas d'insertion ds la base de donnèes.
0
Essaye en mettant un echo sur la requette:
et en rajoutant les or die (.....) ce qui devrait te sortir des messages d'erreur de connexion à la BDD

$cnx=mysql_connect("host","login","password") or die (mysql_error());// la tu mets tes codes
$db=mysql_select_db("base",$cnx) or die (mysql_error());// le nom de ta base
$nb=0;
for ($i=0,$i<sizeof($array_patente),$i++){
$req="INSERT INTO ta_table (patente,adresse) VALUES('".$array_patente[$i]."','".$array_adresse[$i].")";

echo "<br>".$req;

$res=mysql_query($req) or die (mysql_error());
$nb++;
}
0
merci beaucoup alain42,le probleme est resolu ,c' etait comme je le vous ai mentionné,sur la syntaxe de la requete il fallait faire

$req="INSERT INTO ta_table (patente,adresse)
VALUES('$array_patente[$i]','$array_adresse[$i]');";

au lieu de:

$req="INSERT INTO ta_table (patente,adresse)
VALUES('".$array_patente[$i]."','".$array_adresse[$i].")";

merci encore une fois pour votre soutien et suivi ,restons en contact
taiba_net@hotmail.com .........................

Probleme Resolu
0