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 pourrais tu donner la solution finale s'il te plait ?
    pour les suivants qui aurait le même problème

    merci =)
    1. bonsoir a tous

      j ai enfin trouver la solution merci touse de votre aide.
      1. bonjour je vien de modifier le code est le message d erreur ne s'affiche plus met le code ne marche pas

        <?php

        $words = file_get_contents('texte3.txt');

        $word = 'ligne7';
        if(ereg($word,$words)){
        echo "le mot existe";
        }else{
        $wa = "texte3.txt";
        $fr = fopen ($wa, "a+");
        fwrite ($fr,"a");
        echo "le mot n'existe pas";
        }

        ?>
        1. oui c est vrai j ai fait une erreur de frappe j ai mit text3.txt
          1. <?php

            $words = file_get_contents('texte3.txt');

            $word = 'ligne7';
            if(ereg($word,$words)){
            echo "le mot existe";
            }else{
            $fr = fopen ($words, "a+");
            fwrite ($fr,"a");
            echo "le mot n'existe pas";
            }

            ?>

            maintenant il m affiche un nouveau message d erreur

            Warning: fopen(ligne1 ligne2 ligne3 ligne4 ligne5): failed to open stream: Invalid argument in c:\program files\easyphp1-8\www\nouveau dossier (3)\testa.php on line 9

            Warning: fwrite(): supplied argument is not a valid stream resource in c:\program files\easyphp1-8\www\nouveau dossier (3)\testa.php on line 10
            le mot n'existe pas
            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
            2. 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. 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. 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. 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. 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. :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. 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. 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. 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. 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. 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
                                  • 2