[PHP/PDO] Supprimer les doublons

Messages postés
11
Date d'inscription
lundi 12 novembre 2018
Dernière intervention
19 novembre 2018
-
Hello !

Je souhaite supprimer les doublons d'adresse mail d'un fichier Csv importé via un input-type file,

Je peut récupérer le fichier csv et le lire ligne par ligne

Ce que je voudrais c est repérer les doublons pour ensuite les supprimer de mon fichier, le sauvegarder et le retourner a l'utilisateur une fois traité :)

Mais voila je bloque je n'ai rien trouver sur les forum qui correspond vraiment a mon soucie, j ai fait une requête EGAL mais ça ne fonctionne pas ..



Si quelqu'un a déjà était dans cette situation et veut bien me prêter main forte ça serais génial !

Merci :)

        <form name="upload" method="post" action="index.php?nav=Traitement.php" enctype="multipart/form-data" class="form-desabo">
            <div class="row desabo-row">
                <div class="col-md-12 col-md-offset-3 center desabo-container">
                    <label for="sepateur">Choisissez le separateur ( , / ; - ..)</label><br>
                    <input type="text" name="separateur" id="separateur"><br>
                    <label for="sepateur">Choisissez le delimiteur ( " [ ] ; - ..)</label><br>
                    <input type="text" name="delimiteur" id="delimiteur"><br>
                    <label for="ignore">Nombre de ligne à ignorer</label>
                     <select name="ignore" id="ignore">
                        <option value="0">0</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                    </select><br>
                    <label for="import">N° champ a importer</label>
                    <select name="import" id="import">
                        <option value="0">0</option>
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                        <option value="13">13</option>
                        <option value="14">14</option>
                        <option value="15">15</option>
                    </select>
                        <h1 class="imgupload"><i class="fa fa-file-image-o"></i></h1>
                        <h1 class="imgupload ok"><i class="fa fa-check"></i></h1>
                        <h1 class="imgupload stop"><i class="fa fa-times"></i></h1>
                        <p id="namefile">Accepte les .txt /.csv </p>
                        <button type="button" id="btnup" class="btn btn-primary btn-lg">Posez-le ici!</button>
                        <input type="file" value="" name="fileup" id="fileup">
                        <input type="submit" value="Submit!" class="btn btn-primary" id="submitbtn">
                    <button type="button" class="btn btn-default" disabled="disabled" id="fakebtn">Envoyer <i class="fa fa-minus-circle"></i></button>
                </div>
            </div>
                     
             
        </form>
    </div>
</div>
<?php
// Vérifie si la chaine ressemble à un email
//if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
//    echo 'Cet email est correct.';
//} else {
//    echo 'Cet email a un format non adapté.';
//}
 
 
$dossier = 'upload/'; //* Je crée un dossier pour herberger mes fichier temporaire
$fichier = basename($_FILES['fileup']['name']);
$taille_maxi = 200000;
$taille = filesize($_FILES['fileup']['tmp_name']);
$extensions = array('.csv', '.txt'); //*Je crée mes extentions
$extension = strrchr($_FILES['fileup']['name'], '.');
$import=$_POST['import'];
$ignore=($_POST['ignore']);
$delimiter = $_POST['delimiteur'];
$separateur = $_POST['separateur'];
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = '';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
    //On formate le nom du fichier ici...
    $fichier = strtr($fichier,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
      
    if(move_uploaded_file($_FILES['fileup']['tmp_name'], $dossier . $fichier)){
 
            // Je lis mon fichier csv
            $row = 1;  
            if (($handle = fopen("upload/".$fichier, "r")) !== FALSE) {
                while (($data = fgetcsv($handle, 1000, $separateur, $delimiter)) !== FALSE) {
                    if ($row > $ignore){
                         
                        $num = count($data); 
 
                        if ($data[$import] == filter_var($data[$import], FILTER_VALIDATE_EMAIL)){ //Je filtre les mail si le mail est ok alors je lance la requete
                             
                            $requette = $db->prepare("SELECT * FROM `hardbounce_projet` WHERE `hardbounce_email` = '".$data[$import]."' ");
                            $requette->execute();
                            $resultat = $requette->fetchAll();
                            echo '<pre>';
                            print_r($resultat);
                            echo '</pre>';
 
                        } else {
                            echo "";
                        }
                         
                    }
                        echo "";
                        $row++;
 
                        for ($c=0; $c < $num; $c++) {
//                            echo $data[$c] . "<br />\n";
                    }
                }
                fclose($handle);
            }
  echo '<div class="container-fluid">'
            . '<div class="row">'
            . '<div class="col-lg-12 sucess_envoi">'
            . '<span class="">Upload effectué avec succès!</span><span class="btn-liste"><a href="index.php?nav=ListeHardbounce.php"> Voir la liste </a></span>'
            . '</div>'
            . '</div>'
       .'</div>';
     
     
    }else{
          echo '<span class="echec_envoi">Echec de l\'upload !</span>';
     }
        
}
else
{
     echo $erreur;
}
 
 
?>


EDIT : Correction des balises de code (ajout du LANGAGE afin d'avoir la coloration syntaxique )
Afficher la suite 

Votre réponse

1 réponse

Messages postés
23610
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2018
0
Merci
Bonjour,

Ta question étant :

e souhaite supprimer les doublons d'adresse mail d'un fichier Csv importé via un input-type file,

Je peut récupérer le fichier csv et le lire ligne par ligne

Ce que je voudrais c est repérer les doublons pour ensuite les supprimer de mon fichier, le sauvegarder et le retourner a l'utilisateur une fois traité :)

Tout ton code d'import (le formulaire et le code php d'upload ) ne sert à rien ....

Ce qui nous intéresse c'est (uniquement) le code que tu as essayé d'écrire pour lire ce fichier ligne par ligne puis le traitement des éventuels "doublons".

Il faudrait également que l'on puisse avoir un aperçu de ton fichier csv (voir à quoi il ressemble, dans quelle "colonne" se trouvent les mails, si ils sont triés ou non........)

Sachant que grosso-modo, pour traiter ta demande, il suffirait d'alimenter un array pour chaque mail rencontré, de vérifier si il est déjà présent ou non dans cet array et, en fonction, faire le traitement désiré.

Donc, il te faut connaitre à minima ces trois points là ::
http://php.net/manual/fr/function.array.php
http://php.net/manual/fr/control-structures.elseif.php
http://php.net/manual/fr/function.in-array.php





Leacode22
Messages postés
11
Date d'inscription
lundi 12 novembre 2018
Dernière intervention
19 novembre 2018
-
La colonne ou se trouve l email dans le CSV peut changer, elle peut très bien être en colonne 1, 2, 3... ^^
Le code que j ai essayer d’écrire c est la requête foireuse ligne 109 ^^
Pour les doublons, ne sachant pas du tous comment les traiter je n es pas encore fait de traitement ( a part des tentatives foireuse).
Merci pour la doc' je vais regarder :)
jordane45
Messages postés
23610
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 décembre 2018
-
Quel rapport entre une requête "select" et un import ?
Et quelle question entre l'import de ton csv en retirant les doublons.... et une bdd ?

Il faudrait que tu expliques pas à pas et en détails ce que tu veux faire.... un découpage "technique" (ou "algorithmique") de ce que tu cherches à réaliser

De plus, je t'invite à appliquer ceci à ton code :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Pour finir, pour poster du code sur le forum, merci de le faire en utilisant LES BALISES DE CODE (et en y précisant le langage)
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.