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

Langage PHP Discussion :

erreur in insert into php poo


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Par défaut erreur in insert into php poo
    Bonjour,
    Je débute dans la POO, et j'ai un problème au niveau d'une de mes fonctions qui consiste a insérer des valeurs récupérer dans un formulaire, puis a les insérer dans ma Base de données.

    Tous fonctionne assez bien, seulement lorsque mes valeurs sont inserer, celle ci ne contienne pas mes champs mais seulement des 0
    Pourtant lorsque j'utilise un print_r mon code m'affiche les valeurs que j'ai rentré dans mon formulaire.
    (Ma page vendre fait appel au formulaire que j'ai sur scriptAnnonce.php)
    Voici quelque screen afin que vous y voyait un peu plus clair.

    Merci
    Images attachées Images attachées    

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Déjà tu ne dois pas utiliser mysql_error si tu utilise PDO, il y a PDO::errorCode et PDO::errorInfo pour ça.

    Ensuite, sache qu'il est très dangereux d'enregistrer des données sans les vérifier car les données POST peuvent être changées à la volée par un utilisateur un peu malin (pas beaucoup c'est ça qui est terrible - il y a une légende urbaine parmi la communauté PHP qui est de croire $_POST plus sécurisé que $_GET: ce n'est pas le cas, les données proviennent dans les deux cas de l'utilisateur et donc ne sont pas sûres !)

    Bon le problème en lui même vient du fait que ton tableau de remplacement pour le prepare statement est faux.
    $_GET ou $_POST sont des tableaux associatifs dont la clé est le nom du paramètres alors que PDOStatement->execute attends un tableau dont les clées sont les noms des placeholders (je ne trouve pas d'équivalent français) mis dans la requête.
    Exemple:
    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
    <?php
    $query = "INSERT INTO table VALUES (:id, :name, :value);"
    $stmt = $pdo->prepare($query);
    
    // Dans un post tu aurais ça par exemple:
    $inputs = array(
      'id' => 1,
      'name' => 'test',
      'value' => 'hello'
    );
    
    // alors que PDOStatement attends:
    $inputs = array(
      ':id' => 1,
      ':name' => 'test',
      ':value' => 'hello'
    );

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Par défaut
    D'accord, je te remercie déjà d'y jeter un coup d'oeil.
    Mais simplement ce petit projet et à des fins personnel donc si les données ne sont pas sécurisées ce n'est pas très grave mais je prends note.

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    J'en profite pour attirer ton attention sur un point: le prepare statement est créé et détruit à chaque appel de ta méthode. Donc si par exemple tu appelles cette méthode 100x dans le déroulement d'une requête, le statement est créé puis détruit 100x ce qui est complêtement inutile et bousille les performances.

    Une bonne manière de procéder est de mettre les statements (les objets PDOStatement donc) en tant que membres statiques protégés de la classe qui les utilisent (une classe donnée n'a pas en général à changer ces statements).
    ça ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class MaClass {
     
    protected static $_statement_1;
     
    public static function executeStatement1 ($inputs) {
       if (!isset(static::$_statement_1))
          static::$_statement_1 = Database::prepare("<ta requête>");
     
       return static::$_statement_1->execute($inputs);
    }
    Vu que généralement l'instance de PDO est unique dans un programme PHP, il est de bon ton de la mettre dans un Singleton qu'on appelle Database.
    Tu trouvera des exemples et des tutos sur les singleton et sur PDO un peu partout.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Par défaut
    Je suis en train de modifier mon code en fonction de ce que tu m'a dit.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Par défaut
    J'ai tout a fait comprit ce que tu voulais dire, cependant j'ai du mal au niveau du DATABASE dans ta fonction j'ai du mal a voir comment l'on pourrait faire appel a ma PDO
    Est ce que je doit me connecter avec une fonction de ce type ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public static function getDBO()
        {
            if (!self::$db)
             self::$db = new PDO('mysql:host=localhost;dbname=personnage',root', '');
            return self::$db;
        }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/10/2009, 23h37
  2. Erreur 3346 INSERT INTO
    Par Tristan33000 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 16/06/2009, 15h49
  3. [MySQL] Erreur dans insert into issu d'un fichier csv
    Par pasbonte dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/02/2009, 18h18
  4. Erreur syntaxe Insert Into
    Par Frog74 dans le forum VBA Access
    Réponses: 14
    Dernier message: 28/04/2008, 14h09
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38

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