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

PHP & Base de données Discussion :

Problème de type, PHPMyAdmin [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 53
    Par défaut Problème de type, PHPMyAdmin
    Bonjour,
    J'ai créé un PHP permettant de saisir et d'afficher des messages, au moyen d'un formulaire (input).
    Les messages sont enregistrés dans la base de donnée, à l'aide d'une requête d'insertion.

    Mon problème :
    Sur PHPMyAdmin, j'ai configuré la colonne dans laquelle mes messages sont enregistrés comme cela :
    Type : VARCHAR
    Taille : 1000
    L'insertion se déroule correctement tant que je ne met aucune apostrophe (tous les autres caractères ont l'air de passer). A la moindre apostrophe, PHPMyAdmin n'enregistre pas le message dans la base de données.

    Ma question :
    A quoi correspond la taille ? Au nombre maxi de caractères ?
    Que dois-je mettre comme type pour que l'apostrophe ne bloque plus, tout en conservant un nombre intéressant de caractères ? (et si possible en pouvant toujours saisir des chiffres).

    J'ai consulté de nombreux tutoriels, mais les réponses sont souvent vagues...

    Merci d'avance.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Par défaut
    Salut,
    le 1000 correspond au nombre de caractères effectivement
    sinon ya un autre type : text

    si ça coupe des le premier apostrophe, c'est que t'as pas escape ce caractère,
    au lieu de ' mets \'
    ou bien regarde coté http://php.net/manual/en/function.addslashes.php

  3. #3
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Pour la taille d'un varchar, oui ça correspond au nombre maximum de caractère.

    Pour les apostrophes ce n'est pas un problème de type mais un problème d’échappement de caractère qui fait planter ta requête.

    Par exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table (champ) VALUES ('texte avec ' une apostrophe')
    Tu peux voir que l'apostrophe en milieu de texte est considéré comme la fin de ton texte.

    Pour éviter ça et sécuriser ta requete par la meme occasion, tu dois utiliser la fonction mysql_real_escape_string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO table (champ) VALUES ('".mysql_real_escape_string($variable)."')")

    Note : mysql_real_escape_string et addslashes vont faire "presque" la même chose mais c'est mysql_real_escape_string qui protégera efficacement ta requête contre les injections SQL

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 53
    Par défaut
    Tout d'abord, merci d'avoir répondu si vite.
    Je ne suis pas bien sûr d'avoir saisi vos deux réponses.

    @amezghal : Tu ne dis pas à quel endroit je dois mettre \'...
    Etant très mauvais en anglais, j'ai du mal avec ton lien =/
    Est-ce dans le code ou dans le texte que je saisi au moyen du formulaire ?
    Que permet le type "TEXT" ? Quelle est sa différence avec "VARCHAR" ?

    @Seb33300 : Je ne crois pas avoir ce genre de problème, juge par toi-même, voici ma requête :

    $sql = "INSERT INTO messages (texte, nom)
    VALUES ( '$textes', '$pseudo') " ;

    Peut être me suis-je mal expliqué : l'insertion est un échec lorsque je met une apostrophe dans le champs de saisie de mon formulaire, pas dans le code.
    Par exemple, si je souhaite entrer : "Taratis aime les pommes", la requête s'exécute et ma page affiche le message. Maintenant si je tape "J'aime les pommes" dans le champs de saisie du formulaire, la requête n'a pas lieu, la base de donnée reste vide (car "j'aime" contient une apostrophe).

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Février 2006
    Messages : 81
    Par défaut
    Salut,
    essayes ca,
    figures toi que dans le contenu de ta variable tu risque d'avoir un apostrophe (ce qui est le cas, et donc ça va planter ta requête)
    donc tu es obligé de protéger tes variables avant.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $textes = mysql_real_escape_string($textes);
    $pseudo = mysql_real_escape_string($pseudo);
    $sql = "INSERT INTO messages (texte, nom)
    VALUES ( '$textes', '$pseudo') " ;

    sinon voici la version fr de:
    http://php.net/manual/fr/function.addslashes.php
    et
    http://php.net/manual/fr/function.my...ape-string.php

    je prefere mysql_real_escape_string c'est le plus adapté dans ton cas

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 53
    Par défaut
    Problème résolu, merci !
    mysql_real_escape_string est géniale =)

    Merci beaucoup à vous deux, pour votre aide précieuse !
    Je garde les liens du manuel, je vais potasser.

  7. #7
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Citation Envoyé par Taratis Voir le message
    @Seb33300 : Je ne crois pas avoir ce genre de problème, juge par toi-même, voici ma requête :

    $sql = "INSERT INTO messages (texte, nom)
    VALUES ( '$textes', '$pseudo') " ;
    Lorsque ta variable va être remplacé par sa valeur, le problème que j'ai cité au dessus va se produire si ta variable contient une apostrophe.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ tinyint et char ] problème de type
    Par shirya dans le forum Installation
    Réponses: 3
    Dernier message: 05/11/2005, 07h08
  2. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  3. Problème de type chaîne
    Par champijulie dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 12/05/2005, 20h23
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. [Sybase] Problème de type sous ASE
    Par Hotchotte dans le forum Sybase
    Réponses: 1
    Dernier message: 18/12/2004, 11h04

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