Problème code PHP

Résolu/Fermé
Noune1310 Messages postés 7 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 2 juillet 2013 - 20 juin 2013 à 09:51
Noune1310 Messages postés 7 Date d'inscription jeudi 20 juin 2013 Statut Membre Dernière intervention 2 juillet 2013 - 20 juin 2013 à 16:30
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 20/06/2013 à 15:59
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 jeudi 20 juin 2013 Statut Membre Dernière intervention 2 juillet 2013
20 juin 2013 à 16:30
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