Problème code PHP

Résolu
Noune1310 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
Noune1310 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,
J'au un petit souci avec un code en PHP. Je dois faire une petite appli qui importe des données à partir d'un fichier excel dans une base de données. J'ai donc commencer à faire ce bout de code :

<?php
// Test si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['fichiercsv']) AND $_FILES['fichiercsv']['error'] == 0)
{
// Test taille du fichier
if ($_FILES['fichiercsv']['size'] <= 2000000)
{
// Test extension autorisée
$infosfichier = pathinfo($_FILES['fichiercsv']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('csv');
if (in_array($extension_upload, $extensions_autorisees))
{
$fichiercsv = $_FILES['fichiercsv']['tmp_name'] ;

$i=0;
$fichier = fopen($fichiercsv, "r"); //Ouverture du fichier en mode lecture

//lecture ligne par ligne tant qu'on est pas à la fin du fichier
while (!feof($fichier))
{
$ligne = fgets($fichier, 1024); //Récupération de la ligne
$tableau[$i] = explode(';', $ligne); //Récupération des différentes valeurs trouvées dans une ligne
$i++;
}
fclose($fichier); // Fermeture du fichier
$nblignes=$i;

//print_r($tableau) ;

//Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=donneesreporting', 'root', 'root');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

// print_r($tableau[1][5]);

// Les valeurs lues dans le fichier sont insérées dans la BD ligne par ligne
for ($i=1;$i<=$nblignes;$i++)
{
$v1=$tableau[$i][0];
$v2=$tableau[$i][1];
$v3=$tableau[$i][2];
$v4=$tableau[$i][3];
$v5=$tableau[$i][4];
$v6=$tableau[$i][5];
$v7=$tableau[$i][6];
$v8=$tableau[$i][7];
$v9=$tableau[$i][8];
$v10=$tableau[$i][9];
$v11=$tableau[$i][10];
$v12=$tableau[$i][11];
$v13=$tableau[$i][12];
$v14=$tableau[$i][13];
$v15=$tableau[$i][14];
$v16=$tableau[$i][15];
$v17=$tableau[$i][16];
$v18=$tableau[$i][17];
$v19=$tableau[$i][18];
$v20=$tableau[$i][19];
$v21=$tableau[$i][20];

$req = mysql_query("INSERT INTO piq VALUES ('$v1', '$v2', '$v3', '$v4', '$v5', '$v6', '$v7', '$v8', '$v9', '$v10', '$v11', '$v12', '$v13', '$v14', '$v15', '$v16', '$v17', '$v18', '$v19', '$v20', '$v21')");
}


// fermeture de la base de données
mysql_close("donneesreporting");

// Test requete
if ($req)
{ echo "Transfert effectué avec succes"; }
else
{ echo "Echec du transfert"; }
//echo "Importation effectuee avec succes" ;
}
else { echo "Mauvaise extension de fichier" ;}
}
else { echo "Fichier trop lourd" ;}
}
else
{
echo "Echec ouverture du fichier";
}

?>

Et lorsque je lance mon appli, après que l'utilisateur est choisis son fchier csv à import ca me dit : Notice: Undefined offset: 1 in C:\wamp\www\Reporting\cible_envoi.php on line 45
Et ca pour toutes mes lignes de 46 à 66 ...
je sais pas pourquoi, j'ai vérifié mon tableau se rempli bien je crois
Help me please !
A voir également:

1 réponse

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
voir commentaires
<?php
// Test si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['fichiercsv']) AND $_FILES['fichiercsv']['error'] == 0)
{
// Test taille du fichier
if ($_FILES['fichiercsv']['size'] <= 2000000)
{
// Test extension autorisée
$infosfichier = pathinfo($_FILES['fichiercsv']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('csv');
if (in_array($extension_upload, $extensions_autorisees))
{
$fichiercsv = $_FILES['fichiercsv']['tmp_name'] ;

$i=0;
$fichier = fopen($fichiercsv, "r"); //Ouverture du fichier en mode lecture

//lecture ligne par ligne tant qu'on est pas à la fin du fichier
while (!feof($fichier))
{
$ligne = fgets($fichier, 1024); //Récupération de la ligne
$tableau[$i] = explode(';', $ligne); //Récupération des différentes valeurs trouvées dans une ligne
$i++;
}
fclose($fichier); // Fermeture du fichier
$nblignes=$i;

//print_r($tableau) ;

//Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=donneesreporting', 'root', 'root');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

// print_r($tableau[1][5]);

// Les valeurs lues dans le fichier sont insérées dans la BD ligne par ligne

//$i commence à zéro dans ta boucle while de lecture du fichier et a la fin de boucle while $i vaut 1 de plus que le nombre de lignes donc il faut mieux boucler sur la taille réelle de $tableau
for ($i=0;$i<sizeof($tableau);$i++)
{
$v1=$tableau[$i][0];
$v2=$tableau[$i][1];
$v3=$tableau[$i][2];
$v4=$tableau[$i][3];
$v5=$tableau[$i][4];
$v6=$tableau[$i][5];
$v7=$tableau[$i][6];
$v8=$tableau[$i][7];
$v9=$tableau[$i][8];
$v10=$tableau[$i][9];
$v11=$tableau[$i][10];
$v12=$tableau[$i][11];
$v13=$tableau[$i][12];
$v14=$tableau[$i][13];
$v15=$tableau[$i][14];
$v16=$tableau[$i][15];
$v17=$tableau[$i][16];
$v18=$tableau[$i][17];
$v19=$tableau[$i][18];
$v20=$tableau[$i][19];
$v21=$tableau[$i][20];

$req = mysql_query("INSERT INTO piq VALUES ('$v1', '$v2', '$v3', '$v4', '$v5', '$v6', '$v7', '$v8', '$v9', '$v10', '$v11', '$v12', '$v13', '$v14', '$v15', '$v16', '$v17', '$v18', '$v19', '$v20', '$v21')");
}
// fermeture de la base de données
mysql_close("donneesreporting");
// Test requete
if ($req)
{ echo "Transfert effectué avec succes"; }
else
{ echo "Echec du transfert"; }

//echo "Importation effectuee avec succes" ;
}
else { echo "Mauvaise extension de fichier" ;}
}
else { echo "Fichier trop lourd" ;}
}
else
{
echo "Echec ouverture du fichier";
}

?> 
0
Noune1310 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai testé votre méthode, cela ne marche pas non plus, ou alors j'ai mal compris.
Mais j'ai trouvé une solution j'ai changé ma solution de comptage de ligne par :
$nblignes=$i-1;
Cela fonctionne.
Merci pour votre aide !
Bonne soirée
0