Insertion en bdd postgre et parse d'un string en date
Posté : 22 déc. 2017, 11:14
Bonjour à tous,
Suite à votre aide j'ai maintenant le résultat escompté.
J'ai fait ma boucle afin d'afficher mes 14 tableaux.
Maintenant ce que je souhaiterai faire c'est poussé mes données en bdd.
Finalement à la place d'une seule tables il y en a en fait 14, une par type.
Elles ont toutes la même structures (id, temps, valeur).
Voici mon code:
Ce que je souhaiterai savoir c'est est-ce possible d'ajouter directement tout ce qui est dans la variable $sql en base en une fois ou faut-il faire une insertion ligne par ligne lorsque je suis dans le foreach?
Je n'arrive pas trop à voir où je dois me positionner afin de faire ma requête!
Pourriez-vous jsute me dire où je dois me positionner afin de la faire et si je dois faire ligne par ligne ou s'il y a un moyen d'envoyer ce qu'il y a dans $sql et que cela me crée tout de même toutes les lignes séparément.
JE vous remercie.
Suite à votre aide j'ai maintenant le résultat escompté.
J'ai fait ma boucle afin d'afficher mes 14 tableaux.
Maintenant ce que je souhaiterai faire c'est poussé mes données en bdd.
Finalement à la place d'une seule tables il y en a en fait 14, une par type.
Elles ont toutes la même structures (id, temps, valeur).
Voici mon code:
Code : Tout sélectionner
<h1>Gestion des compteurs d'eau</h1>
<main>
<?php
$dossier = glob('csv/*'); // ou bien 'csv/*.[cC][sS][vV]' pour aussi limiter à l'extension csv
if(!$nb_fichier = count($dossier))
echo "Il n'y a aucun fichier dans le dossier";
else
echo "Il y a <strong> $nb_fichier </strong> fichier(s) dans le dossier";
?>
</main>
<div id="rslt">
<ul>
<?php
foreach($dossier as $fichier) {
printf('<li><a href="?fichier=%s">%s</a></li>', urlencode($fichier), pathinfo($fichier, PATHINFO_FILENAME));
}
?>
</ul>
</div>
<?php
if(!empty($_GET['fichier']) && in_array($fichier=$_GET['fichier'], $dossier)) {
?>
<div id="rslt">
<?php printf('<pre>Sélectionné: <a href="%s" target="_blank">%s</a><br>', $fichier, pathinfo($fichier, PATHINFO_FILENAME));
?>
</div>
<?php
$lignes = file($fichier);
?>
<div id="boucle">
<?php
for($j=3;$j<=393;$j=($j+30))
{
$tableau = [];
$dates = array_filter(str_getcsv($lignes[$j], ';'));
$type = array_shift($dates);
foreach($dates as $i => $date) {
// changer jj/mm/aaaa en aaaa-mm-jj pour MySQL
$dates[$i] = implode('-', array_reverse(explode('/',$date))); // un $pdo->quote($date) serait bien
}
$heures = array_slice($lignes, $j+1, 24); // les 24 lignes contenant les valeures de chacune des heures
foreach($heures as $ligne_valeures) {
$ligne_valeures = str_getcsv($ligne_valeures, ';');
$heure = intval(array_shift($ligne_valeures)); //enlever l'heure des valeures
foreach($ligne_valeures as $i => $nb_procs) {
if(!isset($dates[$i])) continue;
$tableau[] = [
'id' => 'NULL',
'type' => "'$type'", // faudrait préférer $pdo->quote($type) ou une requête préparée
'temps' => sprintf("'%s %02d:00:00'", $dates[$i], $heure),
'valeur' => intval($nb_procs),
];
}
}
?>
<div id="rslt1">
<?php
$sql = [];
foreach($tableau as $insert) {
$sql[] = "\n(" . implode(', ', $insert) . ')';
}
$sql = 'INSERT INTO releve (id, type, temps, valeur) VALUES ' . implode(',', $sql);
echo "<pre>$sql\n\n</pre></div>";
}
?>
</div>
<?php
echo '</pre>';
}
Je n'arrive pas trop à voir où je dois me positionner afin de faire ma requête!
Pourriez-vous jsute me dire où je dois me positionner afin de la faire et si je dois faire ligne par ligne ou s'il y a un moyen d'envoyer ce qu'il y a dans $sql et que cela me crée tout de même toutes les lignes séparément.
JE vous remercie.