Insertion SQL, comparaison de variable avec fichier .txt

Insertion SQL, comparaison de variable avec fichier .txt - PHP - Programmation

Marsh Posté le 06-07-2006 à 11:25:52    

Salut,
 
J'ai un soucis sur une insertion SQL qui doit se faire uniquement si le contenu d'une variable n'est pas présente dans un fichier .txt
En gros j'ai une variable $mot , si le contenu de $mot est présent dans une des lignes de mon fichier mots.txt l'insertion SQL ne peut se faire.
 
J'ai essayer des bidouilles mais cela ne fonctionne pas :
 

Code :
  1. $mots = explode("\n",file_get_contents("mots.txt" ));
  2. for($i=0;$i<sizeof($mots);$i++)
  3.     {
  4.       $pos = strpos($mot, $mots[$i]);
  5.       if($pos === FALSE)
  6.         $SAVE = 'ok';
  7.       else
  8.         $SAVE = 'no';
  9.     }
  10.    
  11.     echo $SAVE;
  12. // SI C'EST OK ON ENREGISTRE
  13. if($SAVE == 'ok')
  14. {
  15.   $sql = "INSERT ....";
  16.   $req = mysql_query($sql);
  17. }

Reply

Marsh Posté le 06-07-2006 à 11:25:52   

Reply

Marsh Posté le 06-07-2006 à 11:35:40    

si tu fais un print_r de mots tu as bien le contenu de ton fichier ?
 
On pourrai avoir quelques lignes du fichier pour voir ?


Message édité par guitou12 le 06-07-2006 à 11:36:28
Reply

Marsh Posté le 06-07-2006 à 11:38:26    

oui en print_r j'ai tout
 
le fichier est comme ca, ya juste l'insertion et la comparaison

Reply

Marsh Posté le 06-07-2006 à 11:39:03    

[:pingouino]
Note que dès que la dernière ligne de 'mots.txt' ne contient pas $mot, ton $SAVE est forcément FALSE.

Reply

Marsh Posté le 06-07-2006 à 11:39:29    

Une solution simple consiste à faire:

