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 :

UPDATE bdd à partir liste ou fichier, comment faire ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Par défaut UPDATE bdd à partir liste ou fichier, comment faire ?
    Bonjour,

    J'ai besoin de mettre à jour une base de donnée à partir d'une liste ou d'un fichier.

    Voici la requête qui fonctionne pour un enregistrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE USER SET `use_postetel` = 'TATA', `use_localisation` = 'TOTO' WHERE use_nom = 'TITI' and use_prenom= 'GROSMINET'
    Question, comment faire :

    Est ce possible dans phpmyadmin, ou faut-il passer par un script php ?

    Si il faut le faire en php, pouvez vous me donner la méthode, dans quel ordre il faut procéder ?

    Quel type de requête et de boucle ?

    Comment faire pour intégré les données dans la requête d'UPDATE.

    Merci d'avance

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Ça dépend du format de ton fichier. Normalement, les CSV fonctionnent très bien sans avoir à passer par php, les fichiers Excel aussi. Mais faudrait nous mentionner sous quel format sont tes fichiers. Pour ce qui est de la liste, encore ici, il faudrait nous mentionner sous quel format elle se trouve et comment tu y accèdes. Est-ce qu'elle est dans un fichier Excel ou directement disponible sur Internet ou est ce que tu la construit toi-même?

    Donc voilà pour maintenant, bonne chance .

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Par défaut impotation de fichier
    salut

    Vous pouvez adapter cette fonction:

    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
    public static function importer($Fichier){
     
     
           if (is_file($Fichier)) {
                            // On recupere les lignes du fichiers dans un table
    						 $line=0;
    						 while (!feof($Fichier)) {
    				  		 $uneLigne[]= fgets($Fichier, 4096); 
    					     //$line++;
    						 if($uneLigne) echo 'yep';
    					    }
    						  fclose ($fichier); 
    						// Decompte du nombre de lignes total
     
     
                             //Recuperation du reste de la division du nombre total de ligne
    						$denom=500;
    						$reste = $numTotal%$denom;
     
                            // Subdivision du des ligne du tableau en dix partie pour aleger la requete d'insertion
    						$tranche = ($numTotal - $reste)/$denom;
     
     
    						// Initialisation du debut et de la fin de la premiere iteration
    						$fin = $tranche;
    						$debut = 0;
                            $i=0;
                            $j=0;
     
    						for($i = 0; $i < $denom; $i++)
                                    {
                                    // Formatage de le requete SQL
                                   	$sql="INSERT INTO virements (id_vrmt,code_banque_vrmt,num_compte_vrmt,num_mat_vrmt,montant_vrmt,fullname_vrmt)
    									VALUES";
    								for($j=$debut ; $j < $fin ; $j++)
                                            {
                                            // Decomposition des lignes du tableau en tableaux de valeurs
    										$TabVal= explode("|",$TabFich[$j]);
                                            // Formatage des valeurs de la requete INSERT 
    										if($j < $fin - 1)
     
    											$sql=$sql."('','".$TabVal[0]."','".$TabVal[1]."','".$TabVal[2]."','".$TabVal[3]."','".addslashes($TabVal[4])."'),";
    										else
    											$sql=$sql."('','".$TabVal[0]."','".$TabVal[1]."','".$TabVal[2]."','".$TabVal[3]."','".addslashes($TabVal[4])."')";
                                            }
                                     // Initialisation du debut et de la fin de la prochaine iteration
    								$debut = $fin;
    								$fin = $fin + $tranche;
     
                                    // Execution de la requete d'insertion
                                   // $exe = mysql_query($sql) or die(mysql_error());
                                   }
                                   // Initialisation de la fin de la derniere iteration
    							   if($reste > 0){
    								   $fin = $debut + $reste;
     
    										$sql="INSERT INTO virements (id_vrmt,code_banque_vrmt,num_compte_vrmt,num_mat_vrmt,montant_vrmt,fullname_vrmt)
    											  VALUES";
    									for($j=$debut ; $j < $fin ; $j++){
    											$TabVal= explode("|",$TabFich[$j]);
    											if($j < $fin - 1)
    												$sql=$sql."('','".$TabVal[0]."','".$TabVal[1]."','".$TabVal[2]."','".$TabVal[3]."','".addslashes($TabVal[4])."'),";
    											else
    												$sql=$sql."('','".$TabVal[0]."','".$TabVal[1]."','".$TabVal[2]."','".$TabVal[3]."','".addslashes($TabVal[4])."')";
    									}
    									  // $exe = mysql_query($sql) or die(mysql_error());
    								}
     
     
     
     
                                    if($exe)
                                          echo "<h1> IMPORTATION TERMINEE ! ! ! </h1> <br>";
     
     
        						//echo $sql;
                            	}
                               	else
    						echo "Le fichier ne peut �tre lu...<br>";
                        }

  4. #4
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut Update table à partir d'un fichier csv
    Bonjour,

    Ce que je propose est la mise à jour de la table à partir d'un fichier CSV dont le contenu est une liste formatée. Exemple:
    Nom de fichier: mon_fichier.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1;TATA;TOTO;TITI;GROSMINET
    2;TOTO;TATA;GROSMINET;TITI
    etc.
    En sachant pour le premier enregistrement que:
    use_postetel = TATA
    use_localisation = TOTO
    use_nom = TITI
    use_prenom = GROSMINET


    et pour le second enregistrement,
    use_postetel = TOTO
    use_localisation = TATA
    use_nom = GROSMINET
    use_prenom = TITI


    Le code à placer dans un fichier PHP est le suivant:
    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
     
    <?php
    //tu dois placer ici les paramètres de connexion à la base de donnée et la 
    //sélection de la table (mysql_connect et mysql_select)
    //le code suivant sous-entend que la connexion et la sélection de la bdd 
    //et table a été faite: je me concentre sur la lecture du fichier 
    //mon_fichier.csv et intégrer chaque enregistrement dans la table USER
        $fic = fopen("mon_fichier.csv", "a+");
        while($tab = fgetcsv($fic,1024,';'))
        {
                $sql = "
                    UPDATE USER
                    SET use_postetel = '".$tab[0]."', use_localisation = '".$tab[1]."'
                    WHERE use_nom = '".$tab[2]."'
                    AND use_prenom = '".$tab[3]."'
                ";
                mysql_query($sql) or die(mysql_error());
        }
        fclose($fic);
    ?>

    Explications:

    Ouverture du fichier en lecture $fic = fopen("mon_fichier.csv", "a+");
    Placer dans un tableau chaque ligne du fichier en l'explodant au niveau du séparateur point-virgule $tab = fgetcsv($fic,1024,';')
    Dans la boucle while, on construit la requête MySQL, $tab[0] désigne le premier élément du tableau, etc.
    Exécution de la requête mysql_query($sql) or die(mysql_error());

    En espérant de t'avoir aidé.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 62
    Par défaut Question à Mahefasoa
    La réponse de Mahefasoa est celle qui me parait être la plus simple à mettre en œuvre pour pour moi :

    En ce qui concerne le fichier, j'ai accès à la base et le possède au format Excel, autant dire que je suis totalement libre en ce qui concerne le fichier à générer.

    pas de problème non plus pour la connexion à la base.

    J'ai une question concernant le "a+" contenu dans la ligne :

    $fic = fopen("mon_fichier.csv", "a+");

    Quel est son rôle ?

    Est-il possible aussi de m'expliquer le rôle de "1024" dans la ligne :

    while($tab = fgetcsv($fic,1024,';'))

    Merci beaucoup

  6. #6
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Re,

    Rôle de "a+": http://php.net/manual/fr/function.fopen.php
    Ouvre en lecture et écriture ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
    Mais je pense que "r" pourrait faire l'affaire.

    Concernant while($tab = fgetcsv($fic,1024,';')):
    la fonction fgetcsv (http://php.net/manual/fr/function.fgetcsv.php) va lire la ligne en cours dans le fichier et va renvoyer un tableau selon le délimiteur défini, ici point-virgule ( ; ). Donc cette ligne pourrait se lire comme "tant qu'il y a des lignes à lire dans le fichier $fic"

    Bien cordialement,

  7. #7
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut Réponse
    Citation Envoyé par gestgm
    ...
    Je reviens juste sur ma dernière question, le while, j'en connaissait la fonction, c'est juste le 1024 qui m'intrigue.
    ...
    Patrice
    D'après la documentation sur php.net, c'est le paramètre lentgh (longueur de chaque ligne) Si tu mets 1024, cela sous-entend que la plus longue ligne ne dépasserait pas 1024 caractères. Ce paramètre est optionnel mais toujours d'après le documentation, la lecture serait plus lente. En principe, il faut donner à ce paramètre le nombre de caractères maximal que pourrait avoir une ligne dans le fichier CSV.

    Bien cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/11/2011, 16h36
  2. [SSIS] [2K5] Update insert à partir d'un fichier plat
    Par satanas313 dans le forum SSIS
    Réponses: 1
    Dernier message: 26/06/2009, 14h51
  3. [CSV] Update BDD à partir de fichier xls ou csv
    Par masseur dans le forum Langage
    Réponses: 2
    Dernier message: 03/07/2007, 14h51
  4. Listes et cases, comment faire?
    Par Umbrella dans le forum Delphi
    Réponses: 3
    Dernier message: 30/08/2006, 09h03
  5. [Impression] Impression de divers fichiers comment faire
    Par Alec6 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 11/10/2005, 16h22

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