Bonjour,
Je suis débutant stagiaire en entreprise et je dois monter seul une appli, dans mon probleme je dois recuperer des données qui son sous une syntaxe particuliere pour ensuite les inserer dans une base de donnée mysql.
Je reçois des logs de données que je dois analyser puis inserer dans une bdd,
Voici si joint la syntaxe des données recupere :
[START]client.mail
exemple@exemple.com
[END]client.mail
[START]client.ville
Marseille
[END]client.ville
Cette syntaxe peut ce repeter plus d'une centaine de fois.
Je vous presente si joint mon algo avec lequel je dois lui donner vie en php.
//dossier ou ce trouve tout mes fichiers logs
$full_log = file_get_contents('/Log/nomdufichier.dat');
puis
foreach( $full_log as $row => $value ) {
echo $value."<br />\n"; // Pour les avoir par ligne
1. si $value commence par [START] : je recuperes ce qu'il y a après dans $nom_variable (je recupere la chaine de caractere avant le ' . ' point
dans une variable $mot1 elle contient donc la table puis je recupere la chaine de caractere apres le ' . ' point dans une variable $mot2 qui contient la colonne)
exemple : [START]machine.licence : $nom_variable = 'machine.licence' et $mot1 = 'machine' et $mot2 = 'licence'
j'initialises une variable $contenu = "" et une autre $fin = '[END]' . $nom_variable
2. si $value ne commence ni par [START] ni par [END] : j'ajoutes $value à la variable $contenu (comme ça je gères les données qui sont sur plusieurs lignes (il n'y en a qu'un c'est le log en textuel !!!)
3. si $value = [END] . $nom_variable : j'ai terminé de récupérer le contenu !!!
j'ai donc $nom_variable, $mot1 et $mot2 et puis le contenu dans $contenu
Avec ces variable je peux donc utiliser INSERT INTO ma table ( ma colonne) VALUES ma valeur.
Ainsi creer une boucle sur tout mon fichier et tout les autres qui ce trouve dans le dossier.
Entourez votre code pour bien le mettre en forme
Je voudrai un script php, sans doute trop demander mais ce serait génial ou au moins des billes pour y arriver
Ce que j'obtiens, des erreurs, un algo qui fait pas ce que je veux, une galere dans le choix de mes fonctions, bref troisieme jours que je suis dessus. J'en peux plus Aidez moi !!!
Je vous remercie d'avance pour toute vos aide apportés.
Bonjour.
Je voudrai un script php
Hors de question ça, en créant ton sujet tu as du bien remarqué le message contenu dans la notification qui est situé juste au dessus du formulaire de création :
Le forum permet l'entraide, ne postez pas un sujet en espérant que les gens créent le code à votre place.
Pour commencer, tu dis que tu obtiens des erreurs sans nous indiquer exactement lesqu'elles, ou tout du moins sans nous montrer les erreurs.
Ensuite, tu nous indiques les étapes que tu effectues, mais tu ne nous dis même pas celles que tu réussis et celles que tu ne réussis pas, tu devrais donc au moins nous montrer le code que tu as effectué concernant aux étapes que tu détailles.
Pour terminer, est-ce que tu utilises les expressions régulières ?
Montrer mon code serait inutile car je ne trouve pas les fonctions php qui me permettent de faire ce que je veux, j'ai fais des essaie avec des fonctions sans arriver au resultat désiré.
Quand a un script je me doutais que c'etait trop demander, ça fait 3 jours que je bloque sur cette fonctionnalité je demandais simplement.
Et non je n'ai pas essayé avec les expressions régulieres, je vais voir avec.
Salut,
Pour annalyser tes blocks de données, qui se répètent d'après ce que j'ai compris. Je ferai un REGEX, ca permettrait d'extraire les données que tu souhaites.
Exemple:
https://regex101.com/r/pmMh5B/1
preg_match_all('/^\[START\]client\.(?<type>\w+)\n(?<value>.*)\n\[END\]client\.\w+$/m', $str, $matches);
$type = $matches['type'];
$value = $matches['value']
Ok je vais bosser les REGEX je ne sais pas du tout comment ça marche. Apparement de ce que j'ai vue ça pourrait m'aider à debuter un truc qui correspon à mon algo
@Neyla12: Tu vas arrêter de polluer les sujets du forum un jour ?
Celà fait plusieurs sujets sur lesquels tu postes un commentaire pour rien dire les concernants.
Je te remercie Balsakup je ne serai vraiment pas arrivé à pondre un truc dans le genre. Et merci pour l'outil, je ne le connaissais pas.
Une belle semaine qui commence avec un espoir de réussite, grandement merci.
Salut Balsakup j'ai repris ton regex car j'ai plusieurs tables et du coup faut que je traite aussi cette partie en regex " [START]client\ " du coup j'ai fais ça si tu peux me corriger :
preg_match_all('/^\[START\](?<table>\w+)\.(?<type>\w+)\n(?<value>.*)\n\[END\]w+$\.\w+$/m', $str, $matches);
$type = $matches['type'];
$value = $matches['value'];
$table = $matches['table'];
Par contre j'ai une question je ne comprends pas le $str il represente quoi ?
Merci du temps que tu m'accorde.
Salut,
Le $str
c'est le contenu de ton fichier
Petite correction.
w+
à la place de \w+
, et tu as mis un second caractère $
avant la fin alors que ce caractère signifie le fin
$str = file_get_contents('ton_fichier.txt');
preg_match_all('/^[START](?<table>\w+).(?<column>\w+)\n(?<value>.*)\n[END]\w+.\w+$/m', $str, $matches);
foreach ($matches as $match) {
$table = $match['table'];
$column = $match['column'];
$value = $match['value'];
// TODO ton insertion SQL
}
Salut Balsakup,
Voici ce que j'ai fais en suivant t'es indications,
$str = file_get_contents('../Log/DEV_7_20180506230900.dat') ;
var_dump($str);
preg_match_all('/^[START](?<table>\w+).(?<column>\w+)\n(?<value>.*)\n[END]\w+.\w+$/m', $str, $matches);
foreach ($matches as $match) {
//$table = $match['table'];
$table = isset($match['table']) ? $match['table'] : true;
//$column = $match['column'];
$column = isset($match['column']) ? $match['column'] : true;
//$value = $match['value'];
$value = isset($match['value']) ? $match['value'] : true;
var_dump($table);
J'ai utilisé le isset car j'avais une erreur notice : Undefined index
function insert(){
global $pdo;
$sql = ' INSERT INTO $table ($column) VALUES $value';
$result = $pdo->query($sql);
$insert = $result->fetchAll();
var_dump($insert);
le var_dump($sql); affiche INSERT INTO $table ($column) VALUES $value' (length=43)
Apres avoir verifié mainte fois ma connexion qui est fonctionnel je suppose que je dois me tromper soit dans le foreach ou dans ma petite fonction insert qui me sert a tester tout ça en locale.
J'ai aucune données qui s'insert dans ma bdd, et absolument aucune erreurs.
Merci à toi
' INSERT INTO $table ($column) VALUES $value'
Faut mettre des doubles qutes "
pour mettre des variables dans une chaine.
As-tu appris le PHP avant d'en faire ?
Ta requête n'est pas top non plus. Utilise plutôt les requêtes préparées.
$result->fetchAll(); ne sert à rien sur un INSERT INTO
$stmt = $pdo->prepare("INSERT INTO $matable($column) VALUES (:value)");
$result = $stmt->execute(compact('value'));
Je vois que tu as beaucoup de lacunes concernant PHP, PDO et SQL. Je te conseille d'apprendre ses langages avant, ça te permettra d'avoir un code de meilleur qualité et comprendre ce que tu fais.
En plus de ce que t'a dit Balsakup, tu as un autre problème dans ton code.
En faisant $table = isset($match['table']) ? $match['table'] : true;
, tu auras forcément des problèmes au niveau de ta requête SQL, donc au lieu d'utiliser la vérification de manière ternaire, tu devrais plutôt faire quelque chose comme :
if (isset($match['table'], $match['column'], $match['value'])) {
$table = $match['table'];
$column = $match['column'];
$value = $match['value'];
// Ta requête SQL, etc ...
}
Car quel est l'intérêt de définir une variable comme true
alors que tu as besoin de valeurs pour la base de données ?
Ok ça marche merci à toi.
Je suis issu d'une formation courte de 6 mois pour apprendre 7 langage differents dont 1 mois de php dans le cadre d'une reconvertion professionnel, je ne connaissai pas ces langages juste avant de commencer ma formation mais trés interessant par le metier et ce qui est possible de faire avec.
Developper des appli des site me plait mais je dois dire que j'ai pas eu des formateurs qui ont une methodogie adapté, ça etait ça pour certain.
Sinon je code principalement en poo et bien evidement j'utilise le prepare execute sur ma partie non local, la je test en local un bout de fonctionnalité essentiel en procedural pour tester mon code je pensais un query suffisent, l'ayant utilisé avec mon formateur.
Bref je vais pas me justifier de mes betises longtemps.
Bien evidement les tutos sur internet ont était plus formateur que les formateurs eux meme, desolé je me mélange encore les pinceaux, nul besoin de m'assassiner !!!!
Je suis issu d'une formation courte de 6 mois pour apprendre 7 langage differents dont 1 mois de php
Ah oui, effectivement, c'est intensif :O
Moi je te conseille de faire des petits projets perso (qui seront pas forcément publiés) pour manger et manger plein de code. Te promener sur Github pour faire de la veille techno, voir comment les autres codent, quelles technos ils utilisent et comment.
Grafikart est aussi un bon site pour apprendre, j'ai appris les bases de la programmation tout seul chez moi, j'ai enrichie mes compétences sur Grafikart et j'ai renformé mes connaissances en algorithmie en DUT Informatique, l'apprentissage en autodidacte est super important en programmation.
Voilà mes petits conseils ^^ Ils m'ont permis de devenir développeur fullstack dans une grosse boite alors qu'au début j'avais un niveau zéro en prog.
N'hésite pas à poser des questions, il y aura toujours quelqu'un pour y répondre ;)
J'irai voir sur github ce qui est interessant d'apprendre, Merci pour t'es conseils ^^