Code :
  1. $mots = preg_split("[\s|\n|\r]", file_get_contents("mots.txt" ));
  2. if( in_array($mot, $mots){
  3. //tu fais ton insertion
  4. }


Par contre si tu as un gros fichier c'est franchement à chier comme solution vu que tu te trouves avec un enorme tableau et que ça risque de ramer.
Dans ce cas la au lieu de faire un file_get_contents et récupérer tout le fichier en une fois, tu fais pareil mais en lisant ton fichier ligne à ligne via fread

Reply

Marsh Posté le 06-07-2006 à 11:39:54    

nycius a écrit :

oui en print_r j'ai tout
 
le fichier est comme ca, ya juste l'insertion et la comparaison


 
Mea culpa : de ton fichier 'mots.txt'

Reply

Marsh Posté le 06-07-2006 à 11:42:23    

mon fichiers mots.txt est comme ca :
mot1
mot2
mot3
etc...

Reply

Marsh Posté le 06-07-2006 à 11:43:55    

anapajari a écrit :

Une solution simple consiste à faire:

Code :
  1. $mots = preg_split("[\s|\n|\r]", file_get_contents("mots.txt" ));
  2. if( in_array($mot, $mots){
  3. //tu fais ton insertion
  4. }


Par contre si tu as un gros fichier c'est franchement à chier comme solution vu que tu te trouves avec un enorme tableau et que ça risque de ramer.
Dans ce cas la au lieu de faire un file_get_contents et récupérer tout le fichier en une fois, tu fais pareil mais en lisant ton fichier ligne à ligne via fread


Windows fait des retours à la ligne avec des \r\n : ça te ferait des lignes de tableau vide :o
pourquoi personne veut utiliser la fonction file() ?

Reply

Marsh Posté le 06-07-2006 à 11:45:50    

Essaie avec ça peut être  
 

Code :
  1. $pos = strpos($mot, trim($mots[$i]));


 
PS: quand tu dis que ça ne fonctionne pas c'est à quel niveau que ça coince ? ton mot est présent et ca ne le détecte pas ?

Reply

Marsh Posté le 06-07-2006 à 11:46:16    

nycius a écrit :

Salut,
 
J'ai un soucis sur une insertion SQL qui doit se faire uniquement si le contenu d'une variable n'est pas présente dans un fichier .txt
En gros j'ai une variable $mot , si le contenu de $mot est présent dans une des lignes de mon fichier mots.txt l'insertion SQL ne peut se faire.
 
J'ai essayer des bidouilles mais cela ne fonctionne pas :
 

Code :
  1. $mots = explode("\n",file_get_contents("mots.txt" ));
  2. for($i=0;$i<sizeof($mots);$i++)
  3.     {
  4.       $pos = strpos($mot, $mots[$i]);
  5.       if($pos === FALSE)
  6.         $SAVE = 'ok';
  7.       else
  8.         $SAVE = 'no';
  9.     }
  10.    
  11.     echo $SAVE;
  12. // SI C'EST OK ON ENREGISTRE
  13. if($SAVE == 'ok')
  14. {
  15.   $sql = "INSERT ....";
  16.   $req = mysql_query($sql);
  17. }



 
1) Puisque tu ne rcupères pas la ligne où se trouve ton mot, à quoi ça sert de décomposer ton fichier en ligne ?
 
un simple :  
 

Code :
  1. if (!strpos($mot, file_get_contents("mots.txt" )))
  2. {
  3. // requête.
  4. }

Reply

Marsh Posté le 06-07-2006 à 11:46:16   

Reply

Marsh Posté le 06-07-2006 à 11:49:01    

Master p a écrit :

Windows fait des retours à la ligne avec des \r\n : ça te ferait des lignes de tableau vide :o
pourquoi personne veut utiliser la fonction file() ?


 
C'est quoi cette blague ?
 
Il faut TOUJOURS ouvrir/écrire les fichiers via fopen avec l'option b (pour binaire) et plus de problème. :o

Reply

Marsh Posté le 06-07-2006 à 11:53:12    

Ouais mais là, ça devient compliquer...
Tu serais presque obliger de faire un fclose [:dawao]

Reply

Marsh Posté le 06-07-2006 à 11:53:38    


 

Master p a écrit :

Windows fait des retours à la ligne avec des \r\n : ça te ferait des lignes de tableau vide :o
pourquoi personne veut utiliser la fonction file() ?


Et quel est le problème d'avoir des lignes vides??? Waouuh j'utilise 3 octets de plus en mémoire c'est ça???
 
Vu qu'en fait tu as un mot par ligne, la solution que je donnais n'a strictement aucun intéret :o Utilise plus ça:

Hermes le Messager a écrit :

1) Puisque tu ne rcupères pas la ligne où se trouve ton mot, à quoi ça sert de décomposer ton fichier en ligne ?
un simple :  

Code :
  1. if (!strpos($mot, file_get_contents("mots.txt" )))
  2. {
  3. // requête.
  4. }



Mais je continue à mettre un leger bémol, si le fichier fait genre 10.000 lignes je déconseille d'utiliser un strpos directement sur le resultat du file_get_contents.
Dans ce cas, il te faudra parcourir le fichier ligne à ligne.
 

Reply

Marsh Posté le 06-07-2006 à 11:56:55    

avec ca il m'indique que le mot existe pas alors qu'il est bien dans le fichier .txt; en gros la condition marche pas

Reply

Marsh Posté le 06-07-2006 à 11:57:55    

Master p a écrit :

[:pingouino]
Note que dès que la dernière ligne de 'mots.txt' ne contient pas $mot, ton $SAVE est forcément FALSE.


Reply

Marsh Posté le 06-07-2006 à 11:59:08    

nycius a écrit :

avec ca il m'indique que le mot existe pas alors qu'il est bien dans le fichier .txt; en gros la condition marche pas


 
Et donc ?
 
C'est quoi la différence entre :
 
- Le mot est dans le fichier.
- Le mot est présent dans l'une des lignes du fichier.
 
 :heink:  

Reply

Marsh Posté le 06-07-2006 à 12:01:04    

