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

  • Votes
  • Date
  • Date décroissante
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. 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
    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";
      } 
      
      
      1. tu propose quelque chose de plus compliqué qui ne résout pas le problème ....
    2. est ce la même erreur ?
      1. oui si on ne compte pas les 2 $ que tu as oublié ligne 6

        regarde mon premier post j'ai tout dis
    3. c'est bon j'ai trouvé il faut que tu inverse $words et $word dans ta fonction in_array
      1. c'est ce que j'ai dis dans mon premier post ...
    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
      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";
        }
        ?>
        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 ...
      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";
        }
        ?>
        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[].
          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";
            }
            ?> 
            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. 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";
                }
                ?> 
                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";
                  }
                  
                  ?>
                  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";
                    }
                    ?>
                    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. 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";
                        }

                        ?>
                        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
                          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.
                            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
                              1. la c'est ma faute pour fputs jé mi ca de tete sans regarder le menuel php
                            • 1
                            • 2