Bonjour, J'ai suivi le sujet sur ce lien: dont le thème est calcul automatique dans un tableau dynamique. ke l'ai réadapté à mon code qui est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
<?php
try
{
    $bdd=new PDO('mysql:host=127.0.0.1;dbname=my_ddb','root','');
 	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 	$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
$vst = isset($_POST['vst']) ? $_POST['vst'] : NULL;
$ve = isset($_POST['ve']) ? $_POST['ve'] : NULL;
$value = array();
$i = 0;
 
while(isset($_POST['vst'][$i++])) {
 $value[] = "('', '".$_POST['vst'][$i]."', '".$_POST['ve'][$i]."')";
}
 
$datas = implode(",",$value);
//$value = substr($value, 0, -1); // Pour virer la dernière virgule
$sql = "INSERT INTO tableau(val_st,val_et) ".$datas;
try{
  $req=$bdd->prepare($sql);
  $req->execute();
}catch(Exception $e){
  echo "Erreur :".$e->getMessage();
  echo "<br>Requete :".$sql;
 
 
}
 
 
?>
 
<!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>Une interface de formulaire à base de tableau dynamique</title>
<script language="JavaScript" src="dtable.js"></script>
</head>
 
<body>
<form action="" method="POST">
<table class="dTable">
	<thead>
    	<tr>
        	<th>Valeurs sous test</th>
            <th>Valeurs étalon</th>
            <th>Ecart</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tfoot>
    	<tr>
        	<th colspan="5"><a href="#" onclick="addLigne(this)">Ajouter une ligne</a></th>
        </tr>
    </tfoot>
    <tbody>
    	<tr>
        	<td><input name="vst[]" id="vst[]" type="text" /></td>
            <td><input name="ve[]" id="ve[]" type="text" value = "" onkeyup = "calcul(this);" /></td>
            <td><input name="ecart[]" id="ecart[]" type="text" readonly="readonly" /></td>
 
            <td><a href="#" onclick="delLigne(this)">Supp</a></td>
        </tr>
    </tbody>
</table>
<input type="submit" value="Ok">
<form>
 
 
</body>
</html>
Mon code js :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 
/*Trouve le tag "parentTagName" parent de "element"*/
function getParent(element, parentTagName)
{
	if(!element)
	return null;
	else if(element.nodeType==1 && element.tagName.toLowerCase()==parentTagName.toLowerCase())
	return element;
	else
	return getParent(element.parentNode, parentTagName);
}
 
/*Ajout d'une ligne*/
function addLigne(link)
{
	//1. récupérerle node "TABLE" à manipuler
	var td=link.parentNode;
	var table= getParent(td,'TABLE');
	//2. On va manipuler le TBODY
	var tbody=table.tBodies[0];
	//3. On clone laligne de référence
	var newTr = tbody.rows[0].cloneNode(true);
	tbody.appendChild(newTr);
	/*Un dernier problème subsiste : lorsqu'on clone cette ligne, son style est cloné également. Toutes les lignes sont donc invisibles ! Il faut ajouter à la fin de addLigne de quoi les remettre visibles */
	if ( document.all )
		newTr.style.display = "block"; // pour IE
	else
		newTr.style.display = "table-row"; // pour Gecko
}
 
 
/*Supprimer une ligne*/
function delLigne(link) {
	// 1. récuperer le node "TABLE" à manipuler
	var td = link.parentNode;
	var table = getParent(td, 'TABLE');
	// 2. récuperer le TBODY
	var tbody = table.tBodies[0];
	// 3. Supprimer le TR
	tbody.removeChild(getParent(td, 'TR'));
}
/*On va donc masquer la première ligne avec la propriété CSS display="none" et en ajoute une vide supplémentaire.*/
 
window.onload = dtableInit;
/* initialise le script */
function dtableInit() {
	var table = document.getElementsByTagName('TABLE');
	for ( var i = 0; i < table.length; i++ ) {
		// on récupère tous les tableaux dynamiques
		if ( table[i].className == 'dTable' ) {
			var tbody = table[i].tBodies[0];
			var newTr = tbody.rows[0].cloneNode(true);
			// on masque la première ligne du tbody (la ligne de reference)
			tbody.rows[0].style.display = 'none';
			// on en ajoute une
			tbody.appendChild(newTr);
		}
	}
}
 
 
function calcul(obj){
  // recherche TD parente de l'input (obj) passé en paramètre
  var oTD = obj.parentNode;
  // recherche TR parente de la TD
  var oTR = oTD.parentNode;
  // récup de la position de la TD sur la ligne
  var ind = oTD.cellIndex;
  // récup. TD précédente
  var oTDavant = oTR.cells[ind-1];
  // récup. TD suivante
  var oTDapres = oTR.cells[ind+1];
  // récup de l'INPUT de la TD précédente
  var oInputAvant = oTDavant.firstChild;
  // récup. de l'INPUT de la TD suivante
  var oInputApres = oTDapres.firstChild;
  // OUF!!! enfin le calcul
  oInputApres.value = oInputAvant.value - obj.value;
}
Je tien à rappeler que mon code js marche. le problème c'est l'enregistrement des données entrées dans ma base de données. j'utilise WampServer 3.0.6.
Quand j'exécute mon code PHP, j'ai le message suivant au chargement de la page:
Erreur :SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de '' � la ligne 1
Requete :INSERT INTO tableau(val_st,val_et)

quand je rentre les valeurs dans les dux premiers input et que je valide avec mon submit "ok", j'ai le message d'erreur suivant:
Notice: Undefined offset: 2 in C:\wamp64\www\tableau\index.php on line 16

et le premier message d'erreur devient:
Erreur :SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe pr�s de ''', '12', '13'),('', '', '')' � la ligne 1
Requete :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT INTO tableau(val_st,val_et) ('', '12', '13'),('', '', '')

12 et 13 représentent les valeurs entrées dans les deux input dont le name est vst et ve

Voici mon code SQL concernant la table tableau en bdd (la structure de ma table tableau si vous voulez):

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE `tableau` (
  `id_tableau` int(11) NOT NULL,
  `val_st` text NOT NULL COMMENT 'valeurs sous test',
  `val_et` text NOT NULL COMMENT 'valeurs étalon',
  `ecart` text NOT NULL COMMENT 'écacrts',
  `id_operation` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Voila ça fait des jours que je cherche enfin à insérer les valeurs du tableau dans la bdd. la troixième colonne n'est pas importante, elle effectu juste un calcul de difference entre les deux premieres colonnes, juste un aperçu pour l'utilisateur, le calcul s'effectuera au niveau de la bdd..
voila j'espere avoir donné suffisament d'info, merci de bien vouloir m'aider, ça fait des jour que je cherche, et debutant en php que je suis je n'arrive pas à trouver une solution, j'ai parcouru beaucoup de forum, aujourd'hui je viens à vous...
merci de bien vouloir m'aider ! je compte sur vous