Inserer quelques lignes issues d'un fichier.tx dans Mysql

Résolu/Fermé
christian820 Messages postés 12 Date d'inscription lundi 13 août 2012 Statut Membre Dernière intervention 15 novembre 2015 - Modifié par christian820 le 13/02/2013 à 00:56
christian820 Messages postés 12 Date d'inscription lundi 13 août 2012 Statut Membre Dernière intervention 15 novembre 2015 - 13 févr. 2013 à 22:00
Bonjour,

 
<?php  
//connexion à  la base de donnèes  
 include("ConnectionBase.php");  


$file=$_POST["actes"]; //Récupère le fichier texte "actes"  
if (file_exists($file)) //Vérifie si le fichier actes existe  
{  

         $lecture = fopen($file,"r"); //Ouvre le fichier $file  
   
        while (!feof($lecture)) //boucle permettant la lecture du fichier ligne par ligne  
       {  
             $ligne=fgets($lecture); //isole une ligne  
     
             $champ=explode("\t",$ligne); //décompose la ligne en champs  

            if (count($champ)!=4) continue; //permet d'éliminer les lignes vides  
    
                     //extrait les données champ par champ  
                     if($champ[0]!="null")  
                          {$TypeActe=$champ[0];}  
                     else {$TypeActe=" ";}  
      
                     if($champ[1]!="null")  
                         {$DateNaissanceConjoint=$champ[1];}  
                     else {$DateNaissanceConjoint=" ";}  
     
              if($champ[2]!="null")  
                    {$NomConjoint=$champ[2];}  
             else {$NomConjoint=" ";}  
          
             if($champ[3]!="null")  
                  {$PrenomConjoint=$champ[3];}  
             else {$PrenomConjoint=" ";}  

   $stmt= $bdd->prepare('INSERT INTO actes(  
                       TypeActe,  
                        DateNaissanceConjoint,  
                        NomConjoint,  
                         PrenomConjoint)  
               VALUES(  
                        :TypeActe,  
                        :DateNaissanceConjoint,  
                        :NomConjoint,  
                        :PrenomConjoint)  

//Ici, si je place   
 where TypeActe=Mariage  
//afin de n'insérer que les lignes correspondant à un acte de mariage, rien ne se passe, c'est à dire que le code s'exéxute, mais aucune insertion ne se fait.  
                 ');  
//si je le place là idem            

     $stmt->execute(array('TypeActe' => $TypeActe,  
                                       'DateNaissanceConjoint' => $DateNaissanceConjoint,  
                                       'NomConjoint' => $NomConjoint,     
                                       'PrenomConjoint' => $PrenomConjoint  

   ));  
     
}  //fin du while  

 echo '<p>Vous avez enregistré vos actes dans la base de données</p>';  
   
    
 $bdd="null";  
?>  


Ce code fonctionne (sans le where), il insère bien toutes les lignes du fichier acte.txt .

Maintenant, si je veux trier sur TypeActe, valeur "Mariage" par un where, rien ne se passe, il n'insère rien. J'ai essayé de placer le where à divers endroits, mais soit j'ai une parse erreur, soit aucune insertion.

De même, J'ai essayé de mettre ceci à la place du where
$stmt->bindParam(':TypeMariage', Mariage);

Rien trouvé sur la doc, ni dans les forums .... Ma première question est : Est-ce possible?
Si oui, ma deuxième question est : Comment?

Merci de vos réponses

Cordialement,
Christian
A voir également:

1 réponse

Utilisateur anonyme
13 févr. 2013 à 10:01
Bonjour

Il est normal que ce code ne fonctionne pas avec WHERE. La syntaxe INSERT ... WHERE n'existe pas en SQL, car elle indiquerait une condition sur une ligne qui n'est pas encore dans la base.

Si tu ne veux pas insérer les lignes dont le TypeActe est Mariage, à toi de faire le test en PHP avant d'appeler ou non ta requête :
if ($TypeActe!="Mariage") {
  $stmt->execute(array('...
}


Petite remarque au passage : le $stmt= $bdd->prepare devrait être AVANT le while. Même si ça va marcher comme ça, tout l'intérêt du prepare PDO c'est qu'il suffit de le faire une seule fois et ne faire ensuite que des execute : un gros travail est ainsi économisé pour mysql.
0
christian820 Messages postés 12 Date d'inscription lundi 13 août 2012 Statut Membre Dernière intervention 15 novembre 2015 1
13 févr. 2013 à 22:00
Bonsoir Le père,
Merci pout ta réponse rapide.
C'est parfait, je marque le sujet résolu
Cordialement
Christian
0