Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
823 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Insertion SQL, comparaison de variable avec fichier .txt

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Insertion SQL, comparaison de variable avec fichier .txt

n°1401794
nycius
Ich liebe dich !
Posté le 06-07-2006 à 11:25:52  profilanswer
 

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. }

mood
Publicité
Posté le 06-07-2006 à 11:25:52  profilanswer
 

n°1401816
guitou12
Dev php à mi-temps :D
Posté le 06-07-2006 à 11:35:40  profilanswer
 

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
n°1401819
nycius
Ich liebe dich !
Posté le 06-07-2006 à 11:38:26  profilanswer
 

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

n°1401822
Master p
My new cock ring :D
Posté le 06-07-2006 à 11:39:03  profilanswer
 

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

n°1401825
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-07-2006 à 11:39:29  profilanswer
 

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

n°1401826
guitou12
Dev php à mi-temps :D
Posté le 06-07-2006 à 11:39:54  profilanswer
 

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'

n°1401827
nycius
Ich liebe dich !
Posté le 06-07-2006 à 11:42:23  profilanswer
 

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

n°1401831
Master p
My new cock ring :D
Posté le 06-07-2006 à 11:43:55  profilanswer
 

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() ?

n°1401833
guitou12
Dev php à mi-temps :D
Posté le 06-07-2006 à 11:45:50  profilanswer
 

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 ?

n°1401834
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 11:46:16  profilanswer
 

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. }

mood
Publicité
Posté le 06-07-2006 à 11:46:16  profilanswer
 

n°1401836
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 11:49:01  profilanswer
 

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

n°1401837
Master p
My new cock ring :D
Posté le 06-07-2006 à 11:53:12  profilanswer
 

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

n°1401838
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-07-2006 à 11:53:38  profilanswer
 


 

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.
 

n°1401840
nycius
Ich liebe dich !
Posté le 06-07-2006 à 11:56:55  profilanswer
 

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

n°1401843
Master p
My new cock ring :D
Posté le 06-07-2006 à 11:57:55  profilanswer
 

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.


n°1401844
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 11:59:08  profilanswer
 

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:  

n°1401848
nycius
Ich liebe dich !
Posté le 06-07-2006 à 12:01:04  profilanswer
 

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

n°1401849
guitou12
Dev php à mi-temps :D
Posté le 06-07-2006 à 12:01:10  profilanswer
 

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
n°1401852
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:02:24  profilanswer
 

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

n°1401855
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:03:02  profilanswer
 

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:

n°1401857
nycius
Ich liebe dich !
Posté le 06-07-2006 à 12:04:24  profilanswer
 

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

n°1401862
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:05:23  profilanswer
 

et que vaut $mot ?

n°1401863
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:06:28  profilanswer
 

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

n°1401864
Master p
My new cock ring :D
Posté le 06-07-2006 à 12:07:25  profilanswer
 

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
n°1401866
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:08:45  profilanswer
 

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

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

n°1401867
nycius
Ich liebe dich !
Posté le 06-07-2006 à 12:09:26  profilanswer
 

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" )

n°1401868
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:09:39  profilanswer
 

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:  

n°1401869
Master p
My new cock ring :D
Posté le 06-07-2006 à 12:10:57  profilanswer
 

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]

n°1401874
nycius
Ich liebe dich !
Posté le 06-07-2006 à 12:22:13  profilanswer
 

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.

n°1401896
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:43:46  profilanswer
 

nycius a écrit :

Ca semble marcher avec cette méthode.


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

n°1401898
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:44:12  profilanswer
 

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))



n°1401904
nycius
Ich liebe dich !
Posté le 06-07-2006 à 12:47:11  profilanswer
 

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

n°1401906
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 12:48:32  profilanswer
 

nycius a écrit :

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


 
maibiensur  :sleep:  

n°1401908
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-07-2006 à 12:48:47  profilanswer
 

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


 

n°1401944
guitou12
Dev php à mi-temps :D
Posté le 06-07-2006 à 13:39:09  profilanswer
 

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:

n°1402064
nycius
Ich liebe dich !
Posté le 06-07-2006 à 15:45:12  profilanswer
 


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

n°1402087
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-07-2006 à 16:02:20  profilanswer
 

maibiensur  :sleep:

n°1402091
nycius
Ich liebe dich !
Posté le 06-07-2006 à 16:05:22  profilanswer
 

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
n°1402115
Hermes le ​Messager
Breton Quiétiste
Posté le 06-07-2006 à 16:27:33  profilanswer
 

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 )

n°1402116
nycius
Ich liebe dich !
Posté le 06-07-2006 à 16:27:56  profilanswer
 

meme en le rajoutant ca ne fonctionne pas

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Insertion SQL, comparaison de variable avec fichier .txt

 

Sujets relatifs
reccurence de mots dans un fichier (excel ou html)Prendre des données dans un fichier actif.
SQL Server + pb sous requetesdétecter une insertion de ligne
[SGDB] PL/SQL : Fonction qui retourne un curseurProblème de type dans une requête SQL
modifier chemin du fichier racine (index.php)Lire plusieurs lignes d'un fichier txt avec de l'AJAX
[SQL] Regrouper des tuples par familles...Lire un fichier en js
Plus de sujets relatifs à : Insertion SQL, comparaison de variable avec fichier .txt


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR