Requêtes sql sans écraser les données
Bonjour tout le monde !
Je travaille sur un script php censé alimenter ma base de données à partir d'une "datagrid" créée avec Handsontable, mais là n'est pas le soucis.
Je voudrais que ce script ajoute à ma base de données les nouvelles données or ces dernières écrasaient les anciennes. Après de nombreuses heures passées dessus, j'ai réussi à réaliser cela sur une des tables mais je ne comprends pas pourquoi la seconde n'est pas mise à jour du tout.
De plus, mon code n'est probablement pas optimisé mais c'est la seule solution qui m'est venue.
Code:
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 {
session_start();
require_once('./lib/demo/php/functions.php');
$db = getConnection();
$idMax = $db -> query('SELECT max(ID) FROM COMPETENCES');
$result = $idMax -> fetch();
$colMap = array(
0 => 'LIBELLE',
1 => 'DESCRIPTION',
2 => 'CODE'
);
if (isset($_GET['data']) && $_GET['data']) {
for ($r = 0, $rlen = count($_GET['data']); $r < $rlen; $r++) {
$rowId = $r + 1;
for ($c = 0, $clen = count($_GET['data'][$r]); $c < $clen; $c++) {
if (!isset($colMap[$c])) {
continue;
}
$newVal = $_GET['data'][$r][$c];
$select = $db -> prepare('SELECT ID FROM COMPETENCES WHERE ID= ? LIMIT 1');
$select2 = $db -> prepare('SELECT ID FROM DESCRIPTION WHERE ID= ? LIMIT 1');
$select -> execute(array($rowId));
$select2 -> execute(array($rowId));
if ($row = $select->fetch() && $row = $select2->fetch()) {
$query = $db->prepare('UPDATE COMPETENCES SET `' . $colMap[$c] . '` = :newVal WHERE ID = :id');
$query2 = $db->prepare('UPDATE DESCRIPTION SET `' . $colMap[$c] . '` = :newVal2 WHERE ID = :id');
} else {
$query = $db->prepare('INSERT INTO COMPETENCES (ID, `' . $colMap[$c] . '`) VALUES(:id, :newVal)');
$query2 = $db->prepare('INSERT INTO DESCRIPTION (ID, `' . $colMap[$c] . '`) VALUES(:id, :newVal)');
}
$query->bindValue(':id', $result, PDO::PARAM_INT);
$query2->bindValue(':id', $result, PDO::PARAM_INT);
$query->bindValue(':newVal', $newVal, PDO::PARAM_STR);
$query2->bindValue(':newVal', $newVal, PDO::PARAM_STR);
$query->execute();
$query2->execute();
}
}
}
$out = array(
'result' => 'ok'
);
echo json_encode($out);
closeConnection($db);
}
catch (PDOException $e) {
print 'Exception : ' . $e->getMessage();
}
?> |
Seule la table COMPETENCES est alimentée.
Je sollicite donc votre aide pour m'aider à résoudre ce problème qui m'échappe totalement !
N'hésitez pas à me demander plus de précisions, le problème n'étant peut être pas assez bien synthétisé :)