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 :

' (apostrophe) lors de insert et update


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
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Par défaut ' (apostrophe) lors de insert et update
    bonjour

    Permettez-moi de faire appel à la communauté des développeur PHP/MYSQL

    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
    29
    30
    31
    $q = "INSERT INTO `$db_name`.`annonces` (
    `id` , 
    `add_date` , 
    `modify_date` , 
    `ind_type` , 
    `matiere` , 
    `nom` , 
    `dimensions` , 
    `poids` , 
    `description` , 
    `prix` , 
    `date_creation` , 
    `oeuvre_originale` , 
    `port_automatique` , 
    `type_reproduction`)
     
    VALUES (NULL , 
    NOW( ) , 
    NOW( ) , 
    '".eschtml($_POST[ind_type])."', 
    '".eschtml($_POST[matiere])."', 
    '".eschtml($_POST[nom])."', 
    '".eschtml($_POST[dimensions])."', 
    '".eschtml($_POST[poids])."', 
    '".eschtml($_POST[description])."', 
    '".eschtml($_POST[prix])."', 
    '".eschtml($_POST[date_creation])."', 
    '".eschtml($_POST[oeuvre_originale])."', 
    '".eschtml($_POST[port_automatique])."', 
    '".($_POST[type_reproduction])."' 
    );";
    Lorsque dans un des champs, je mets un ' (apostrophe) l'insert se passe mal, j'ai une erreur date base. Lorsqu'il n'y a pas de ' (apostrophe), tout se passe bien, l'insert est OK.
    Est-ce un problème de version PHP ?
    Pour info, je viens de passer de 1and1.fr vers infomaniak.ch.

    Voici mes codes header :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Version PHP 5.4
    mysql Version 5.5.x

    Serveur INFOMANIAK

    Pourriez-vous m'aider svp ?

    Merci pour votre collaboration.

    Bone journée

    Eric Rouyer

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut
    Bonjour,
    c'est quoi le code de votre fonction eschtml ?!

    normalement cette fonction doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function eschtml($data) {
        return mysql_real_escape_string($data);
        // ou return mysql_escape_string($data);
    }
    regarde si ça marche maintenant avec des champs contenant (')

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Et d'ailleurs tu devrais également utiliser cette fonction pour protéger la dernière variable $_POST[type_reproduction]). Même si c'est un entier, étant donné que tu ne contrôle pas cette donnée avant de l'insérer dans ta requête, cette requête est vulnérable aux injection sql.

    Si tu utilise Mysql, toutes les variables devraient être protégées par mysql_real_escape_string() comme l'a indiqué ouss_sk8.

    P.S Il est conseillé de mettre des quotes ou des doubles quotes dans les index de tes variables super globales par exemple $_POST["type_reproduction"] (et plus généralement dans tous les index des tableaux comprennent les caractères alphabétiques).

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Par défaut
    bonjour ABCIWEB et ouss_sk8 et merci de l'intérêt que vous portez à mon problème.

    J'ai mis en pratique le code de ouss_sk8

    C'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function eschtml($data) {
    return mysql_real_escape_string($data);
    // ou return mysql_escape_string($data);
    }
    Mais cela ne fonctionne pas si je mets un ' dans un champ de mon formulaire. J'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "1064: 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 "
    Voici comme demandé par ouss_sk8 mon code de ma fonction eschtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function eschtml($str){
            return str_replace("line_break_space", "<br />", htmlentities(str_replace(array("\r\n", "\n", "\'", "\r"), 'line_break_space', $str)));
      }

    Si je reviens sur les conseils de ABCIWEB je devrais remplacer dans mon INSERT ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '".eschtml($_POST[surface])."',
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '".eschtml($_POST["surface"])."',

    Pourriez-vous m'indiquer comment le coder pour ne plus avoir de problème ?

    Merci pour votre aide et bonne soirée

    Eric

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Houla, ça nous rajeuni pas ton code. Depuis le temps qu'on dit de ne pas utiliser htmlentities pour insérer des données en bdd...

    Ta fonction est très spécifique, il faut ne l'appliquer que sur les champs qui le demandent. Je parlais de mysql_real_escape_string() uniquement. Sur quel champ se pose le problème ?

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Par défaut
    en fait cette partie de code m'avait été préparé par un étudiant il y a très longtemps.

    En fait chaque champ alpha est susceptible d'avoir un ', les voici.

    ici pour la partie INSERT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    '".eschtml($_POST[adr])."', 
    '".eschtml($_POST[type])."', 
    '".eschtml($_POST[description])."', 
    '".eschtml($_POST[facade])."', 
    '".eschtml($_POST[caracteristiques])."', 
    '".eschtml($_POST[viabilite])."', 
    '".eschtml($_POST[divers])."',
    Mais je me rends compte que j'ai aussi le problème avec l'UPDATE : (voici le code pour l'update). Et dans l'update, j'utilise pas la fonction eschtml

    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
    "UPDATE `annonces` SET 
    `modify_date` = NOW( ) ,
    `ref` = '$_POST[ref]',
    `adr` = '$_POST[adr]',
    `type` = '$_POST[type]',
    `surface` = '$_POST[surface]',
    `description` = '$_POST[description]',
    `facade` = '$_POST[facade]',
    `caracteristiques` = '$_POST[caracteristiques]',
    `viabilite` = '$_POST[viabilite]',
    `divers` = '$_POST[divers]',
    `prix` = '$_POST[prix]',
    `exclusivite1` = '$_POST[exclusivite1]',
    `exclusivite2` = '$_POST[exclusivite2]',
    `dpe` = '$_POST[dpe]',
    `ges` = '$_POST[ges]',
    `date_entree` = '$_POST[date_entree]'
    WHERE `annonces`.`id` = $_POST[id] LIMIT 1 ;";
    Donc comment faire pour que lors de la création (insert) et modification (update) tout fonctionne correctement.

    Là, je coince un peu

    Merci encore

    Eric

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/07/2012, 11h53
  2. Exception lors de insert, update et delete
    Par haykelFST dans le forum PL/SQL
    Réponses: 3
    Dernier message: 02/05/2012, 17h24
  3. Apostrophe lors de la saisie et problème avec insert
    Par angelevil dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/06/2009, 21h54
  4. Réponses: 1
    Dernier message: 27/05/2009, 20h16
  5. [MySQL] Présence d'une apostrophe lors d'une insertion
    Par snaxisnake dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/09/2008, 11h10

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