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

Langage PHP Discussion :

Problème avec in_array()


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Problème avec in_array()
    Bonjour,

    J'ai un fichier txt qui contient des informations sur mes clients (extraction d'une base client)
    et je voudrai le comparer à une autre base de donnée.
    je voudrai savoir si les Emails contenu dans mon fichier sont dans mon autre base de donnée.
    voici mon code :

    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
    $tabmail = array(); 
     
      //on fait un tableau avec les mails en base
      $query = "select email from wp_MailPress_users";
      $exec = mysql_query($query);
      while ( $stockmail = mysql_fetch_row($exec))
      {
       $tabmail[]=trim($stockmail[0]);
      }
     
     $n = sizeof($tabmail);
     echo "Nombre de mails en base: <strong>".$n."</strong><br />
     <br />
     Les Emails ci dessous ne sont pas en base :<br />";
     
     //print_r($tabmail);
     
     
      //on lance la comparaison
     
      $ficmail = fopen("tmp/fullmail.txt","r");
      while ($line = fgets($ficmail))
      {
        $tabline = explode("\t", trim($line));
    	$email = $tabline[8];
    	$nom = $tabline[2];
    	$cp = $tabline[5];
     
    	if(!in_array($email, $tabmail))
    	{
    	 echo "<br />".$line;
    	}
      } 
      fclose($ficmail);
      unlink("tmp/fullmail.txt");
    Mais ce code me dis que tous mes mails de mon fichier sont absents de ma base .
    Merci de votre aide car je ne trouve pas mon erreur.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    étudie un cas précisemment pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ficmail = fopen("tmp/fullmail.txt","r");
     $line = fgets($ficmail))
     $tabline = explode("\t", trim($line));
     $email = $tabline[8];
     $nom = $tabline[2];
     $cp = $tabline[5];
     
    foreach ($tabmail as $sqlemail) {
     
      echo $sqlemail;
      echo ($sqlemail == $email) ? " pareil " : " different ";
      echo $email;
      }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour ton aide Sabotage,

    Quand je met ton code, il me sort toujours en premier le premier mail de mon fichier.
    il me liste donc tout les mails de mon fichier ne me disant qu'ils sont différent du premier (normal), j'ai donc un pb de boucle.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans mon exemple il n'y a pas la boucle, c'etait juste pour tester le premier ; mais forcemment s'il fait partie de ceux qui son legitimement absent, ca ne nous apprend rien.

    Soit tu remets la boucle dans mon test, soit tu mets en premier en premier un email que tu dois trouver.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    salut,

    si tu mets le même code c'est normal... $email est déclaré qu'une seule fois et pour tute ta boucle.
    En dehors du évident "mysql_connect", as tu essayé de mettre un echo de tes valeurs dans ta boucle d'origine ainsi qu'un strlen afin d'être sur de tes valeurs?
    Ex :
    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
     
    ...
      //on fait un tableau avec les mails en base
      $query = "select email from wp_MailPress_users";
      $exec = mysql_query($query);
      while ( $stockmail = mysql_fetch_row($exec))
      {
       echo trim($stockmail[0]) . '(' . strlen(trim($stockmail[0])) . ')';
       $tabmail[]=trim($stockmail[0]);
      }
    ...
    while ($line = fgets($ficmail))
      {
        $tabline = explode("\t", trim($line));
    	$email = $tabline[8];
    	$nom = $tabline[2];
    	$cp = $tabline[5];
     
       echo $email . '(' . strlen($email) . ')';
    	if(!in_array($email, $tabmail))
    	{
    	 echo "<br />".$line;
    	}
      }

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Yess c'est bon j'ai trouvé, j'oubliais de faire une boucle
    voici mon code qui fonctionne :
    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
     
    <?php
    include_once('config.php');
     
    if (empty($_POST))
    {
     ?>
      <form method="post" action="diff.php" enctype="multipart/form-data">
       Fichier à comparer (.txt) :
       <input type="file" name="nomfic" />
       <input type="hidden" name="MAX_FILE_SIZE" value="1024" />
       <input type="submit" name="submit" value="Envoyer" />
      </form>
     <?php
    }
     
    else
    {
     $nom = "tmp/fullmail.txt";
     $resultat = move_uploaded_file($_FILES['nomfic']['tmp_name'],$nom);
     if ($_FILES['nomfic']['error'] > 0) { echo "Erreur lors du transfert"; exit; }
     
     if ($resultat) 
     {
      $tabmail_bdd = array(); 
      $tabmail_file = array(); 
     
      //on fait un tableau avec les mails en base
      $query = "select email from wp_MailPress_users";
      $exec = mysql_query($query);
      while ( $stockmail = mysql_fetch_row($exec))
      {
       $tabmail_bdd[]=trim($stockmail[0]);
      }
     }
     $n = sizeof($tabmail_bdd);
     echo "Nombre de mails en base: <strong>".$n."</strong><br />
     <br />";
     
     
     //on récupère le nombre de ligne du fichier:
     $nf = count(file($nom));
     echo "Nombre de mails dans le fichier : <strong>".$nf."</strong><br />";
     
     $file = file($nom, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
     
     //init nombre de mail manquant:
     $nbabs=0;
     
     foreach($file as $ligne)
     {
      $tabline=array();
      $tabline = explode("\t", trim($ligne));
      $tabmail_file[] = trim($tabline[8]);
      $tabnom_file[] = trim($tabline[2]);
      $tabcp_file[] = trim($tabline[5]);
     }
     
     echo " <br /> Les Emails ci dessous ne sont pas en base :<br />
     <table>";
     for ($i=0; $i<=$nf; $i++)
     {
      if(!in_array($tabmail_file[$i], $tabmail_bdd))
    	{
    	 echo "<tr><td>".$tabmail_file[$i]."</td><td>".$tabnom_file[$i]."</td><td>".$tabcp_file[$i]."</td></tr>";
    	 $nbabs++;
    	}
     }
     echo "</table>";
      unlink("tmp/fullmail.txt");
      echo "Nombre de mail manquant :".$nbabs;
    }
    ?>
    J'oubliais le for $i donc forcement il me comparait les mails de ma base avec le 1er de mon fichier ...

    MERCI pour vos lumière.

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

Discussions similaires

  1. [Tableaux] problème avec array_search et in_array
    Par Devil666 dans le forum Langage
    Réponses: 2
    Dernier message: 19/01/2006, 13h47
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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