[PHP/PDO] Supprimer les doublons

Leacode22 Messages postés 11 Date d'inscription lundi 12 novembre 2018 Statut Membre Dernière intervention 19 novembre 2018 - Modifié le 16 nov. 2018 à 10:06
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 16 nov. 2018 à 16:26
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 )

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
16 nov. 2018 à 10:12
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





0
Leacode22 Messages postés 11 Date d'inscription lundi 12 novembre 2018 Statut Membre Dernière intervention 19 novembre 2018
16 nov. 2018 à 10:20
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 :)
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
16 nov. 2018 à 16:26
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
0
Rejoignez-nous