logiquement avec ca : if (!strpos($mot, file_get_contents("mots.txt" ))
il devrait pas me lancer la requete si le $mot est présent dans n'importe quelle ligne de mots.txt ? or la c'est pas le cas

Reply

Marsh Posté le 06-07-2006 à 12:01:10    

Master p a écrit :

Note que dès que la dernière ligne de 'mots.txt' ne contient pas $mot, ton $SAVE est forcément FALSE.


 
C'est pas bête ça  :lol:  
 
Il faut penser à sortir de ta boucle une fois le mot trouvé, ou alors pour faire moin propre tu initialises $SAVE = 'no' avant ta boucle et que tu le mettes à ok seulement si tu trouves le mot !

Message cité 1 fois
Message édité par guitou12 le 06-07-2006 à 12:01:40
Reply

Marsh Posté le 06-07-2006 à 12:02:24    

nycius a écrit :

logiquement avec ca : if (!strpos($mot, file_get_contents("mots.txt" ))
il devrait pas me lancer la requete si le $mot est présent dans n'importe quelle ligne de mots.txt ? or la c'est pas le cas


 
Affiche echo file_get_contents("mots.txt" ); pour voir.  :o

Reply

Marsh Posté le 06-07-2006 à 12:03:02    

guitou12 a écrit :

C'est pas bête ça  :lol:  
 
Il faut penser à sortir de ta boucle une fois le mot trouvé, ou alors pour faire moin propre tu initialises $SAVE = 'no' avant ta boucle et que tu le mettes à ok seulement si tu trouves le mot !


 
Mais arrêtez avec vos $save = "no";  :sleep:

Reply

Marsh Posté le 06-07-2006 à 12:04:24    

il m'affiche bien mon fichier :
mot1
mot2
mot3
etc...

Reply

Marsh Posté le 06-07-2006 à 12:05:23    

et que vaut $mot ?

Reply

Marsh Posté le 06-07-2006 à 12:06:28    

Fait un test avec un mot précis. Vérifie que ce mot est présent dans ton fichier manuellement et qu'avant que ma ligne soit utilisée, $mot a bien la valeur que tu veux. Bref, apprend à debugguer avec des echo bien placés. :o

Reply

Marsh Posté le 06-07-2006 à 12:07:25    

Hermes le Messager a écrit :

Et donc ?
 
C'est quoi la différence entre :
 
- Le mot est dans le fichier.
- Le mot est présent dans l'une des lignes du fichier.
 
 :heink:


Pour t'aider, jouons à trouver le mots `canard` :

Code :
  1. Lorem ipsum dolor sit amet, consectetuer
  2. adipiscing elit. Nullam mollis. Duis nisi erat, canard
  3. rhoncus non, vestibulum vel, vulputate eget, augue.
  4. Cras non lacus nec velit sodales egestas. Donec
  5. tincidunt, nibh eu scelerisque auctor, lacus metus
  6. dapibus est, ac consequat neque erat sed sem.


Ici le mot `canard` est présent dans le texte, mais seulement dans la ligne 2
 
Voilà, c'était pour t'aider [:dawao]

Message cité 1 fois
Message édité par Master p le 06-07-2006 à 12:07:59
Reply

Marsh Posté le 06-07-2006 à 12:08:45    

Au fait, tu liras la doc la prochaine fois, tu seras gentil.
 

Code :
  1. if (!strpos(file_get_contents("mots.txt" ), $mot))

Reply

Marsh Posté le 06-07-2006 à 12:09:26    

Hermes le Messager a écrit :

Fait un test avec un mot précis. Vérifie que ce mot est présent dans ton fichier manuellement et qu'avant que ma ligne soit utilisée, $mot a bien la valeur que tu veux. Bref, apprend à debugguer avec des echo bien placés. :o


 
Merci c'est ce que j'ai fait, j'ai mis un mot en dur pour le comparer a file_get_contents("mots.txt" ) seulement il trouve pas, il arrive pas a aller chercher dans le file_get_contents("ips.txt" )

Reply

Marsh Posté le 06-07-2006 à 12:09:39    

Master p a écrit :

Pour t'aider, jouons à trouver le mots `canard` :

Code :
  1. Lorem ipsum dolor sit amet, consectetuer
  2. adipiscing elit. Nullam mollis. Duis nisi erat, canard
  3. rhoncus non, vestibulum vel, vulputate eget, augue.
  4. Cras non lacus nec velit sodales egestas. Donec
  5. tincidunt, nibh eu scelerisque auctor, lacus metus
  6. dapibus est, ac consequat neque erat sed sem.


Ici le mot `canard` est présent dans le texte, mais seulement dans la ligne 2
 
Voilà, c'était pour t'aider [:dawao]


 
Mais on s'en branle puisqu'il ne cherche pas la ligne où le mot est présent.  :sleep:  

Reply

Marsh Posté le 06-07-2006 à 12:10:57    

Hermes le Messager a écrit :

Mais on s'en branle puisqu'il ne cherche pas la ligne où le mot est présent.  :sleep:


[:rofl]

Reply

Marsh Posté le 06-07-2006 à 12:22:13    

anapajari a écrit :

Une solution simple consiste à faire:

Code :
  1. $mots = preg_split("[\s|\n|\r]", file_get_contents("mots.txt" ));
  2. if( in_array($mot, $mots){
  3. //tu fais ton insertion
  4. }


Par contre si tu as un gros fichier c'est franchement à chier comme solution vu que tu te trouves avec un enorme tableau et que ça risque de ramer.
Dans ce cas la au lieu de faire un file_get_contents et récupérer tout le fichier en une fois, tu fais pareil mais en lisant ton fichier ligne à ligne via fread


 
Ca semble marcher avec cette méthode.

Reply

Marsh Posté le 06-07-2006 à 12:43:46    

nycius a écrit :

Ca semble marcher avec cette méthode.


 
T'as lu mon message précédent ?  :o

Reply

Marsh Posté le 06-07-2006 à 12:44:12    

Hermes le Messager a écrit :

Au fait, tu liras la doc la prochaine fois, tu seras gentil.
 

Code :
  1. if (!strpos(file_get_contents("mots.txt" ), $mot))



Reply

Marsh Posté le 06-07-2006 à 12:47:11    

oui et idem ca ne fonctionne pas en faisant ca :(

Reply

Marsh Posté le 06-07-2006 à 12:48:32    

nycius a écrit :

oui et idem ca ne fonctionne pas en faisant ca :(


 
maibiensur  :sleep:  

Reply

Marsh Posté le 06-07-2006 à 12:48:47    

nycius a écrit :

Ca semble marcher avec cette méthode.


même moi qui l'ai ecrit je te dis de pas t'en servir !!! :o
ça sert a rien vu que tu n'as qu'un seul mot sur chacune de tes lignes.
THE SOLUCE = ce qu'Hermes t'a ecrit!!!
 

Spoiler :

je garde mon bémol sur l'efficacité du strpos sur un fichier de 10.000lignes :o


 

Reply

Marsh Posté le 06-07-2006 à 13:39:09    

Hermes le Messager a écrit :

Mais arrêtez avec vos $save = "no";  :sleep:


 
Ben évidemment que c'est pas propre mais c'était pour garder son code d'origine...  :kaola:

Reply

Marsh Posté le 06-07-2006 à 15:45:12    


 
Ca ne marche pas, il me dit que le mot est pas dans la liste mots.txt alors qu'il y est

Reply

Marsh Posté le 06-07-2006 à 16:02:20    

maibiensur  :sleep:

Reply

Marsh Posté le 06-07-2006 à 16:05:22    

Bah ecoute, voici ce que j'ai fait :
 

Code :
  1. $mot = 'hop';
  2.      
  3.       // ON REGARDE SI L'IP N'EST PAS UNE IP DE CRAWLER
  4.       if(!strpos(file_get_contents("mots.txt" ), $mot)
  5.       {
  6.         echo 'ok';
  7.       }


 
si hop est contendu dans mots.txt il me met quand meme OK

Message cité 1 fois
Message édité par nycius le 06-07-2006 à 16:06:02
Reply

Marsh Posté le 06-07-2006 à 16:27:33    

nycius a écrit :

Bah ecoute, voici ce que j'ai fait :
 

Code :
  1. $mot = 'hop';
  2.      
  3.       // ON REGARDE SI L'IP N'EST PAS UNE IP DE CRAWLER
  4.       if(!strpos(file_get_contents("mots.txt" ), $mot)
  5.       {
  6.         echo 'ok';
  7.       }


 
si hop est contendu dans mots.txt il me met quand meme OK


 
il manque un )

Reply

Marsh Posté le 06-07-2006 à 16:27:56    

meme en le rajoutant ca ne fonctionne pas

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed