PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 01-12-2011 23:40:54

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Vérifier doublons fichier CSV avant d'utiliser fput()

Bonsoir à vous,

je suis en train de travailler sur un script qui enregistre la date et l'adresse e-mail d'un formulaire envoyé dans un fichier .csv (ils s'incrémentent les uns à la suite des autres).
Jusque là tout fonctionne, j'ai utilisé la fonction fput().

Là où tout se complique, c'est que j'aimerais vérifier que chaque ligne de mon CSV (contact@serv.net; 12/12/2010 ...) ne soit pas identique à celle qui vient d'être envoyée par le formulaire. Je n'arrive pas à effectuer ce bout de script, voici où j'en suis:

Code qui exploite le CSV pour vérifier que l'e-mail envoyé n'existe pas déjà :

if (($handle = fopen("emails_db.csv", "r")) !== FALSE) {
   
   while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
   
    $email_csv  =     $data[0];
    $date       =     $data[1];
   
    // Si l'email est déjà dans le tableau csv...
    if ($email_csv == "test.azer@gmail.com") {

        echo "Déjà dans la DBB";

    // Sinon on ajoute !
    } else {

        echo "Ajouté";

    }

    // On ferme le fichier
    fclose($handle);
   }
}

voici le code qui fonctionne : celui qui incrémente le fichier .csv :

    // Ligne par ligne
     $ligne = 1;
     
     // On ouvre le fichier CSV
     $fichier = fopen("emails_db.csv","a+");
     
     $commande = "\n" . $email . ";" .
                             $date;
                             
     // On écrit dans le fichier
     fputs($fichier, $commande);
     
    // On ferme le fichier
     fclose($fichier);

Merci à vous pour votre éventuelle aide...!

Dernière modification par laurent (01-12-2011 23:44:50)

Hors ligne

#2 02-12-2011 09:09:40

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

il suffit juste de mettre une contrainte sur la table wink

une clef non duplicable  dur le champ email wink

a++

Hors ligne

#3 02-12-2011 09:38:44

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Salut Pierrot,
le problème ici est que je n'utilise pas de requête SQL.

Merci

Hors ligne

#4 02-12-2011 09:47:03

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

scuze big_smile:D
je dormai big_smile:D

tu met le csv sans un tableau et avec in_array il devrait y avoir une solution );

a++

Hors ligne

#5 02-12-2011 10:11:02

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Saluton,
Attention si le fichier emails_db.csv est susceptible d'être modifié //ment par un autre process.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 02-12-2011 10:28:19

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Salut Maljuna,

pardon je n'ai pas compris ?

Pour l'instant j'ai pas vraiment de message d'erreur, en retour j'ai juste "Ajouté" qui s'affiche.

Et si je fais

echo $data[0];

je vois apparaître "email" qui correspond au premier chamsp de mon fichier csv.

Dernière modification par laurent (02-12-2011 10:34:36)

Hors ligne

#7 02-12-2011 10:32:35

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Voici un screen de ma BDD csv

bdd.png

Dernière modification par laurent (02-12-2011 10:33:26)

Hors ligne

#8 02-12-2011 11:00:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Il te faut sortir  fclose($handle); de la boucle while.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 02-12-2011 11:01:48

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

ce que MK indique c'est que si le fichier est utiliser en même temps pour une autre page php ou par un autre logiciel tu risque de corrompre le fichier (suivant les modifs effectuée) le dernier qui enregistre va supprimer les données du 1er smile

regarde la fonction flock()

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#10 02-12-2011 11:09:24

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Merci à vous, j'ai bien compris, alors j'ai dû modifier mon code (qui fonctionne presque correctement).

Au lieu de m'afficher une seule fois "Email allready in database", il me l'affiche autant de fois qu'il rencontre de lignes dans le fichier .csv, pourtant mon script lui dit d'afficher ce message uniquement s'il rencontre ce champs non ?

voici mon code :

 $fichier = 'emails_db.csv';

$fic     = fopen($fichier, 'r');
 
$tab_lignes   = array("test@test.com");
 
$nb_lignes = 0;
 
while($ligne = fgetcsv($fic, 0, ';'))
{
    if(in_array($ligne[0], $tab_lignes))
    {
        echo "Deja dans le fichier";
    }else {
        echo "pas dans le fichier";
    }
 
    ++$nb_lignes;
}

fclose($fic);

Réponse du script :
"pas dans le fichierpas dans le fichierpas dans le fichierpas dans le fichierpas dans le fichierpas dans le fichierDeja dans le fichierpas dans le fichierpas dans le fichierpas dans le fichierpas dans le fichier"

Dernière modification par laurent (02-12-2011 11:47:45)

Hors ligne

#11 02-12-2011 11:58:44

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Supprime le else.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 02-12-2011 12:05:41

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

Si je le supprime il ne m'affiche plus rien alors que l'adresse y est

    $fp     = fopen($file, 'r');
    if (flock($fp, LOCK_EX)) { // pose un verrou exclusif
       
        $tab_lignes   = array("test@test.com");
         
        $nb_lignes = 0;
         
        while($ligne = fgetcsv($fic, 0, ';'))
        {
            if(in_array($ligne[0], $tab_lignes))
           
            {
               
                $error .= "Deja dans le fichier";
               
            }
         
            ++$nb_lignes;
        }
       
        flock($fp, LOCK_UN);   // libère le verrou
       
    }
   
    fclose($fp);

Dernière modification par laurent (02-12-2011 12:13:17)

Hors ligne

#13 02-12-2011 13:45:16

laurent
Membre
Inscription : 08-05-2009
Messages : 18

Re : Vérifier doublons fichier CSV avant d'utiliser fput()

J'ai fais une petite erreur sur mon script du dessus, $fic correspondait à rien, après l'avoir remplacé par $fp,

    if (flock($fp, LOCK_EX)) {
       
        $tab_lignes   = array(ValidateEmail($email));
       
        $nb_lignes = 0;
         
        while($ligne = fgetcsv($fp, 1000, ';'))
        {
            if(in_array($ligne, $tab_lignes))
           
            {
               
                $error = '<p class="error">Deja dans le fichier</p>';
               
            }
         
            ++$nb_lignes;
        }
       
        // Unlock file
        flock($fp, LOCK_UN);
       
    }

j'obtiens tout le temps "Deja dans le fichier"

Une idée ?

Merci...!

Hors ligne

Pied de page des forums