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

Web Perl Discussion :

formulaire et caractères réservés


Sujet :

Web Perl

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Par défaut formulaire et caractères réservés
    Bonjour à tous,

    J'ai un soucis avec les caractères réservés.

    Ma page html contient un simple formulaire permettant de saisir des titres de livre.
    Les données sont transmises au script perl par la méthode POST.
    Les données saisies dans ce formulaire sont récupérées via la méthode param du module CGI. Elles sont ensuite envoyées vers une base de données MySQL.

    Lorsque je veux envoyer des données contenant des caractères réservés (par exemple une apostrophe) j'ai un message d'erreur dans mon navigateur.
    J'ai bien tenté d'utiliser le module URI:Escape; mais la conversion des caractères réservés semble ne pas fonctionner.

    Voici mon 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
    26
    27
    28
    #!C:/wamp/apps/Perl/bin/perl.exe 
    use strict;
    use warnings;
    use DBI;
    use CGI;
    use CGI::Carp qw(fatalsToBrowser);
    use URI::Escape;
     
    # connexion à ma base de données mysql minichat 
    my $database = "db1";
    my $hostname = "localhost";
    my $login = "root";
    my $pw = "";
    my $dsn = "DBI:mysql:database=$database;host=$hostname";
    my $dbh = DBI->connect($dsn,$login,$pw) or die "ECHEC connexion";
     
    # récupération de la valeurs transmise par le formulaire
    my $cgi = CGI->new;
    my $TITRE;
    $TITRE= $cgi->param('titre');
    my $TITRE_SAFE = uri_escape("$TITRE");
     
    # insertion dans la base de données
    my $query = ("INSERT INTO livres VALUES (DEFAULT, '$TITRE_SAFE')");
    my $sth=$dbh->prepare($query);
    $sth->execute() or die "Cannot execute sth: $DBI::errstr";
    $sth->finish;
    $dbh->disconnect;
    Pouvez-vous m'aider à identifier mon erreur?
    Merci

  2. #2
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Quel est le message d'erreur ?
    As tu essayé d'utiliser le module HTML::Entities ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    La fonction à utiliser est $dbh->quote($valeur)

    Mais avec DBI, on utilise plutôt les "placeholders" pour que DBI s'occupe lui-même de l'échappement des caractères. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $query = ("INSERT INTO livres VALUES (DEFAULT, ?)");
    my $sth=$dbh->prepare($query);
    $sth->execute($TITRE) or die "Cannot execute sth: $DBI::errstr";
    $sth->finish;
    $TITRE contient les données brutes, sans aucun échappement préalable.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Par défaut
    Pour info, voici le message d'erreur :

    Software error:

    Cannot execute sth: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''écume des jours')' at line 1 at C:/wamp/bin/apache/Apache2.2.11/cgi-bin/...


    Sinon, en utilisant ->quote , il n'y a plus de problème.

    Merci !

  5. #5
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Une doc pour t'aider.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Cannot execute sth: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''écume des jours')' at line 1 at C:/wamp/bin/apache/Apache2.2.11/cgi-bin/...
    C'est curieux, car c'est pourtant comme ça qu'il faudrait faire.
    Quelle est exactement la valeur de la variable passée en paramètre? J'aimerais essayer de mon côté voir si je reproduis le problème avec la même valeur.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 84
    Par défaut
    Merci djibril pour ce lien (j'avais déjà consulté ton tuto, mais pas jusqu'au placeholders).

    En réponse à estofilo : le valeur que je passe en paramètre est "L'écume des jours".

Discussions similaires

  1. Liste de caractères réservés
    Par XavierBR dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/07/2009, 16h14
  2. Formulaire et caractères spéciaux
    Par zefox dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2008, 17h05
  3. [Fortran 90 -> LaTeX] Ecriture de caractères réservés
    Par yogitetradim dans le forum Fortran
    Réponses: 5
    Dernier message: 17/07/2007, 14h51
  4. Vérifier champ de formulaire et caractères interdits
    Par rekiem71 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/04/2007, 17h45
  5. Problème formulaire et caractères spéciaux
    Par dolf13 dans le forum Langage
    Réponses: 2
    Dernier message: 25/10/2006, 10h08

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