Que pensez vous de mon script perl ?? - Perl - Programmation
Marsh Posté le 10-01-2008 à 11:53:08
j'aurais utilisé des prepared statement plutot que du do dans tous les sens ( particulièrement dans ta boucle). Et puis beaucoup de variables ne servent pas à grande chose
Code :
|
Ah et je vois pas à quoi te sert CGI.
Est-ce ça que tu attendais comme commentaire?
Marsh Posté le 10-01-2008 à 12:04:28
Les points positifs:
- utilisation de sed
- injection SQL
Marsh Posté le 10-01-2008 à 12:04:31
Oui merci . oki je vois se que tu veu dire mise a part mes variables
Enfaite c'est variables viennent a partir de ce ci :
Code :
|
j'en est besoin pour nourrir ma base de donnée distante .
Ensuite une fois tous les info reuni je ferai du php sur mon serveur distant puis a l'aide de ma tables j' informerai chaque utilisateur sur une page web . ici Sur leur quota disque
Marsh Posté le 11-01-2008 à 01:30:28
Il faudrait utiliser les balises "code", ça facilite les choses pour la lecture (numérotation des lignes, ...) .
1) il manque un ; à la fin de la ligne 7
2) Utiliser Sed est serte compact, mais je préferre néanmoins "ouvrir" un fichier et faire des greps dessus, je trouve cela plus lisible (d'ailleurs, je n'étant pas sed friendly, je ne suis pas sûr de ce que cela filtre)
3) Pour moi le programme boucle indéfiniement, vu que ni $recup, ni $ligne ne sont modifiés dans la boucle. D'ailleurs, si je comprend bien le code, il serait même plus judicieux de "parser" le résultat du "repquota" dans la boucle.
4) Oui il faut vraiment faire le $dbh->prepare, une habitude à prendre...
Cordialement,
Marsh Posté le 11-01-2008 à 09:19:42
que peut tu me proposer en resultat final ( exemple avec mon code )
merci d'avance
Marsh Posté le 11-01-2008 à 10:16:12
je ne sais pas parser je debute , c'est mon premier code perl
Marsh Posté le 13-01-2008 à 15:28:47
Voilà quelques éléments d'aide. Sachant que l'idée générale, c'est uvrir, lire ligne par ligne et parser chaque ligne
Pour ouvrir, il y a deux suivant ce que l'on veut récupérer :
Code :
|
Pour parcourir les lignes il faut utiliser le diamant :
Code :
|
Pour parser, il faut mieux utiliser les expressions régulières et/ou la commande split
Code :
|
Cordialement,
Marsh Posté le 14-01-2008 à 09:22:07
tres bonne explication merci mise a par <FIC_HANDLE> que je ne voit pas qu'es ce que c'est
Marsh Posté le 14-01-2008 à 23:03:24
Cela permet d'obtenir la ligne suivante du fichier ouvert dans le handle FIC_HANDLE (car utilisé dans un contexte scalaire)
Code :
|
permet de lire une ligne de l'entrée standard (stdin)
Marsh Posté le 15-01-2008 à 12:52:16
<> c'est pas tout à fait stdin, c'est l'entrée par défaut. Qui peux être stdin si aucun fichier n'a été spécifié, mais qui est le fichier dont le nom a été passé en argument si un argument a été donné. <> c'est pas la même chose que <STDIN>.
Marsh Posté le 15-01-2008 à 13:43:21
Bon resultat des course j'ai realisé quelque changement car j'ai vu qu'il y avait un module quota en perl voici le script qui marche je l'espere : je vais faire une maquette cette apre midi
Code :
|
Marsh Posté le 15-01-2008 à 19:40:26
Tu as encore oublié le prepare/execute
Sinon, le coup du eval(join('+',@tmp)) est pas forcément ultra efficace...
j'aurai plutôt vu
[ccp]
if(scalar(grep{$_!=0}@tmp)>0){
...
}
[/cpp]
Marsh Posté le 16-01-2008 à 10:38:42
avec mon script j'ai une erreur :
[root@pc-b27-52 bin]# ./gregpython.pl
Use of uninitialized value in numeric gt (> ) at ./gregpython.pl line 26.
Marsh Posté le 18-01-2008 à 01:02:55
Bah sans le "nouveau" script on peut difficilement aider.
Mais je pense que tu as du "undef" dans ton tableau @tmp, ce qui fait que tu as ce message de warning (ce n'est qu'un warning en perl).
Marsh Posté le 10-01-2008 à 10:32:41
Bonjour,
bon ce script doit recupérer des données de quotas disque puis les transformer en varible . ensuite une connexion a distance sera etablie avec le module dbd::mysql et une requete d'insertion sera crée pour nourrir la base ; voici mon script :
#!/usr/bin/perl -w
use strict;
use DBI;
use CGI;
my $cgi = new CGI;
my $recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin`
my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2);
print "Content-type: text/html\n\n";
#Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance)
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
$user, $password, {RaiseError => 1});
#Requete sur la base de donnée
my $query = sprintf("INSERT INTO foo VALUES (%d, %s)",
$number, $dbh->quote("name" ));
$dbh->do($query);
while ($ligne = $recup){
# récupération des éléments
($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split /;/,$ligne;
# et on insere dans la base
$db->do("insert into client values ('$user1','$used1','$soft1','$hard1','$grace1','$used2','$soft2','$hard2','$grace2')"
);
or die "pb de requete : $DBI::errstr";