IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SGBD Perl Discussion :

Script Perl avec AGI


Sujet :

SGBD Perl

  1. #1
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Script Perl avec AGI
    Bon voilà j'ai un grand problème avec mon script perl dont voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/perl
    use strict;
    use DBI;
    use Asterisk::AGI;
    $AGI = new Asterisk::AGI;
    my %input = $AGI->ReadParse();
     
     
    $port="3306";
    my $login="root";
    my $pass="passer";
     
    my $dsn = "dbi:mysql:database=note;host=localhost";
    my $dbh = DBI->connect($dsn,$login,$pass);
    #Pour récupérer le choix effectué par l’appelant
    my $code = $AGI->get_data("/var/lib/asterisk/sounds/fr/beep",100000000000,4);
     
     
    #Pour exécuter une requête SQL
    my $requete=" SELECT codeclasse FROM etudiant where codeserver='$code'";
    $st1 = $dbh->prepare($requete);
    $st1->execute();
    my $codeclasse=$st1->fetchrow_array;
    $st1->finish;
    Le problème c'est qu'il génère une erreur. comme s'il ne se connectais pas à la base de données. Je ne sais quoi faire j'ai crée une base de données note.sql toujours rien aidez moi je vous prie
    ça fait plus d'une semaine que je galère
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Points : 515
    Points
    515
    Par défaut
    Bonjour,

    Citation Envoyé par Halmir
    Le problème c'est qu'il génère une erreur. comme s'il ne se connectais pas à la base de données.
    Ce n'est pas très informatif si tu ne connais pas le message d'erreur.
    Pour cela utilise dans ton script les messages d'erreurs quand tu interagis avec ta base de données ($DBI::errstr, dbh->errstr(), sth->errstr() ;
    Exemple sur ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #!/usr/bin/perl
    use strict;
    use DBI;
    use Asterisk::AGI;
    $AGI = new Asterisk::AGI;
    my %input = $AGI->ReadParse();
     
     
    $port="3306";
    my $login="root";
    my $pass="passer";
     
    my $dsn = "dbi:mysql:database=note;host=localhost";
    my $dbh = DBI->connect($dsn,$login,$pass) or die "$DBI::errstr\n" ;
    #Pour récupérer le choix effectué par l’appelant
    my $code = $AGI->get_data("/var/lib/asterisk/sounds/fr/beep",100000000000,4);
     
     
    #Pour exécuter une requête SQL
    my $requete=" SELECT codeclasse FROM etudiant where codeserver='$code'";
    my $st1 = $dbh->prepare($requete) or die "$dbh->errstr()\n";
    $st1->execute() or die "$st1->errstr()\n" ;
    my $codeclasse=$st1->fetchrow_array or die "$st1->errstr()\n";
    $st1->finish;
    Tu verras mieux si quelque chose se passe mal.

  3. #3
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Merci
    Merci beaucoup pour la reponse je vais le tester. C'est vraiment gentil.
    J'ai une seconde question à poser existe t-il une fonction en perl comme "strlen" en php car je voulais vérifier si ce dont l'appelant saisie est bel et bien 4 chiffres

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    l'équivalent perl est length.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $chaine = "Halmir";
    my $longueur = length $chaine;
    print $longueur;
    Il retourne 6.

  5. #5
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Djibril, donc je crois que si je fais un truc de ce genre
    //Vérifie si la taille de la chaine saisie est bel et bien quatre (comme ce qui figure dans la base de données)
    if (length($code)==4)
    {
    .....
    }
    else
    {
    print "Erreur";
    }

    Es ce que cela pourrais marcher?

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    oui

  7. #7
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #!/usr/bin/perl
    use DBI;
    use Asterisk::AGI;
    use strict;
    my $AGI = new Asterisk::AGI;
    my %input = $AGI->ReadParse();
    #Connexion à la base de données
    my $dbh = DBI->connect("DBI:mysql:dbname=note;host=localhost","root","passer" ) or die "$DBI::errstr()";
    #Appel au synthétiseur vocale
    if ($code == '') {
    print "EXEC LIAMBROLA \"Entrez votre code serveur:\n");
    $agi->exec("read", "code");
    #Récupération du choix saisie par l'appelant
    #$code = $agi->get_variable("code");
    $code = $agi->get_data('/var/lib/asterisk/sounds/beep',100000000,4);
    my $verif = $dbh->prepare("select codeserver from etudiant where codeserver=$code" ) or die "$dbh->errtsr()";
    $verif -> execute() or die "$verif->errstr()";
    #$code = $verif->fetchrow();
    if ($code = $verif ->fetchrow)
    {
    my $listmat = $dbh->prepare("select matiere from matiere") or die "$dbh->errtsr()";
    $listmat -> execute() or die "$listmat->errstr()";
    my $matiere = $listmat->fetchrow_array;
    $listmat->finish();
    }
    else
    {
    $AGI -> exec('Playback','/var/lib/asterisk/sounds/fr/conf-errormenu');
    }
    }
    #Liste des matieres
    print "EXEC LIAMBROLA \"Tapez 1 $matiere[0] Tapez 2 $matiere[1] Tapez 3 $matiere[2],any\"\n";
    if ($code_mat == '')
    {
    $agi->exec("read", "code");
    $code_mat = get_variable("code_mat");
    #my $code_mat = $AGI->get_data("/var/lib/asterisk/sounds/beep",10000000000,10);
    #Exécution de la requête SQL
    my $verifi = $dbh->prepare("select matiere from matiere where matiere.codeclasse='$code_mat'") or die "$dbh->errstr()";
    $verifi->execute() or die "$verifi->errstr()";
    my $matiere = $verifi->fetchrow();
    $verifi->finish();
    }
    #Type de note
    $requete = "select typenote from note";
    my $sth  = $dbh->prepare($requete) or die "$dbh->errstr()";
    $sth->execute();
    my $type = $sth->fetchrow_array();
    $sth->finish();
     
    #Affiche note
    print "EXEC LIAMBROLA \"Tapez 1 $type[0] Tapez 2 $type[1] Tapez 3 $type[2],any\"\n";
    $AGI->exec("read", "typenote");
    $typenote = get_variable("typenote");
    my $requet = $dbh->("select note from note where note.type_note='$typenote'") or die "$dbh->errstr()";
    $requet->execute() or die "$reque->errstr()";
    my $note = $requet->fecthrow_hash();
    my $i = $note->fetchrow_array;
    $AGI->say_number($i);
     
    $AGI->verbose($AGI->channel_status);
    		if($AGI->channel_status == "User disconnected") {
    			$AGI->hangup();
    		}
     
    //Fermeture de la connexion
    $dbh->disconnect();
    //raccrochage
    $AGI->hangup();
    Merci beaucoup Djibril de ton aide mais j'ai toujours des petites questions à poser vu que je suis encore qu'un débutant en perl.
    Bon voilà un petit update de mon script. Le problème ici est à chaque fois que je saisie une valeur il n'affiche pas à l'écran que ce soit la liste des matière ou la liste des types de notes ni la note attribué à l'étudiant?
    J'aimerais savoir ou ce trouve l'erreur ou alors je conçois mal mes requêtes?

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Il faut toujours mettre en début de programme ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    use strict;
    use warnings;
    Tu pourras ainsi voir tes messages d'erreurs.

  9. #9
    Membre confirmé Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Points : 515
    Points
    515
    Par défaut
    Bonjour,

    A mon avis tu récupères mal les sorties de tes requêtes SQL avec la méthode fetchrow_array : celle-ci te retourne un tableau contenant les résultats de ta requête et pas les résultats eux mêmes. Pour les parcourir il faut faire une boucle dessus. (Il existe d'autres méthodes pour parcourir les résultats fetchrow_hashref, fetchrow_arrayref etc. regarde le tuto de Djibril pour plus d'info http://djibril.developpez.com/tutoriels/perl/perl-dbi/)

    Par exemple pour la matière fais un test avec un print pour voir ce qu'elle retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while ( my $matiere = $prep->fetchrow_array ) {
        print "matiere = $matiere\n";
    }
    Sinon, utilise les balises de code pour rendre ton code plus lisible (#)

  10. #10
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses je vais jeter un coup sur le tutoriel Perl et puis je referai une nouvelle mis à jour de mon script.

  11. #11
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut perl phpmyadmin
    Bonjour Tout le monde,

    J'aimerais savoir si c'est possible de faire communiquer perl et l'interface phpmyadmin. Question un peu bête mais j'ai besoin de savoir car j'ai eu à créer une base de données depuis l'interface phpmyadmin.

    J'avais lu tout le tuto de Djibril et aucune fois il n'a mentionné ce cas ci donc je voudrais me rassurer.

    Cordialement

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Tu mélanges un peu tout.

    PHPMyadmin est juste une application web permettant de faciliter l'administration d'une base de données MySQL via le Web.

    Accéder à une base de données via un langage de programmation tel perl, PHP, JAVA revient à lancer des requêtes sur ta base en dur.

    Il n'existe aucun moyen et c'est de toute façon sans intérêt d'aller sur PHPMyAdmin en perl ou autre langage pour faire du SQL.

  13. #13
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Donc si je comprend bien c'est quasiment inutile que j'utilise phpmyadmin comme interface web. Ok donc je pourrais bien utiliser les requetes SQL avec SQL Server ou le faisant en ligne de commande(DOS ou linux)

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Non, PHPmyadmin est utile si tu as besoin d'administrer ta base de temps en temps pour voir le contenu des tables, l'architecture sans avoir besoin de faire un programme à chaque fois.

    L'interaction BD et langage de programmation est utile pour des tâches d'automatisation.

  15. #15
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse Djibril, comme tu as su bien le dire j'utilise PhpMyAdmin pour administrer ma base de données aussi au niveau de l'ajout d'une table ou bien une modification.
    Une autre question es t-il possible que je puisse créer une base de données avec une extension .pl (exemple note.pl) et d'y faire des insertion sans utiliser des fichiers textes(exemple: etudiant.txt)?

  16. #16
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 499 184
    Points
    499 184
    Par défaut
    Je pense que oui, mais c'est une très mauvaise idée généralement, un nom de base de données ne porte pas d'extension dans le nom. Inutile de porter des confusions dans les noms.
    Pour en savoir plus dans les bases de données, je te conseille d'aller sur le forum SQL pour y poser des questions.

  17. #17
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci pour toutes ses réponses Djibril. Car il y avait un peu de confusion dans ma tête car j'ai l'habitude d'utiliser php et perl c'est la première fois . Maintenant je crois que je pourrais terminer ce projet calmement et même d'ici cette nuit.

    Merci aussi pour les cours de programmation pour apprendre Perl c'est très utile : http://perl.developpez.com/cours/

Discussions similaires

  1. tester un script PERL avec IIS 6.0
    Par zalalus dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 13/08/2009, 14h43
  2. Problème script perl avec STDIN
    Par deimosfr dans le forum Langage
    Réponses: 2
    Dernier message: 23/07/2009, 10h22
  3. Appel script Perl avec arguments
    Par metalcoyote dans le forum Général Java
    Réponses: 5
    Dernier message: 12/06/2008, 16h33
  4. [Système] Lancer un script perl avec PHP
    Par pepite dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2006, 12h30
  5. Réponses: 6
    Dernier message: 23/05/2005, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo