Php aidez moi si vous plait

Résolu
Bonjour,
voici le code qui ne marche pas

$words = file('texte3.txt');
$word = 'ligne7';
if(in_array($words, $word)){
echo "le mot exite";
}
else{
//
echo "le mot n existe pas";
}
ca m affiche ce message d'erreur

Warning: Wrong datatype for second argument in call to in_array in c:\program files\easyphp\www\labo modifier fichier\testa.php on line 4
lemot nexite pas
Configuration: Windows XP Internet Explorer 7.0

26 réponses

Résumé de la discussion

Un extrait de code PHP visant à vérifier l'existence d'un mot dans texte3.txt générait l'erreur 'Wrong datatype for second argument' lorsque in_array était utilisé avec un tableau de lignes. La solution recommandée consiste à lire le fichier en tableau avec file(), puis à tester l'appartenance du mot via in_array($word, $words), afin d'éviter l'erreur et d'obtenir une réponse fiable. D'autres proposent des alternatives comme preg_match ou strpos avec file_get_contents, ou fread pour lire le fichier en mémoire et effectuer une recherche sur le contenu, notamment. Certaines réponses soulignent que des environnements comme EasyPHP 1.6 ou 3 peuvent influencer le choix entre lire le fichier ligne par ligne et tester l'appartenance, et suggèrent des vérifications d'ouverture et d'encodage.

Bobot (l’IA à votre service)
  1. Salut, pourquoi utiliser un in_array ? Utilise plutôt preg_match, si c'est juste pour de l'analyse dans une chaine c'est plus simple a mettre en place.
    <?php
    	$filename = "texte3.txt";
    	$handle = fopen($filename, "rb");
    	$words = fread($handle, filesize($filename));
    	fclose($handle);
    	
    	$word = '/ligne5/';
    	if(preg_match($word, $words)){
    		echo "le mot existe";
    	}
    	else{
    		echo "le mot n existe pas";
    	} 
    ?>
    

    fread() permet de stocker un fichier dans une variable. Ça évite de mettre WHILE($ligne = fget()).
    1
    1. un tres tres tres tres tres tres tres grand merci de votre aide
      le code qui marche est

      <?php

      $words = file_get_contents("texte3.txt");
      $word = 'ligne4';
      if( strpos($words, $word) !== false ){
      echo "le mot existe";
      }else{
      echo "le mot n'existe pas";
      }

      ?>

      le probleme venai aussi du serveur qui est esayphp 1.6 j ai tester le code sur esayphp3 est ca a marcher

      merci mille foie
      1
      1. Bonjour tout est expliquer dans la doc sur comment utiliser in_array
        http://fr3.php.net/manual/fr/function.in-array.php
        regarde bien le type des paramètre c'est la que tu t'es planté, en inversant les 2
        0
        1. aissaie:
          <?php
          
          $fichier=fopen("texte3.txt","r");
          while($ligne=fgets($fichier));
          {
          words[]=ligne;
          }
          fclose($fichier);
          $word = 'ligne7';
          if(in_array($words, $word)){
          echo "le mot exite";
          }
          else{
          //
          echo "le mot n existe pas";
          } 
          
          
          0
          1. tu propose quelque chose de plus compliqué qui ne résout pas le problème ....
            0
        2. est ce la même erreur ?
          0
          1. oui si on ne compte pas les 2 $ que tu as oublié ligne 6

            regarde mon premier post j'ai tout dis
            0
        3. c'est bon j'ai trouvé il faut que tu inverse $words et $word dans ta fonction in_array
          0
          1. c'est ce que j'ai dis dans mon premier post ...
            0
        4. <?php

          $fichier=fopen("texte3.txt","r");
          while($ligne=fgets($fichier));
          {
          $words=$ligne;
          }
          fclose($fichier);
          $word = 'ligne3';
          if(in_array($words, $word)){
          echo "le mot exite";
          }
          else{
          //
          echo "le mot n existe pas";
          }
          ?>

          LE CODE NE MARCHE PAS
          IL AFFFICHE
          Warning: Wrong datatype for second argument in call to in_array in c:\program files\easyphp\www\labo modifier fichier\testa.php on line 10
          le mot n existe pas

          NORMALEMENT IL DEVRAIT AFFICHER LE MOT EXISTE
          0
          1. <?php

            $fichier=fopen("texte3.txt","r");
            while($ligne=fgets($fichier));
            {
            $words=$ligne;
            }
            fclose($fichier);
            $word = 'ligne3';
            if(in_array($word, $words)){
            echo "le mot exite";
            }
            else{
            //
            echo "le mot n existe pas";
            }
            ?>
            0
            1. ça ne marchera pas non plus ...

              il faudrait que tu test avant de poster ça éviterait que tu postes encore des codes qui buguent ...
              0
          2. j ai inverse words et word est ca ne m affiche plus de message d erreur mes ca m affiche a l ecran
            le mot n exite pas alors que ligne5 ce trouve dans le fichier texte
            d ou vient le probleme
            <?php

            $fichier=fopen("texte3.txt","r");
            while($ligne=fgets($fichier));
            {
            $words[]=ligne;
            }
            fclose($fichier);
            $word = 'ligne5';
            if(in_array($word, $words)){
            echo "le mot exite";
            }
            else{
            //
            echo "le mot n existe pas";
            }
            ?>
            0
            1. on notera que mon script marchait parfaitement sans compter les 2 $ que j'avais oublié je me damande pourquoi tu a enlevé les 2 crochets à words[].
              0
              1. testé sous easy php 3.0
                <?php
                
                $fichier=fopen("texte3.txt","r");
                while($ligne=fgets($fichier));
                {
                $words[]=$ligne;
                }
                fclose($fichier);
                $word = 'ligne3';
                if(in_array($word, $words)){
                echo "le mot exite";
                }
                else{
                echo "le mot n existe pas";
                }
                ?> 
                0
                1. de toute façon le code ne générait pas d'erreur mais ne fonctionnait pas -_-
                  celui la marche vraiment :
                  <?php
                  
                  $words=file("texte3.txt");
                  $word = 'ligne3';
                  if(in_array($word, $words)){
                  echo "le mot exite";
                  }
                  else{
                  echo "le mot n existe pas";
                  }
                  ?> 
                  0
                  1. :o je viens de me rendre compte que avec in_array ça marche pas en fait sauf si le mot cherché est une ligne complète du fichier

                    voici encore une autre version

                    <?php
                    
                    $words = file_get_contents('texte3.txt');
                    $word = 'ligne7';
                    if( strpos($words, $word) !== false ){
                    	echo "le mot existe";
                    }else{
                    	echo "le mot n'existe pas";
                    }
                    
                    ?>
                    0
                    1. j ai tester ce code est ca ne marche pas

                      <?php

                      $words=file("texte3.txt");
                      $word = 'ligne3';
                      if(in_array($word, $words)){
                      echo "le mot exite";
                      }
                      else{
                      echo "le mot n existe pas";
                      }
                      ?>
                      0
                      1. encore plus simple :

                        <?php

                        $words = file_get_contents('texte3.txt');
                        $word = 'ligne7';
                        if(ereg($word,$words)){
                        echo "le mot existe";
                        }else{
                        echo "le mot n'existe pas";
                        }

                        ?>
                        0
                        1. re bonjour

                          je voudrai savoir maintenant comment je peu faire pour que le code ecrit a la fin du fichier si le mot ne ce trouve pas dans le fichier

                          merci d'avance de votre aide
                          0
                          1. tu ajoute :

                            else
                            {
                            fopen("texte3.txt","a");
                            fputs($word);
                            }

                            0
                            1. re bonjour

                              <?php

                              $words = file_get_contents("texte3.txt");
                              $word = 'ligne4';
                              if( strpos($words, $word) !== false ){
                              echo "le mot existe";
                              }else{
                              echo "le mot n'existe pas";
                              fopen("texte3.txt","a");
                              fputs($word);
                              }

                              ?>

                              le probleme avec ce code si qui m affiche un message d'erreur genre :

                              Warning: file_get_contents(texte3.txt): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\nouveau dossier (3)\testa.php on line 3
                              le mot n'existe pas
                              Warning: Wrong parameter count for fputs() in c:\program files\easyphp1-8\www\nouveau dossier (3)\testa.php on line 10

                              est aussi il y a un autre probleme c est qu il cree un autre fichier vide.
                              0
                              1. ben d'après lerreur le fichier texte3.txt n'esxiste pas
                                0
                                1. Warning: file_get_contents(texte3.txt): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\nouveau dossier (3)\testa.php on line 3 

                                  pour éviter ça rajoute un test avec file_exists

                                  Warning: Wrong parameter count for fputs() in c:\program files\easyphp1-8\www\nouveau dossier (3)\testa.php on line 10 

                                  tu as oublié de regarder comment on utilise fputs ... -> https://www.php.net/manual/fr/function.fputs.php
                                  0
                                  1. la c'est ma faute pour fputs jé mi ca de tete sans regarder le menuel php
                                    0
                                • 1
                                • 2