En fait c'est bon, en réésayant ça a fonctionné. Je pense que j'ai du oublier de relancer Apache ou une connerie comme ca, donc mes changements de paramètres ont pas été pris en compte.
En revanche, j'obtiens désormais une autre erreur un peu plus loin.
Une fois que ma page PHP m'indique que les uploads ont été réalisés avec succès, il faut maintenant se servir de ces fichiers pour modifier les tables de la base de données qui correspondent aux uploads. Donc en dessous de mes phrases "uploads réalisé avec succès" je clique sur "valider" qui amène sur une page qui traite les informations et modifie la BD en conséquence. Mais après pas moins de 3heures de chargement, j'arrive sur une erreur :
Notice: Undefined offset: 14 in C:\wamp\www\vespa_b1\administration\fill_base.php on line 187
En me renseignant un peu sur internet, je vois qu'il s'agit d'un problème d'effet de bord ( ??? ). En gros si j'ai bien compris, c'est lorsqu'une fonction modifie une valeur qui est autre que sa valeur output. Enfin, ca ne m'avance pas trop..
J'ai envie de me dire qu'il ne s'agit "que" d'une erreur Notice et donc normalement ma BD devrait être modifiée comme il faut, non ? Mais bon, une erreur c'est pas très beau, alors j'aimerai savoir si vous savez d'où pourrait provenir cette erreur encore pour ma part inconnue au bataillon ?
Voici mon fichier fill_base.php :
<?php
include_once('../include/header.php');
?>
<?php
$files_number = $_POST['files_number'];
$array_nom_region = explode("|", $_POST['array_nom_region']);
$array_id_region = explode("|", $_POST['array_id_region']);
$separateur = $_POST['separateur'];
// On vérifie qu'au moins une région a été entrée
if(!$files_number){
echo '<p class="erreur"> Veuillez saisir au moins une région dans le <a href="update_base.php">formulaire</a></p>';
include('../include/footer.php');
exit;
}
// On vérifie que le champs année a bien été renseigné
if(isset($_POST['annee']) and $_POST['annee'] != 0){
$annee_courrant = $_POST['annee'];
}
else{
echo '<p class="erreur"> Veuillez entrer l\'année dans le <a href="update_base.php">formulaire</a></p>';
include('../include/footer.php');
exit;
}
// On ouvre une transaction
mysql_query('BEGIN');
// On supprime de la BDD les clients des régions entrées
mysql_query('TRUNCATE TABLE `client'.$annee_courrant.'`');
while($files_number){
// ********************************************************************
// PARTIE : Lecture du fichier tempo.csv et enregistrement des données dans un tableau
// ********************************************************************
$nom_region_courrant = $array_nom_region[$files_number - 1];
$array_id_region_courrant = explode("_",$array_id_region[$files_number - 1]);
$id_region_courrant = $array_id_region_courrant[0];
if(file_exists('../upload/' . $nom_region_courrant . '.csv')){
// ouverture du fichier en mode lecture (r = ready)
$fichier = fopen('../upload/' . $nom_region_courrant . '.csv',"r+");
if(!$fichier){
echo ' <p class="erreur">
Veuillez vérifier que le fichier upload/' . $nom_region_courrant . '.csv existe, possède les bons droits et n\'est pas ouvert.
</p>
<p><br /><div class="faux_bouton">
<a href="update_base.php">Retour</a></div>
</p>';
include('../include/footer.php');
exit;
}
}
else{
echo ' <p class="erreur">
Veuillez vérifier que le fichier upload/' . $nom_region_courrant . '.csv existe et possède les bons droits
</p>
<p><br /><div class="faux_bouton">
<a href="update_base.php">Retour</a></div>
</p>';
include('../include/footer.php');
exit;
}
$reqcreate = "
CREATE TABLE IF NOT EXISTS `client".$annee_courrant."` (
`id_client` mediumint(11) unsigned NOT NULL AUTO_INCREMENT,
`superficie` smallint(11) unsigned DEFAULT NULL,
`personnes` smallint(11) unsigned DEFAULT NULL,
`annee` int(11) NOT NULL,
`id_tarif` int(11) NOT NULL,
`id_versionabo` int(11) NOT NULL,
`id_typeoffre` int(11) NOT NULL,
`id_region` int(11) NOT NULL,
`id_naf` int(11) NOT NULL,
`hph_souscrite` int(11) NOT NULL,
`hpd_souscrite` int(11) NOT NULL,
`hch_souscrite` int(11) NOT NULL,
`hcd_souscrite` int(11) NOT NULL,
`hpe_souscrite` int(11) NOT NULL,
`hce_souscrite` int(11) NOT NULL,
`ja_souscrite` int(11) NOT NULL,
`pte_souscrite` int(11) NOT NULL,
PRIMARY KEY (`id_client`),
KEY `id_region` (`id_region`),
KEY `id_tarif` (`id_tarif`),
KEY `id_versionabo` (`id_versionabo`),
KEY `id_typeoffre` (`id_typeoffre`),
KEY `tarif_naf_pte` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`pte_souscrite`),
KEY `tarif_naf_hce` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`hce_souscrite`),
KEY `tarif_naf_ja` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`ja_souscrite`),
KEY `tarif_naf_hph` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`hph_souscrite`),
KEY `tarif_region_naf` (`id_tarif`,`id_region`,`id_naf`,`id_versionabo`,`id_typeoffre`),
KEY `id_tarif_2` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`),
KEY `tarif_naf_hpd` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`hpd_souscrite`),
KEY `tarif_naf_hpe` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`hpe_souscrite`),
KEY `tarif_naf_hcd` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`hcd_souscrite`),
KEY `tarif_naf_hch` (`id_tarif`,`id_naf`,`id_versionabo`,`id_typeoffre`,`hch_souscrite`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT = 1 ;
";
mysql_query($reqcreate) or die('Requête invalide : ' . mysql_error() . "\n Requête complète : ".$reqcreate."\n");
$reqfk ="
ALTER TABLE `client".$annee_courrant."`
ADD CONSTRAINT `client".$annee_courrant."_ibfk_2` FOREIGN KEY (`id_region`) REFERENCES `region` (`id_region`),
ADD CONSTRAINT `client".$annee_courrant."_ibfk_3` FOREIGN KEY (`id_naf`) REFERENCES `naf` (`id_naf`),
ADD CONSTRAINT `client".$annee_courrant."_ibfk_4` FOREIGN KEY (`id_tarif`) REFERENCES `tarif` (`id_tarif`),
ADD CONSTRAINT `client".$annee_courrant."_ibfk_5` FOREIGN KEY (`id_versionabo`) REFERENCES `versionabo` (`id_versionabo`),
ADD CONSTRAINT `client".$annee_courrant."_ibfk_6` FOREIGN KEY (`id_typeoffre`) REFERENCES `typeoffre` (`id_typeoffre`);
";
mysql_query($reqfk);
// lecture ligne par ligne tant qu'on ne rencontre pas le code: fin de fichier(feof)
$i = 0;
$tableau = array();
fgets($fichier,500);
while(!feof($fichier)){
// l'instruction explode() sépare la ligne en autant de valeurs que de point-virgules rencontrés
// fgets() prend les valeurs dans le fichier et lit 500 caractères par ligne (à adapter)
// $tableau[] est une variable tableau ou array qui va recevoir ce qui est lu dans le fichier
// En fait $tableau[][] contiendra exactement ce que contient la feuille excel initiale avec en premier indice le numéro de la ligne
// (qui commence à 0!) et en second indice le numéro de la colonne (qui commence aussi à 0)
$tableau[$i] = explode($separateur, fgets($fichier,500));
$i++;
}
// fermeture du fichier
fclose($fichier);
//On supprime du serveur le fichier qui vient d'être entré
unlink('../upload/' . $nom_region_courrant . '.csv');
$nblignes = $i - 1;
$array_naf = array();
$array_tarif = array();
$array_version = array();
$array_offre = array();
//Chargement de tous les codes NAF
$req = mysql_query('SELECT id_naf, code_naf FROM naf');
while($result=mysql_fetch_array($req)){
$array_naf[strtolower($result[1])]=(int)$result[0];
}
//Chargement de tous les TARIFS
$req = mysql_query('SELECT id_tarif, nom_tarif FROM tarif');
while($result=mysql_fetch_array($req)){
$array_tarif[strtolower($result[1])]=(int)$result[0];
}
//Chargement de toutes les VERSION
$req = mysql_query('SELECT id_versionabo, nom_version FROM versionabo');
while($result=mysql_fetch_array($req)){
$array_version[strtolower($result[1])]=(int)$result[0];
}
//Chargement de toutes les OFFRE
$req = mysql_query('SELECT id_typeoffre, type_offre FROM typeoffre');
while($result=mysql_fetch_array($req)){
$array_offre[strtolower($result[1])]=(int)$result[0];
}
if(!isset($tableau[1][14]) or isset($tableau[1][15])){
echo '<p class="erreur"> Le fichier ' . $nom_region_courrant . ' n\'est pas valide. Retournez au <a href="update_base.php">formulaire</a> et réessayez avec un fichier valide</p>';
break;
}
else{
// ********************************************************************
// PARTIE : Traitements des données reçues
// ********************************************************************
// On va traiter les données de la variable $tableau ligne par ligne en commencant par la deuxième (ligne d'indice 1 car on ne traite pas la ligne d'en-têtes)
for ($i = 1 ; $i < $nblignes ; $i++){
//On commence par récupérer chacune des valeurs de la ième ligne dans des varibles
//Attention si le fichier excel d'origine a ses colonnes disposées dans un ordre différent de celui-ci, il faut modifier les valeurs du second indice
//de la variable $tableau
$CODE_NAF = $tableau[$i][0];
$LIBELLE_CODE_NAF = $tableau[$i][1];
$TOV = $tableau[$i][2];
$VERSION = $tableau[$i][3];
$SUPERFICIE = (int) $tableau[$i][4];
$NB_PERSONNE = (int) $tableau[$i][5];
$TYPE_OFFRE = $tableau[$i][6];
$HCD_SOUSCRITE = (int) $tableau[$i][7];
$HCE_SOUSCRITE = (int) $tableau[$i][8];
$HCH_SOUSCRITE = (int) $tableau[$i][9];
$HPD_SOUSCRITE = (int) $tableau[$i][10];
$HPE_SOUSCRITE = (int) $tableau[$i][11];
$HPH_SOUSCRITE = (int) $tableau[$i][12];
$JA_SOUSCRITE = (int) $tableau[$i][13];
$PTE_SOUSCRITE = (int) $tableau[$i][14]; //LIGNE 187
//On échappe la chaîne de caractère correspondant au libellé du code naf pour ne pas avoir de problème avec des appostrophes éventuelles
//$LIBELLE_CODE_NAF = mysql_real_escape_string($LIBELLE_CODE_NAF);
set_time_limit(120);
//Pour les 2 paragraphes suivants (respectivement TARIF et NAF) :
//1 - On regarde si la valeur de la ième ligne existe déjà dans la base de donnée en recherchant son id (1ère requête).
//2 - Si elle existe on ne fait rien, sinon on l'ajoute (2ème requête) puis on récupère son id (3ème requête)
//3 - On transtype ensuite l'id récupéré (à l'étape 1 ou 2 suivant les cas) en entier (int)
//TARIF
/*$existTarif = mysql_query('SELECT id_tarif FROM tarif WHERE nom_tarif = "' . $TOV . '" LIMIT 1');
$res_tarif = mysql_fetch_array($existTarif);
$id_tarif_courrant = (int)$res_tarif[0];
//NAF
$existNaf = mysql_query('SELECT id_naf FROM naf WHERE code_naf = "' . $CODE_NAF . '" LIMIT 1');
$res_naf = mysql_fetch_array($existNaf);
$id_naf_courrant = (int)$res_naf[0];
//VERSION
//echo substr($TOV,0,1)."-".$VERSION;
$existversion = mysql_query('SELECT id_versionabo FROM versionabo WHERE lower(nom_version) = lower("' .$VERSION . '") LIMIT 1');
$res_version = mysql_fetch_array($existversion);
$id_version_courrant = (int)$res_version[0];
if($id_version_courrant==0){
echo $VERSION."\n";
}
//TYPE OFFRE
$existoffre = mysql_query('SELECT id_typeoffre FROM typeoffre WHERE type_offre = "' .$TYPE_OFFRE . '" LIMIT 1');
$res_offre = mysql_fetch_array($existoffre);
$id_offre_courrant = (int)$res_offre[0];
//Echec de la récupération du type d'offre. Par défaut on met la version de base
if($id_offre_courrant==0){
if(substr($TOV,0,1)=="J"){
$id_offre_courrant=1;
}
else{
$id_offre_courrant=3;
}
}*/
$id_naf_courrant =$array_naf[strtolower($CODE_NAF)];
if(isset($array_tarif[strtolower($TOV)]))
$id_tarif_courrant = $array_tarif[strtolower($TOV)];
if(isset($array_version[strtolower ($VERSION)]))
$id_version_courrant = $array_version[strtolower ($VERSION)];
if(isset($array_version[strtolower ($TYPE_OFFRE)]))
$id_offre_courrant = $array_offre[strtolower($TYPE_OFFRE)];
elseif(isset($array_offre[strrev(strtolower($TYPE_OFFRE))]))
$id_offre_courrant = $array_offre[strrev(strtolower($TYPE_OFFRE))];
if($id_naf_courrant=="" || !isset($id_naf_courrant))
$id_naf_courrant=1;
if($id_tarif_courrant==0){
if(substr($TOV,0,1)=="J"){
$id_tarif_courrant=1;
}
else{
$id_tarif_courrant=3;
}
}
if($id_version_courrant==0){
if(substr($TOV,0,1)=="J"){
$id_version_courrant=2;
}
else{
$id_version_courrant=3;
}
}
if(!($id_naf_courrant=="" || $id_offre_courrant=="" || $id_region_courrant=="" || $id_tarif_courrant=="" || $id_version_courrant==""
))
{
//CLIENT
//La table client peut maintenant être remplie car on est assuré de l'existence des clés étrangères par l'étape précédente
$req = 'INSERT INTO client'.$annee_courrant.' SET superficie=' . $SUPERFICIE . ', personnes=' . $NB_PERSONNE . ', hph_souscrite=' . $HPH_SOUSCRITE .
', hpd_souscrite=' . $HPD_SOUSCRITE . ',hch_souscrite=' . $HCH_SOUSCRITE . ', hcd_souscrite=' . $HCD_SOUSCRITE .
', hpe_souscrite=' . $HPE_SOUSCRITE . ', hce_souscrite=' . $HCE_SOUSCRITE . ',ja_souscrite=' . $JA_SOUSCRITE .
',pte_souscrite=' . $PTE_SOUSCRITE . ', id_tarif=' . $id_tarif_courrant . ', id_region=' . $id_region_courrant .
', id_naf=' . $id_naf_courrant . ', annee= ' . $annee_courrant .', id_versionabo=' . $id_version_courrant .', id_typeoffre=' .$id_offre_courrant ;
mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n Requête complète : ".$req."\n");
}
}
$files_number-- ;
}
}
// ********************************************************************
// PARTIE : Mise à jour de la table moyennes_toutes_regions
// ********************************************************************
// On commence par vider la table moyennes_toutes_regions, qui sera recalculée à la fin du script
//mysql_query('TRUNCATE TABLE `moyennes_toutes_regions`');
mysql_query('DELETE FROM `moyennes_toutes_regions` WHERE annee = '.$annee_courrant.' ');
// On fait le précalcule des valeurs moyennes et des écart-types
$req_division_tarif = 'SELECT id_division_naf, nom_tarif FROM division, tarif ORDER BY id_division_naf';
$query_division_tarif = mysql_query($req_division_tarif) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req_division_tarif);
while($division_tarif = mysql_fetch_row($query_division_tarif)){
set_time_limit(120);
$req = 'SELECT COUNT(c.id_client) AS NBR_CLIENTS, AVG(c.pte_souscrite), AVG(c.hph_souscrite), AVG(c.hch_souscrite), AVG(c.hpe_souscrite),
AVG(c.hce_souscrite), AVG(c.hpd_souscrite), AVG(c.hcd_souscrite), AVG(c.ja_souscrite),
STDDEV(c.pte_souscrite), STDDEV(c.hph_souscrite), STDDEV(c.hch_souscrite), STDDEV(c.hpe_souscrite),
STDDEV(c.hce_souscrite), STDDEV(c.hpd_souscrite), STDDEV(c.hcd_souscrite), STDDEV(c.ja_souscrite)
FROM client'.$annee_courrant.' c USE INDEX (id_tarif_2), naf n, tarif t
WHERE (t.nom_tarif = "' . $division_tarif[1] . '") AND (t.id_tarif = c.id_tarif)
AND (n.id_division_naf = ' . $division_tarif[0] . ') AND (n.id_naf = c.id_naf)';
$query = mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
$result = mysql_fetch_row($query);
// On fait le précalcule des zéros
$periode = array(1 => 'hce', 2 => 'hpe', 3 => 'hch', 4 => 'hph', 5 => 'hcd', 6 => 'hpd', 7 => 'ja', 8 => 'pte');
$valeurs_zero = array();
for($i = 1 ; $i < 9 ; $i++){
$req_zero = 'SELECT COUNT(c.id_client)
FROM client'.$annee_courrant.' c, naf n, tarif t
WHERE (t.nom_tarif = "' . $division_tarif[1] . '") AND (t.id_tarif = c.id_tarif)
AND (n.id_division_naf = ' . $division_tarif[0] . ') AND (n.id_naf = c.id_naf)
AND ' . $periode[$i] . '_souscrite = 0';
$query_zero = mysql_query($req_zero) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req_zero);
$result_zero = mysql_fetch_row($query_zero);
$valeurs_zero[$i] = $result_zero[0];
}
// On insert dans la BDD
$req_insertion = 'INSERT INTO moyennes_toutes_regions SET id_division_naf = ' . $division_tarif[0] . ', annee = '.$annee_courrant.', nom_tarif = "' . $division_tarif[1] . '", somme = ' . $result[0] .
', avg_pte = ' . (int)$result[1] . ', avg_hph = ' . (int)$result[2] . ', avg_hch = ' . (int)$result[3] . ', avg_hpe = ' . (int)$result[4] . ', avg_hce = ' . (int)$result[5] .
', avg_hpd = ' . (int)$result[6] . ', avg_hcd = ' . (int)$result[7] . ', avg_ja = ' . (int)$result[8] . ', stddev_pte = ' . (int)$result[9] . ', stddev_hph = ' . (int)$result[10] .
', stddev_hch = ' . (int)$result[11] . ', stddev_hpe = ' . (int)$result[12] . ', stddev_hce = ' . (int)$result[13] . ', stddev_hpd = ' . (int)$result[14] .
', stddev_hcd = ' . (int)$result[15] . ', stddev_ja = ' . (int)$result[16] . ', ' . $periode[1] . '_zero = ' . $valeurs_zero[1] .
', ' . $periode[2] . '_zero = ' . $valeurs_zero[2] . ', ' . $periode[3] . '_zero = ' . $valeurs_zero[3] .
', ' . $periode[4] . '_zero = ' . $valeurs_zero[4] . ', ' . $periode[5] . '_zero = ' . $valeurs_zero[5] .
', ' . $periode[6] . '_zero = ' . $valeurs_zero[6] . ', ' . $periode[7] . '_zero = ' . $valeurs_zero[7] .
', ' . $periode[8] . '_zero = ' . $valeurs_zero[8];
mysql_query($req_insertion) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req_insertion);
}
mysql_query('UPDATE version SET date = CURRENT_DATE WHERE id_version = 1');
// On ferme la transaction
mysql_query('COMMIT');
include('../include/footer.php');
?>