Insertion SQL, comparaison de variable avec fichier .txt - PHP - Programmation
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 ?
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
Marsh Posté le 06-07-2006 à 11:39:03
Note que dès que la dernière ligne de 'mots.txt' ne contient pas $mot, ton $SAVE est forcément FALSE.
Marsh Posté le 06-07-2006 à 11:39:29
Une solution simple consiste à faire:
Code :
|
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
Marsh Posté le 06-07-2006 à 11:39:54
nycius a écrit : oui en print_r j'ai tout |
Mea culpa : de ton fichier 'mots.txt'
Marsh Posté le 06-07-2006 à 11:42:23
mon fichiers mots.txt est comme ca :
mot1
mot2
mot3
etc...
Marsh Posté le 06-07-2006 à 11:43:55
anapajari a écrit : Une solution simple consiste à faire:
|
Windows fait des retours à la ligne avec des \r\n : ça te ferait des lignes de tableau vide
pourquoi personne veut utiliser la fonction file() ?
Marsh Posté le 06-07-2006 à 11:45:50
Essaie avec ça peut être
Code :
|
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 ?
Marsh Posté le 06-07-2006 à 11:46:16
nycius a écrit : Salut,
|
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 :
|
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 |
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.
Marsh Posté le 06-07-2006 à 11:53:12
Ouais mais là, ça devient compliquer...
Tu serais presque obliger de faire un fclose
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 |
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 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 ?
|
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.
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
Marsh Posté le 06-07-2006 à 11:57:55
Master p a écrit : |
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.
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
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
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 !
Marsh Posté le 06-07-2006 à 12:02:24
nycius a écrit : logiquement avec ca : if (!strpos($mot, file_get_contents("mots.txt" )) |
Affiche echo file_get_contents("mots.txt" ); pour voir.
Marsh Posté le 06-07-2006 à 12:03:02
guitou12 a écrit : C'est pas bête ça |
Mais arrêtez avec vos $save = "no";
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.
Marsh Posté le 06-07-2006 à 12:07:25
Hermes le Messager a écrit : Et donc ? |
Pour t'aider, jouons à trouver le mots `canard` :
Code :
|
Ici le mot `canard` est présent dans le texte, mais seulement dans la ligne 2
Voilà, c'était pour t'aider
Marsh Posté le 06-07-2006 à 12:08:45
Au fait, tu liras la doc la prochaine fois, tu seras gentil.
Code :
|
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. |
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" )
Marsh Posté le 06-07-2006 à 12:09:39
Master p a écrit : Pour t'aider, jouons à trouver le mots `canard` :
|
Mais on s'en branle puisqu'il ne cherche pas la ligne où le mot est présent.
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. |
Marsh Posté le 06-07-2006 à 12:22:13
anapajari a écrit : Une solution simple consiste à faire:
|
Ca semble marcher avec cette méthode.
Marsh Posté le 06-07-2006 à 12:43:46
ReplyMarsh 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.
|
Marsh Posté le 06-07-2006 à 12:47:11
ReplyMarsh Posté le 06-07-2006 à 12:48:32
ReplyMarsh 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 !!!
ç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 |
Marsh Posté le 06-07-2006 à 13:39:09
Hermes le Messager a écrit : Mais arrêtez avec vos $save = "no"; |
Ben évidemment que c'est pas propre mais c'était pour garder son code d'origine...
Marsh Posté le 06-07-2006 à 15:45:12
Hermes le Messager a écrit : maibiensur |
Ca ne marche pas, il me dit que le mot est pas dans la liste mots.txt alors qu'il y est
Marsh Posté le 06-07-2006 à 16:05:22
Bah ecoute, voici ce que j'ai fait :
Code :
|
si hop est contendu dans mots.txt il me met quand meme OK
Marsh Posté le 06-07-2006 à 16:27:33
nycius a écrit : Bah ecoute, voici ce que j'ai fait :
|
il manque un )
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 :