|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Bien le bonjour à tous, voila, je reviens vers vous, car je patauge avec un de mes scripts.
Le script est tout con, il ne fait pas grand-chose: 1°/-Vérifier la présence d'un fichier. 2°/-Ouvrir le fichier. 3°/-Lire chaque ligne. 4°/-eclater chaque ligne grâce à preg_split (le pattern etant un espace). 5°/-Prendre chaque ligne et l'envoyer en BDD en faisant en sorte que chaque partie éclatée correspondent à un champs dans la table donnée. Voici ce que je fais pour l'instant: Code :
array ( [0] = 1320.516, [1] = GET, [2] = http://url.com etc); j'ai donc tenté d'afficher le resultat de keywords mais j'ai une erreur sur l'utilisation de foreache, je sais que celui-ci n'accepte en entrée que des tableau apparement, mais fgets ne sort pas de tableau, et l'utilisation de file(); ne fonctionne pas plus. Merci de votre aide par avance |
||
|
|
00
|
|
|
#2 | ||||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Bien, pour infos j'ai contourné mon problème de façon plutôt barbare
mais j'ai encore un souci, à savoir que le fichier que je parse, contient des espaces et des retours à la lignes. Le hic c'est que juste après, je fais un preg_split qui viens donc me splitter toutes les string contenues entre ces espaces (grâce à \s+) et donc, je me retrouve avec un tableau de ce type là: Code :
Code :
Je ne sais pas trop comment éviter ce genre de soucis PS: Pour ceux que ça interessent, voici comment j'ai fais pour le foreach: Code :
|
||||||
|
|
00
|
|
|
#3 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Voici une solution plus simple:
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Merci de ton aide,
Donc si je comprend bien ton exemple, je créer un nouvel objet de gestion de fichier que tu nomme $file et auquel tu défini des propriétés: Lire le fichier en tant que CSVFile. Le caractère de séparation étant l'espace. Ensuite, je ne comprend pas pourquoi tu utilise liste au lieu de array? Pareil, pourquoi je ne trouve pas les fonctions suivantes chez php.net? Execute(); et Prepare(); Merci de ton aide en tous cas. EDIT: OK donc de ce que j'ai trouvé exec() et prepare() sont des méthodes de la classe PDOStatement? c'est bien ça? Dans ce cas, n'aurais-tu pas oublié un $kekchose = new pdo($dsn,$username...);? |
|
|
00
|
|
|
#5 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
L'instruction "list" permet de setter plusieurs variables à la fois en utilisant un tableau, chaque offset du tableau est mis dans la variable de même position dans la liste.
Voir: http://php.net/manual/en/function.list.php execute et prepare font ici référence aux méthodes PDOStatement::execute et PDO::prepare de PDO. Cela permet de créer une requête préparée au niveau de mysql afin de dissocier les traitements des données (sécurité) et d'accélérer les transferts en n'envoyant au travers d'execute uniquement les données utiles et non pas la requête entière. Voir: http://julp.developpez.com/php/pdo/#sommaire
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#6 | |
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Merci à toi pour les infos, je vais bûcher ça
En fait, je ne savais pas que comme pour les fonctions, php fournissait des classes internes au language. Je vais regarder un peu plus, c'est dommage que comme pour la function_list ils ne fournissent pas une Classes_list pour la recherche. Sinon, concernant ma question de création de ton objet PDO? Pour rappel: Citation:
|
|
|
|
00
|
|
|
#7 | |||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Si, tu as la documentation des classes du langages:
- SPL: http://www.php.net/manual/en/book.spl.php (FileObject en fait partie) - PDO: http://www.php.net/manual/en/book.pdo.php Citation:
Voici comment instancier un PDO: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||
|
00
|
|
|
#8 | ||||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Donc, j'ai travaillé sur ce que tu m'as donné, mais j'ai encore un petit souci.
Voici mon code: Code :
Je veux que SplFileObject m’enlève tous les espaces afin de ne récupérer que les strings qui m’intéresses. Hors la, il fait bien le job pour le premier espace, mais pas pour les suivants. C'est à dire que lorsqu'il trouve une tabulation horizontale ou plusieurs espaces l'un après l'autres, il me met ces espaces dans le tableau résultant, ce qui n'est pas correct. Voici ce que j'obtiens: Code :
Code :
A savoir qu'avec la fonction preg_split quand je lui passe l'argument PREG_SPLIT_NO_EMPTY il vire les espaces et tout autres valeurs vide. C'est possible de faire pareil? |
||||||
|
|
00
|
|
|
#9 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Tu vas devoir extraire les données à la main.
Tu peux faire comme ça je pense: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
00
|
|
|
#10 | ||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Benjamin, merci de ton aide sur ce problème.
Entre temps, j'ai un peu avancé, mais je bloque maintenant avec la fonction list() qui me sort des données assez invraisemblables. Code :
devrait me sortir quelque chose comme: Citation:
Par contre moi là j'ai un bon gros charabia de ce style: Citation:
Donc, je ne comprend pas ce qu'il se passe avec la fonction list. J'ai beau regarder la doc php et faire des test sur du code simple, je n'obtient pas le résultat attendu. |
||||
|
|
00
|
|
|
#11 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Encore une fois list n'est pas une fonction mais un mot clé comme array par exemple, c'est d'ailleurs son pendant
Pour pouvoir répondre à ta question j'aurais besoin que tu me mettes un var_dump de la variable $index dans ton foreach. Ce qui m'étonne c'est que tu mettes ce foreach dans la bouche while, je peux voir un extrait du log squid stp ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#12 | ||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Bon, je crois que je vais devenir dingue, lorsque je sort un var_dump de $index, dans la boucle foreach, que ce soit avant ou bien après le mot clé list(), j'ai bien un resultat cohérent avec ce que j'attend, à savoir:
Code :
Code :
|
||||
|
|
00
|
|
|
#13 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Là y'a quelque chose qui m'échape. Essaie un bon vieux var_dump($index[0]); histoire de rire.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#14 | ||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Je viens de faire le var_dump et voici le résultat:
Code :
Enfin si, ce sont des morceaux de la string splité, mais l'indexage est étrange, il ne prend en index 0 que le premier octet de chaque string. Genre pour les deux premieres entrées: Code :
|
||||
|
|
00
|
|
|
#15 | ||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
OK ALLELUIA, j'ai trouvé
En fait, le foreach est de trop, en effet, le while traite déjà ligne par ligne et genere un tableau de type: C'est donc sur ce tableau que je doit traiter les index, et comme je suis déjà dans une boucle, le foreach est inutile car sinon il index l'index du premier tableau d'ou les sortie uniquement sur les premières string de chaque partie. Je sais pas si je suis trés clair sur l'explication XD Donc maintenant j'ai un code bien plus propre: Code :
Maintenant, je m'attaque à la partie, envoie en BDD, je ne clôt donc pas tout de suite le sujet. Je clôturerais dés que j'aurais fini complètement, ça donnera un exemple de parsing et envoie des données. Un GRAND merci pour ton aide Benjamin. |
||
|
|
00
|
|
|
#16 | ||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Bon bah comme fallait bien finir par une petite erreur.
Tous mon script semble fonctionner, MAIS rien n'arrive en BDD. Si je test les exceptions renvoyées WALOU, j'ai pas une seul erreur retourné. J'ai comme l'impression que j'ai manqué quelque chose. Voici le contenu d'un var_dump de mon objet: Code :
Code :
Merci de ton aide par avance. |
||||
|
|
00
|
|
|
#17 | |||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Pour ton erreur d'insertion, sache que PDOStatement ne lève pas d'exception lors de l'execution, il renvoie un status booléen. Je te recommande de procéder comme suit: Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||
|
00
|
|
|
#18 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Mea culpa.
Oui en effet tu l'avais dit Pour ce qui est des retours d'erreurs j'utilise errorInfo et errorCode parce que errorInfo me fournis un code de retour qui signifie SQLState error, qui ici correspond à: 3D000 = NO_DB_ERROR = Je suis un boulet, j'ai pas sélectionné la base à inscrire :s Je reviens vers toi une fois que j'ai résolu mon souci Par contre, les Objets PHP sont ... étranges pour moi. J'ai pas l'habitude des objets, même en C++ je fais beaucoup de procédurale et très peu d'objet. Par contre, je dois reconnaître que c'est super efficace, et la syntaxe est plus jolie |
|
|
00
|
|
|
#19 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Le paradigme objet apporte bien plus que la beauté du code
A mon sens, seule la version 5.3 de PHP propose un support de l'objet digne de ce nom. Je te recommande vivement de lire quelques articles sur la question (il y en a un paquet sur developper.com). Mais avant tout, assure-toi de bien connaitre le principe de base. Si tu as des soucis, tu peux toujours poser tes questions sur le forum Si ça peux t'aider, tu as un cas d'héritage / composition dans ces classes (et puis ce package pourra peut être te servir): http://www.developpez.net/forums/d10...s/#post5894017
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
10
|
|
|
#20 | ||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2007 Messages : 505 ![]() |
Merci pour tes conseils et exemples.
Pour l'instant j'améliore mon script, à savoir que j'essaye de récupérer la valeur de ma dernière ligne (son numéro). Ca OK j'y arrive avec : Code :
Par contre, une question me trotte dans la tête, est-ce que mon objet est détruit à la fin de la boucle while? Parce que si je fait la chose suivante: Code :
Maintenant j'ai comme l'intuition que mon objet est détruit à la fin du while, vue que celui-ci à lu tout le fichier jusqu'à la fin. |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com