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 :
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 :
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 :
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):
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
Partager