IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Coder en php pour actualiser une table d'une base mysql à partir d'un fichier classeur


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut Coder en php pour actualiser une table d'une base mysql à partir d'un fichier classeur
    Bonjour,

    Je cherche des infos sur une manip ... je sais pas si on peut le faire ...

    Est il possible de coder en php pour actualiser une table d'une base mysql en important avec un bouton la nouvelle table sous format classeur?

    Si oui pouvez vous me conseiller un bon tuto: complet et simple à la compréhension

    Cordialement

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2016
    Messages : 42
    Points : 60
    Points
    60
    Par défaut
    Salut,

    Le format "classeur" c'est quoi pour toi ? Un format Excel .xls ?

    Et la recherche : https://www.google.fr/webhp?sourceid...port+xls+mysql

    ++

  3. #3
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci de ta réponse ... je me suis mal exprimé

    Le but est que l'utilisateur sur la page admin clic sur un bouton pour importer dans la table d'une bdd une nouvelle liste d’œuvres d'art par exemple
    Si vous pouvez me conseiller un bon tuto, je suis preneur.

    Merci

  4. #4
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    ?? existe il une fonction php ??
    c'est la première fois que je fais cet exercice ... svp aiguillez moi!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Mettre un à la personne qui te répond n'est certainement pas le meilleur moyen d'avoir la solution à ton problème.
    Même si la réponse ne te convient pas, elle était tout-à-fait pertinente.

    D'autant qu'il a posé une question à laquelle tu n'as pas répondu.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 108
    Points
    43 108
    Par défaut
    Si c'est ajouter des éléments dans une table depuis un fichier excel ou csv que tu veux faire, tu peux le faire depuis phpmyadmin.
    Donc pour répondre à la question :
    Est il possible de coder en php pour actualiser une table d'une base mysql en important avec un bouton la nouvelle table sous format classeur?
    Oui.

    Si tu veux refaire ce que fais phpmyadmin dans une interface personnalisée, tu peux utiliser la fonction fgetcsv pour le csv. Pour du Excel, il existe des bibliothèques spécialisées telles que phpexcel. Ensuite, une fois les données récupérées, pour modifier la base, il te faut effectuer des requêtes en ajout via les fonctions dédiées de PHP (fonctions PDO ou Mysqli).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    oui effectivement c'est pas clair ...
    en fait sur ma page web administration du site je veux créer un bouton pour importer dans mysql le fichier .ods qui actualisera la table
    pour les fichiers .ods y a t il une fonction particulière?
    merci a tous

  8. #8
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Bonjour j'ai essayé le code suivant avec la fonction fgetcsv:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    <?php
    session_start();
    if (!isset($_SESSION['login']))
    {
    	header ('Location: index.php');
    	exit();
    }
    ?>
     
    <?php
    if(isset($_POST['Form_file_Submit'], $_POST['fileToUpload']))
    // isset: Détermine si une variable est définie et est différente de NULL
    // $_POST: Variables HTTP POST
    {
    	// Connexion MYSQL
    	// ---------------
    	try{
    	$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    	$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    	$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	}
    	catch(PDOException $e){																		
    	$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    	exit($msg);
    	}
     
    	// SUPPRESSION des enregistrements
    	// -------------------------------
    	//Preparer la requete
    	$sql = 'DELETE FROM liste_image';
    	$requete1 = $connexion_bdd ->prepare($sql);
    	//Compiler et executer la requete
    	$requete1->execute();
    	//Clore la requete preparee
    	$requete1 -> closeCursor();
    	$requete1 = NULL;		
     
    	// Lecture du fichier CSV
    	$row = 1;
    	if (($handle = fopen("test.csv", "r")) !== FALSE)
    	{
    		while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    		{
    			$num = count($data);
    			$row++;
    			for ($c=0; $c < $num; $c++)
    				{
    					// Connexion MYSQL
    					// ---------------
    					try{
    					$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    					$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    					$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e){																		
    					$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    					exit($msg);
    					}
     
    					// ECRITURE dans la table
    					// ----------------------
    					//Preparer la requete
    					$sql = 'INSERT INTO liste_image (type_fr, prenom_lo, intitule) VALUES (?, ?)';
    					$requete2 = $connexion_bdd ->prepare($sql);
    					//Associer des valeurs aux place holders
    					$requete2->bindValue(1, $type_fr, PDO::PARAM_STR);
    					$requete2->bindValue(2, $prenom_lo, PDO::PARAM_STR);
    					//Compiler et executer la requete
    					$requete2->execute();
    					//Clore la requete preparee
    					$requete2 -> closeCursor();
    					$requete2 = NULL;
    				}
    		}
    		fclose($handle);
    	}
    	fclose($file);
    }
    ?> 		
     
     
    <!DOCTYPE html>
    <html>
    <body>
     
    Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?> !<br />
    <a href="admin_deconnexion.php">Déconnexion</a>
     
    <hr>
    <h2>Tableau lié a table Mysql</h2>
     
    <?php
    // Connexion MYSQL pour verifier les identifiants
    // -----------------------------------------------
    try{
    $chaine_connexion='mysql:host=localhost;dbname=cemkay';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e){																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    //Preparer la requete
    $sql = 'SELECT * FROM liste_image WHERE taille=? AND type=? AND affichage=? ORDER BY RAND()';		// ORDER BY RAND(): melange aleatoire des entrees
    $requete2 = $connexion_bdd ->prepare($sql);
    //Associer des valeurs aux place holders
    $requete2->bindValue(1, 'petit', PDO::PARAM_STR);
    $requete2->bindValue(2, 'gravure', PDO::PARAM_STR);
    $requete2->bindValue(3, 'oui', PDO::PARAM_STR);
     
    //Compiler et executer la requete
    $requete2->execute();
    //Recuperer toutes les donnees retournees
    foreach($requete2->fetchAll() as $donnee)
    {
    echo ('Oeuvre: '  . $donnee['type_fr'] .  ' '  . $donnee['intitule'] .  '<br>');
    }
    //Clore la requete preparee
    $requete2 -> closeCursor();
    $requete2 = NULL;
    ?>
     
    <hr>
    <h2>Actualiser la table Mysql: importer fichier</h2>
     
    <form action="admin_membre.php" method="post" enctype="multipart/form-data">
        Select image to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="Form_file_Submit">
    </form>
     
    </body>
    </html>
    signe positif: pas de message d'erreur
    signe négatif: ça ne marche pas!
    Pouvez vous m'aider?

    Cordialement

  9. #9
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Y avait un paquet d incohérences que j ai modifié, ci-joint le nouveau code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    <?php
    session_start();
    if (!isset($_SESSION['login']))
    {
    	header ('Location: index.php');
    	exit();
    }
    ?>
     
    <?php
    if(isset($_POST['Form_file_Submit'], $_POST['fileToUpload']))
    // isset: Détermine si une variable est définie et est différente de NULL
    // $_POST: Variables HTTP POST
    {
    	// Connexion MYSQL
    	// ---------------
    	try
    	{
    	$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    	$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    	$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	}
    	catch(PDOException $e)
    	{																		
    	$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    	exit($msg);
    	}
     
    	// SUPPRESSION des enregistrements
    	// -------------------------------
    	//Preparer la requete
    	$sql = 'DELETE FROM liste_image';
    	$requete1 = $connexion_bdd ->prepare($sql);
    	//Compiler et executer la requete
    	$requete1->execute();
    	//Clore la requete preparee
    	$requete1 -> closeCursor();
    	$requete1 = NULL;		
     
    	// Lecture du fichier CSV
    	$row = 1;
    	if (($handle = fopen("liste_image.csv", "r")) !== FALSE)
    	{
    		while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    		{
    			$num = count($data);
    			$row++;
    			for ($c=0; $c < $num; $c++)
    				{
    					// Connexion MYSQL
    					// ---------------
    					try
    					{
    					$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    					$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    					$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e)
    					{																		
    					$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    					exit($msg);
    					}
     
    					// ECRITURE dans la table
    					// ----------------------
    					//Preparer la requete
    					$sql = 'INSERT INTO liste_image (                                      
    					id_photo,  affichage,  disponibilite,  taille_type,  type,  type_fr,  
    					type_en,  numero,  taille,  format,  nom_1,  nom_2,  ref1,  ref2,  ref3,  intitule,  themes,  code_themes,  
    					rewriting_fr,  rewriting_en,  themes_en,  technique,  technique_en,  hauteur,  largeur,  annee_creation,  serie,  
    					epreuve_artiste,  epreuve_artiste_en,  description,  technique_detail,  slide,  height_bdd,  width_bdd) 
    					VALUES (? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , 
    					? , ? , ? , ? , ? , ? , ? , ? , ? , ?)';
    					$requete2 = $connexion_bdd ->prepare($sql);
    					//Compiler et executer la requete
    					$requete2->execute();
    				}
    		}
    		fclose($handle);
    	}
    }
    ?> 		
     
     
    <!DOCTYPE html>
    <html>
    <body>
     
    Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?> !<br />
    <a href="admin_deconnexion.php">Déconnexion</a>
     
    <hr>
    <h2>Tableau lié a table Mysql</h2>
     
    <hr>
    <h2>Actualiser la table Mysql: importer fichier</h2>
     
    <form action="admin_membre.php" method="post" enctype="multipart/form-data">
        Select image to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="Form_file_Submit">
    </form>
     
    </body>
    </html>
    Toujours pas de message et les nouveaux enregistrements ne se réalisent pas
    1ere expérience dans ce domaine: pouvez vous m'aider?

  10. #10
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 108
    Points
    43 108
    Par défaut
    Pour intégrer un fichier .xls, tu peux utiliser la bibliothèque phpexcel, pour les fichier .ods openoffice, tu as ça. Il te faut au minium lire les docs pour parcourir les fichiers.

    Pourquoi les points d'interrogation dans ta requête en écriture ? Il faut les remplacer par le contenu des champs. Et ne mets dedans que les champs que tu souhaites écrire, inutile de spécifier les champs qui ne seront pas remplis.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut les remplacer par le contenu des champs.
    Il faut surtout fournir les valeurs dans le execute().
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci les gars,

    Il faut remplacer les ? par le contenu des champs.
    comme ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VALUES ("$data[0]","$data[1]","$data[2]","$data[3]","$data[4]")
    Il faut surtout fournir les valeurs dans le execute()
    La j ai rien compris

    Ci dessous le code:
    C'est bizarre j ai pas de message d'erreur et sous mysql la table reste vide alors que tous les enregistrements du fichiers csv auraient du être importés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <?php
    session_start();
    if (!isset($_SESSION['login']))
    {
    	header ('Location: index.php');
    	exit();
    }
    ?>
     
    <?php
    if(isset($_POST['Form_file_Submit'], $_POST['fileToUpload']))
    {
    	// Connexion MYSQL
    	// ---------------
    	try
    	{
    	$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    	$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    	$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	}
    	catch(PDOException $e)
    	{																		
    	$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    	exit($msg);
    	}
     
    	// SUPPRESSION des anciens enregistrements
    	// ---------------------------------------
    	//Preparer la requete
    	$sql = 'DELETE FROM liste_image';
    	$requete1 = $connexion_bdd ->prepare($sql);
    	//Compiler et executer la requete
    	$requete1->execute();
    	//Clore la requete preparee
    	$requete1 -> closeCursor();
    	$requete1 = NULL;		
     
    	// IMPORTATION des nouveaux enregistrements
    	// ----------------------------------------
    	// Lecture du fichier CSV
    	$row = 1;
    	if (($handle = fopen("liste_image.csv", "r")) !== FALSE)
    	{
    		while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    		{
    			$num = count($data);
     
    			for ($c=0; $c < $num; $c++)
    				{
    					// Connexion MYSQL
    					// ---------------
    					try
    					{
    					$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    					$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    					$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    					}
    					catch(PDOException $e)
    					{																		
    					$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    					exit($msg);
    					}
     
    					// ECRITURE dans la table
    					// ----------------------
    					//Preparer la requete
    					$sql = 'INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES ("$data[0]","$data[1]","$data[2]","$data[3]","$data[4]")';
    					$requete2 = $connexion_bdd ->prepare($sql);
    					//Compiler et executer la requete
    					$requete2->execute();
    				}
    			$row++;
    		}
    		fclose($handle);
    	}
    }
    ?> 		
     
     
    <!DOCTYPE html>
    <html>
    <body>
     
    Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?> !<br />
    <a href="admin_deconnexion.php">Déconnexion</a>
     
    <hr>
    <h2>Tableau lié a table Mysql</h2>
     
    <hr>
    <h2>Actualiser la table Mysql: importer fichier</h2>
     
    <form action="admin_membre.php" method="post" enctype="multipart/form-data">
        Select image to upload:
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="Form_file_Submit">
    </form>
     
    </body>
    </html>

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Salut,

    La connexion à la bdd et la préparation de la requête doivent être fait en dehors de la boucle (et d'ailleurs tu peux utiliser la connexion déjà ouverte plus haut).

    Seule la fonction execute() doit être située dans la boucle.

    Et puis essaies de faire une chose à la fois. Là tu enchaine une série d'actions que tu ne maîtrise pas donc tu enchaines les bug.

    Commence par faire un code sans upload à partir d'un fichier csv déjà existant sur le serveur.

    Fais d'abord fonctionner ce code ensuite tu pourras t'attaquer à l'upload :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    header('Content-type: text/html; charset=UTF-8');
     
    /*
    -- Structure de la table `test2`
    -- à coller dans une fenêtre sql de phpMyadmin pour faire le test
    
    CREATE TABLE IF NOT EXISTS `test2` (
      `champ1` tinytext,
      `champ2` tinytext,
      `champ3` tinytext,
      `champ4` tinytext
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    */
     
     
    /*
    dans l'exemple le fichier "test.csv" se situe dans le même répertoire que ce script
    contenu du fichier "test.csv" :
    
    aaa;bbb;ccc;ddd
    eee;fff;ggg;hhh
    iii;jjjjj;kkkkk;lllll
    mmmmm;nnnn;oooo;pppp
    q;rr;sss;tt
    
    */
     
     
    $db = "A remplacer par ta connexion à la bdd";
     
    // requête d'insertion
    $sql = "INSERT INTO test2 (champ1,champ2,champ3,champ4) VALUES (?,?,?,?)";
     
    // préparation de la requête
    $sth = $db->prepare($sql);
     
    // Lecture du fichier csv
    if (($handle = fopen("test.csv", "r")) !== FALSE)
    {
    	// Si c'est un fichier français le séparateur est un point virgule
    	while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    	{
                    // insertion des lignes dans la bdd
    		$sth->execute($data);
    	}
    	fclose($handle);
    }
     
    // fait afficher le contenu de la table pour contrôle
    $sql = "SELECT * FROM test2";
    $result = $db->query($sql);
    foreach ($result as $value)
    {print_r($value); echo '<br>';}
    ?>
    A noter que la limitation du système est celui des fichiers csv qui ne gère pas les retours lignes à l'intérieur des champs.

  14. #14
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci pour ton aide

    J'ai de nouvelles complications:
    quand je test le code
    - sans la condition if(isset($_POST['Form_file_Submit'], $_POST['fileToUpload'])) ça a l'air de marché.
    - avec la condition if(isset($_POST['Form_file_Submit'], $_POST['fileToUpload'])) ça ne marche pas.

    Autre question: quand je vais chercher le fichier liste_image.csv dans un autre dossier que la racine du site ça ne marche pas (je travail en local).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    76
    77
    78
    79
    <?php
    session_start();
    if (!isset($_SESSION['login']))
    {
    	header ('Location: index.php');
    	exit();
    }
     
    if(isset($_POST['Form_file_Submit'], $_POST['fileToUpload']))
    // isset: Détermine si une variable est définie et est différente de NULL
    // $_POST: Variables HTTP POST
    {
    	// SUPPRESSION des anciens enregistrements
    	// -------------------------------
    	// Connexion MYSQL
    	try{
    	$chaine_connexion='mysql:host=localhost;dbname=cemkay';
    	$connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    	$connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	}
    	catch(PDOException $e){																		
    	$msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    	exit($msg);
    	}
    	//Preparer la requete
    	$sql = 'DELETE FROM liste_image';
    	$requete1 = $connexion_bdd ->prepare($sql);
    	//Compiler et executer la requete
    	$requete1->execute();
    	//Clore la requete preparee
    	$requete1 -> closeCursor();
    	$requete1 = NULL;
     
    	// ENREGISTREMENT des nouveaux enregistrements
    	// -------------------------------
    	// Connexion MYSQL
    	header('Content-type: text/html; charset=UTF-8');
     
    	// requête d'insertion
    	$sql = "INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES (?,?,?,?,?)";
     
    	// préparation de la requête
    	$requete2 = $connexion_bdd->prepare($sql);
     
    	// Lecture du fichier csv
    	if (($handle = fopen("liste_image.csv", "r")) !== FALSE)
    	{
    		// Si c'est un fichier français le séparateur est un point virgule
    		while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    		{
    					// insertion des lignes dans la bdd
    			$requete2->execute($data);
    		}
    		fclose($handle);
    	}
    }
    ?>
     
     
    <!DOCTYPE html>
    <html>
    <body>
     
    Bienvenue <?php echo htmlentities(trim($_SESSION['login'])); ?> !<br />
    <a href="admin_deconnexion.php">Déconnexion</a>
     
    <hr>
    <h2>Tableau lié a table Mysql</h2>
     
    <hr>
    <h2>Actualiser la table Mysql: importer fichier</h2>
     
    <form action="admin_membre.php" method="post" enctype="multipart/form-data">
        <input type="file" name="fileToUpload" id="fileToUpload">
        <input type="submit" value="Upload Image" name="Form_file_Submit">
    </form>
     
    </body>
    </html>

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    La prochaine étape était de faire un upload correctement et là encore tu es loin du compte.

    Bon je te donne le code sur l'exemple de table que j'ai fais plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    header('Content-type: text/html; charset=UTF-8');
     
    $db = "Ta connexion à la bdd";
     
    // Si le formulaire a été soumis
    if(isset($_POST['Form_file_Submit']))
    {
        $erreur = 0;
     
        // Si un fichier a été téléchargé
        if (is_uploaded_file($_FILES['fileToUpload']['tmp_name'])) 
        {
    	  // Si le fichier a une extension csv
    	   if (strtolower(pathinfo ($_FILES['fileToUpload']['name'], PATHINFO_EXTENSION)) == 'csv')
    	  {
    		// Ouvre le fichier téléchargé
    		if (($handle = fopen($_FILES['fileToUpload']['tmp_name'], "r")) !== FALSE)
    		{
    			$sql = "INSERT INTO test2 (champ1,champ2,champ3,champ4) VALUES (?,?,?,?)";
     
    			$sth = $db->prepare($sql);
     
    			// Si c'est un fichier français le séparateur est un point virgule
    			while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    			{
    				//Je vérifie que le nombre de champs correspond au nombre de champs de ma bdd ( == 4 dans mon exemple)
    				if(count($data) == 4) $sth->execute($data); else $erreur++;
    			}
    			fclose($handle);
    		}
    	   }
    	   else
    	   {
    		   echo "<p style='color:red'>Le fichier n'est pas un fichier csv.</p>";
    	   }
        }
     
        if($erreur > 0) echo "<p style='color:red'>".$erreur." lignes n'ont pas été insérées car le nombre de champs du csv ne correspond pas au nombre de champs de la bdd.</p>";
    }
     
    // fait afficher le contenu de la table pour contrôle si besoin
    $sql = "SELECT * FROM test2";
    $result = $db->query($sql, PDO::FETCH_OBJ);
    foreach ($result as $value)
    echo $value->champ1.' - '.$value->champ2.' - '.$value->champ3.' - '.$value->champ4.'<br>';
    ?>
     
    <!DOCTYPE html>
    <html>
    <body>
    <form action="#" method="post" enctype="multipart/form-data">
        <input type="file" name="fileToUpload">
        <input type="submit" value="Upload Image" name="Form_file_Submit">
    </form>
    </body>
    </html>
    Et tu n'as besoin de faire un closeCursor() que pour les requêtes SELECT qui retournent des résultats et encore c'est optionnel.

  16. #16
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 108
    Points
    43 108
    Par défaut
    Il faut surtout fournir les valeurs dans le execute()
    La j ai rien compris
    Ca fait longtemps que j'ai pas fait de PHP, avant on utilisait les fonctions mysql_connect et compagnie. Maintenant onutilise PDO. Je ne connais pas PDO mais comme ça d’après la remarque de Sabotage, je subodore que les point d'interrogations sont à laisser et que c'est dans le execute qu'il faut mettre les valeurs, les ? étant des masques dans la chaine $sql, complété par les données fournies à execute. Sabotage confirmera.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est tout à fait ça, comme dans le code que ABCIWEB a fait.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Ca fait longtemps que j'ai pas fait de PHP, avant on utilisait les fonctions mysql_connect et compagnie. Maintenant onutilise PDO. Je ne connais pas PDO ...
    D'ailleurs cet exemple illustre bien les avantages de pdo par rapport à l'ancienne extension mysql :

    - code plus concis et plus agréable à écrire et à lire, exit les fonctions mysql_real_escape string
    - plus de sécurité avec l'abstraction des données des requêtes préparées
    - optimisation des performances pour des insertions multiples avec les requêtes préparées : juste faire attention de ne pas mettre la préparation de la requête à l'intérieur de la boucle d'insertion, sinon c'est ballot.
    - et gros avantage par rapport à mysqli : possibilité de passer un tableau dans la méthode execute().

  19. #19
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    Merci ABCIWEB,

    Pour les fichier .xls l n'y a que la bibliothèque PHPExcel?
    Pas du tout de fonction php?

    Pour importer un fichier excel dans une table mysql j'ai essayé d adapter le code suivant
    Il y a des erreurs ... pouvez vous m'aidez?

    Fatal error: Call to undefined method PDO::rollbackTransaction() in C:\wamp\www\cemkay\lire_excel.php on line 52
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    // ---------------
    try
    {
    $chaine_connexion='mysql:host=localhost;dbname=cemkay';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // throw exceptions when queries fail instead of normal errors
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    $connexion_bdd->beginTransaction();
     
    try
    {
    	// your phpexcel code goes here
    	$objPHPExcel = PHPExcel_IOFactory::load("liste_image.xls");
    	foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    	{
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    	}
     
    	// prepare the query - only needs to be done once
    	$stmt = $connexion_bdd->prepare('INSERT INTO `liste_image` ((id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES ("$data[0]","$data[1]","$data[2]","$data[3]","$data[4]")');
     
    	// insert each row
    	for ($row=2; $row<=$highestRow; $row++)
    	{
        $cell = $worksheet->getCellByColumnAndRow(3, $row)->getValue();
        $stmt->execute(array($cell));
    	}
    	$connexion_bdd->commitTransaction();
    }
    catch(Exception $E)
    {
    	$connexion_bdd->rollbackTransaction();
    	throw $E;
    }
    Cordialement

  20. #20
    Membre habitué
    Homme Profil pro
    sans emploi
    Inscrit en
    Février 2014
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 365
    Points : 131
    Points
    131
    Par défaut
    rollbackTransaction() et commitTransaction() n'existe pas? je dois les remplacer par quoi?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
    //include the following 2 files
    require 'PHPExcel/Classes/PHPExcel.php';
    require_once 'PHPExcel/Classes/PHPExcel/IOFactory.php';
     
    // Connexion MYSQL
    // ---------------
    try
    {
    $chaine_connexion='mysql:host=localhost;dbname=cemkay';
    $connexion_bdd = new PDO($chaine_connexion, 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {																		
    $msg = 'ERREUR PDO dans ' . $e->getFile() . ' L.' . $e->getLine() . ' : ' . $e->getMessage();
    exit($msg);
    }
     
    // throw exceptions when queries fail instead of normal errors
    $connexion_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    $connexion_bdd->beginTransaction();
     
    try
    {
    	// your phpexcel code goes here
    	$objPHPExcel = PHPExcel_IOFactory::load("liste_image.xls");
    	foreach ($objPHPExcel->getWorksheetIterator() as $worksheet)
    	{
    		$worksheetTitle     = $worksheet->getTitle();
    		$highestRow         = $worksheet->getHighestRow();
    		$highestColumn      = $worksheet->getHighestColumn();
    		$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
    		$nrColumns = ord($highestColumn) - 64;
    	}
     
    	// prepare the query - only needs to be done once
    	$stmt = $connexion_bdd->prepare('INSERT INTO liste_image (id_photo,  affichage,  disponibilite,  taille_type,  type) VALUES ("$data[0]","$data[1]","$data[2]","$data[3]","$data[4]")');
     
    	// insert each row
    	for ($row=2; $row<=$highestRow; $row++)
    	{
    		$cell = $worksheet->getCellByColumnAndRow(3, $row)->getValue();
    		$stmt->execute(array($cell));
    	}
    	$connexion_bdd->commitTransaction();
    }
    catch(Exception $E)
    {
    	$connexion_bdd->rollbackTransaction();	// On s'aperçoit d'une erreur et on annule les modifications
    	throw $E;
    }

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  3. Réponses: 1
    Dernier message: 19/10/2011, 12h13
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Copier les enregistrements d'une table vers une table d'une autre DB
    Par karinette21 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/11/2008, 21h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo