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 :

Fonction gestion des commentaires


Sujet :

PHP & Base de données

  1. #21
    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 : 38
    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
    Alors avant d'expliquer les 2 fonctions mentionnées plus haut, j'attire ton attention sur le fait qu'il ne faut jamais faire remonter les messages d'erreur et encore moins les messages d'exceptions chez le client (comme tu le fais avec die), c'est une faille de sécurité importante.
    Tu dois au mieux rediriger ces messages vers un fichier de log et au pire les cacher. Je te montrerai comment faire plus tard.

    Le code ci-dessus propose 2 fonctions:
    • get_article_comments
    • get_child_comments


    get_article_comments récupère l'intégralité des commentaires pour un article donné (spécifié par son ID - le second paramètre du prototype).
    Elle mets en forme une requête de sélection avec une jointure afin de trouver les commentaires correspondants à cet article_id.
    Une fois ces messages réccupérés, elle appelle get_child_comments sur chaque commentaire afin de trouver les commentaires "enfants" (les commentaires que ce dernier commente). Cette fonction est reccursive et elle est capable d'aller chercher les messages commentés avec une profondeur définie par le paramètre $depth.

    Donc en gros, une fois l'appel à get_articles_comments_effectué, tu réccupères une structure de la forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [
      'id_commentaire' => 123,
      'commentaire_titre' => 'un titre...',
      ...
      'children' => [
         'id_commentaire' => 456,
         ...
         'children' => [
             'id_commentaire' => 789,
             ...
         ]
      ],
      ...
    ]
    Et ton arbre est prêt à l'emploi.

    Pour fonctionner correctement, ces deux fonctions acceptent en premier paramètre l'objet PDO de connexion à la BDD.
    get_article_comments peut également recevoir un troisième paramètre $search_params qui permet de spécifier davantages de critères de recherche (pour trouver un article ou les filtrer) ainsi qu'un quatrième paramètre $options permettant de faire un ORDER BY et/ou un LIMIT.

    Voilà

  2. #22
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Merci pour cette explication

    qu'il ne faut jamais faire remonter les messages d'erreur et encore moins les messages d'exceptions chez le client
    J'attends donc tes conseils sur ce point là !

    Sinon, pour mettre en pratique ton explication, pourrais-tu me montrer un exemple d'utilisation ?

    Merci.

  3. #23
    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 : 38
    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
    Toutes les directives pour l'enregistrement des erreurs sont expliquées ici: http://php.net/manual/en/errorfunc.configuration.php

    Il suffit de mettre "log_errors" à 1 et "error_log" sur un fichier quelque part et de désactiver l'affichage des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    ini_set('error_log', dirname(__FILE__) . '/error.log');
     
    trigger_error("The log is working !");
    On peut également aller beaucoup plus loin dans la gestion des logs, si ça t'intéresse regarde les librairies de log fournies par axiom (voir ma signature).

    Sinon, pour mettre en pratique ton explication, pourrais-tu me montrer un exemple d'utilisation ?
    Non, j'estime avoir été assez loin. Les fonctions ne sont pas franchement compliquées à comprendre. C'est maintenant à toi de comprendre comment architecturer tout ça avec ton application.

  4. #24
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Il suffit de mettre "log_errors" à 1 et "error_log" sur un fichier quelque part et de désactiver l'affichage des erreurs:
    Dans n'importe quel fichier n'importe où sur le serveur ou bien dans celui qui permet de se connecter ?

    Sinon, c'est quand même étonnant que ce code de connexion soit vulnérable sachant qu'il a été écrit par M@teo21.

    Non, j'estime avoir été assez loin. Les fonctions ne sont pas franchement compliquées à comprendre. C'est maintenant à toi de comprendre comment architecturer tout ça avec ton application.
    Ok, je vais essayer de mon côté.

    Merci.

  5. #25
    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 : 38
    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
    La vulnérabilité ne vient pas du code de connexion à proprement parler mais du fait de faire remonter des informations critiques coté client.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
    	$pdo = new PDO('mysql:dbname=none;host=localhost', 'foo', 'bar');
    }
    catch (Exception $e) {
    	die($e->getMessage());
    }
    affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[28000] [1045] Access denied for user 'foo'@'localhost' (using password: YES)
    D'une, le visiteur lambda n'a rien à faire de cette erreur. De deux, un utilisateur un peu plus malin sait déjà que le type de bdd est MySQL, donc que le port est 3306 et il à l'user en plus du host. C'est pas super quand on y pense. Enfin, si la connexion à échoué, veut-on vraiment seulement afficher un message d'erreur ou ne serait il pas plus pertinent de rediriger l'utilisateur vers une page d'erreur visuellement correcte ?

    C'est pareil pour n'importe quelle erreur: ça donne des informations sur ce qu'il se passe à l'intéreur de ton appli ce qui n'est jamais une bonne chose.

  6. #26
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Bonjour,

    j'ai un petit souci sur la construction de la requête sur la fonction get_article_comments()

    Avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp 
    FROM pevtt_commentaire AS c 
    JOIN pevtt_commentaire_article AS ca ON (ca.`id_commentaire`=c.`id_commentaire`)Array WHERE 45
    La clause WHERE n'est pas bonne. je ne comprends pas pourquoi Array s'affiche et id_article ne s'affiche pas.

    Merci de m'éclairer .

  7. #27
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Un petit coup de main svp car je ne comprend pas d'où provient le souci concernant la clause WHERE qui est mauvaise.

    Merci.

  8. #28
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Je n'est pas vraiment suivi ton topic, mais je remonte un tout petit peu, Benjamin donne ce code là :
    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
     
    function get_article_comments (PDO $pdo, $id, array $search_params = array(), array $options = array()) {
    	// Parameters validation
    	if ($pdo === null)
    		throw new InvalidArgumentException("First parameter is expected to be a valid PDO ressource object, null given");
     
    	if ($id === null)
    		throw new InvalidArgumentException("Second parameters is expected to be a valid Article ID, null given");
     
    	// Fetch Comments Query Generation
    	$query = "SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp ".
    			 "FROM pevtt_commentaire AS c ".
    			 "JOIN pevtt_commentaire_article AS ca ON (ca.`id_commentaire`=c.`id_commentaire`)".
     
    	// Where Clause Construction
    	$where_clause = array('id_article' => $id);
    	foreach ($search_params as $field => $search_value) {
    		$where_clause[] = "`{$field}`=:{$field}";
    	}
     
    	$query .= " WHERE " . implode(" AND ", $where_clause);
    Tu obtiens à un moment Array, ce qui suppose qu'à un moment une donnée serait un tableau alors qu'on attend plutôt une chaine (la suite) juste avant le WHERE.

    A vu de nez avant la ligne du WHERE.

    Fait un peu de déboggage (comme de echo) pour voir ce que les données contiennent, et surtout pour savoir qu'est ce qui te renvois ce Array.


    Un peu au pif cependant.

  9. #29
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Bonjour et merci d'avoir jeté un œil au problème

    Effectivement, j'ai essayé de tracé un peu le problème et l'array renvoi avec un print_r($where_clause)

    "id_article =>115" ou 115 correspond à l'identifiant de l'article passé par l'appel de la fonction.

    Si je fais un echo de la query à cet endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query .= " WHERE " . implode(" AND ", $where_clause);
    echo $query;

    On se retrouve avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp 
    FROM pevtt_commentaire AS c 
    JOIN pevtt_commentaire_article AS ca ON (ca.`id_commentaire`=c.`id_commentaire`)Array WHERE 45
    Ou on remarque qu'il y a un souci au niveau de la clause WHERE.
    Je n'arrive pas à comprendre pourquoi Array s'affiche et id_article ne s'affiche pas.

    Merci pour tes lumières.

  10. #30
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Faire du débogage sur $query et $where_clause, ok, on constate qu'il y a des bugs, mais pas suffisamment pour savoir l'origine, d'où ça vient.

    Donc faut pas hésiter à en faire un peu plus, pour en savoir plus.
    (ça me fais penser à un certain : travailler plus pour gagner plus )


    Blague à part, si on regarde cette méthode get_article_comments(), elle accepte 4 paramètres, dont $id, $search_params et $options.

    Faudrait peut être repérer le moment où cette méthode est appelée pour vérifier ce que contient ces 3 paramètres et espérer avoir une piste.

    Mais pourquoi pas aussi le faire à l'intérieur de cette méthode, un var_dump($search_params) par exemple.


    Si selon le cas il y a rien dans $search_params, le $where_clause devrait générer un chaine comme : 115 (juste la valeur sans rien d'autre), ce qui est le cas on dirait bien, ce qui n'est pas correcte coté syntaxe.
    Il faudrait peut être une alternative dans le cas où $search_params contient rien.
    Il faudrait dans ce cas faire en sorte d'obtenir juste -> WHERE id_article = :id_article

    Ici toujours, il serait peut être plus simple de faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // Where Clause Construction
    if (empty($search_params)) {
        $search_params = array('id_article' => $id);
    }
     
    foreach ($search_params as $field => $search_value) {
        $where_clause[] = "`{$field}`=:{$field}";
    }
     
    $query .= " WHERE " . implode(" AND ", $where_clause);
    Fais un essai pour voir.

    Ceci dit, je ne parviens à voir comment tu peux obtenir cette chaine Array ?
    Tu n'aurais un echo de trop qui trainerait par là ?


    Fais aussi des essais dans le cas où $search_params contient quelque chose, de même que $options (faut tester tous les cas).

  11. #31
    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 : 38
    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
    Voilà effectivement il y avait une typo ligne #25 (; manquant) et j'ai corrigé génération de la clause where.

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    <?php
     
    /**
     * Get all comments attached to an article
     *
     * @param PDO $pdo                The database connection
     * @param integer $id             The article ID
     * @param array $search_params    [optionnal] Additionnal search parameters 
     * @param array $options          [optionnal] Additionnal query optiopns (GROUP BY and/or LIMIT)
     * @throws InvalidArgumentException
     * @throws RuntimeException
     * @return array
     */
    function get_article_comments (PDO $pdo, $id, array $search_params = array(), array $options = array()) {
    	// Parameters validation
    	if ($pdo === null)
    		throw new InvalidArgumentException("First parameter is expected to be a valid PDO ressource object, null given");
     
    	if ($id === null)
    		throw new InvalidArgumentException("Second parameters is expected to be a valid Article ID, null given");
     
    	// Fetch Comments Query Generation
    	$query = "SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp ".
    			 "FROM pevtt_commentaire AS c ".
    			 "JOIN pevtt_commentaire_article AS ca ON (ca.`id_commentaire`=c.`id_commentaire`)";
     
    	// Where Clause Construction
    	$search_params[] = array('id_article' => $id);
    	foreach ($search_params as $field => $search_value) {
    		$where_clause[] = "`{$field}`=:{$field}";
    	}
     
    	$query .= " WHERE " . implode(" AND ", $where_clause);
     
    	// Query Options (only ORDER BY and GROUP BY)
    	if (!empty($options)) {
    		if (isset($options['ORDER BY']))
    			$query .= " ORDER BY `{$options['ORDER BY']}`";
    		if (isset($options['LIMIT'])) {
    			if (is_scalar($options['LIMIT']) && $options['LIMIT'])
    				$query .= " LIMIT {$option['LIMIT']}";
    			if (is_array($options['LIMIT']))
    				$query .= " LIMIT " . implode(',', $options['LIMIT']);
    		}
    	}
     
    	// Prepare
    	$stmt = $pdo->prepare($query);
     
    	// Execute
    	if (!$stmt->execute($search_params))
    		throw new RuntimeException("Error with query: {$query}");
     
    	$comments = array();
    	while ($comment = $stmt->fetch(PDO::FETCH_ASSOC)) {
    		try {
    			// here the magic occurs !
    			$comment['children'] = get_child_comments($pdo, $comment['id_commentaire']);
    		}
    		catch (Exception $e) {
    			$comment['children'] = null;
    			trigger_error("Unable to retrieve child comments for {$comment['id_commentaire']}. Reason: {$e->getMessage()}");
    		}
    		$comments[] = $comment;
    	}
     
    	return $comments;
    }
     
    /**
     * Get all children of a given comment
     *
     * Note: if the depth parameter is greater than 1
     *       it will retrieve the children until the
     *       max depth is reached.
     * 
     * @param PDO $pdo              The database connection object
     * @param integer $parent_id    The parent comment id
     * @param integer $depth        [optionnal] The max depth to reach
     * @throws InvalidArguemntException
     * @throws RuntimeException
     * @return array
     */
    function get_child_comments (PDO $pdo, $parent_id, $depth = 10) {
    	// Do not go deeper than orignal depth parameter value
    	// Prevents an infinite reccursivity
    	if ($depth == 0)
    		return null;
     
    	// Parameters Validation
    	if ($parent_id === null)
    		throw new InvalidArgumentException("Second parameter is expected to be integer, null given");
     
    	// Query Generation
    	$query = "SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp ".
    			 "FROM pevtt_commentaire AS c ".
    			 "JOIN pevtt_commentaire_commente AS cc ON (cc.id_commented=c.id_commentaire) ".
    			 "WHERE cc.id_commentant=:parent_id";
     
    	// Query Execution
    	$stmt = $pdo->prepare($query);
    	if (!$stmt->execute(array('parent_id' => $parent_id))
    		throw new RuntimeException("Error with query: $query");
     
    	// No Children Found
    	if (!$stmt->rowCount())
    		return null;
     
    	// Fetch children's children (Inception Coding-Style duh...)
    	$children = array();
    	while ($child = $stmt->fetch(PDO::FETCH_ASSOC)) {
    		try {
    			$child['children'] = get_child_comments($child['id_commentaire'], $depth-1);
    		}
    		catch (Exception $e) {
    			$child['children'] = null;
    			trigger_error("Unable to retrieve child comments for {$child['id_commentaire']}. Reason: {$e->getMessage()}");
    		}
    		$children[] = $child;
    	}
     
    	return $children;
    }

  12. #32
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Bonjour et merci pour la correction

    Un autre souci sur la ligne 69 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!$stmt->execute($search_params))
    Me donne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in /homepages/23/d281297373/htdocs/php/articles/commentaire/commentaire.php:69 Stack trace: #0 /homepages/23/d281297373/htdocs/php/articles/commentaire/commentaire.php(69): PDOStatement->execute(Array) #1 /homepages/23/d281297373/htdocs/php/articles/commentaire/commentaire.php(144): get_article_comments(Object(PDO), 45) #2 {main} thrown in /homepages/23/d281297373/htdocs/php/articles/commentaire/commentaire.php on line 69
    Etant donné que je passe pas le paramètre search_params dans ma fonction, je ne comprend pas pourquoi il y a une erreur?

    Appel de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo get_article_comments($bdd,45);

  13. #33
    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 : 38
    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
    Parce que je suis bête, voilà tout.

    Bref, il faut changer la ligne #28 de mon code et mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $search_params['id_article'] = $id;

  14. #34
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Ne je pense pas que tu sois bête, merci pour la correction.

    J'ai un autre souci, par rapport à la connexion je pense.

    En effet, je me retrouve avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function prepare() on a non-object in /homepages/23/d281297373/htdocs/php/articles/commentaire/commentaire.php on line 119
    Sachant que la ligne 119 est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $stmt = $pdo->prepare($query);
    Est-ce que ma connexion mysql ne passe pas ?

    Sachant que j'appelle la fonction de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo get_article_comments($bdd,166);
    ou $bdd est mon object de connexion.

  15. #35
    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 : 38
    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
    C'est que la préparation de la requête à échoué. Ce qui est une conséquence directe du non-testage de code

    Bref, fais dumper la variable query juste avant l'appel de prepare et essaie de corriger

  16. #36
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    En faisant un echo de la $query, je me retrouve avec trois requêtes car il doit y avoir trois commentaires sur l'article.
    Sauf que la chaîne résultante semble coller les trois requêtes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp FROM pevtt_commentaire AS c JOIN pevtt_commentaire_commente AS cc ON (cc.id_commented=c.id_commentaire) WHERE cc.id_commentant=:parent_id
    SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp FROM pevtt_commentaire AS c JOIN pevtt_commentaire_commente AS cc ON (cc.id_commented=c.id_commentaire) WHERE cc.id_commentant=:parent_id
    SELECT id_commentaire,u_id,commentaire_titre,commentaire_contenu,commentaire_timestamp FROM pevtt_commentaire AS c JOIN pevtt_commentaire_commente AS cc ON (cc.id_commented=c.id_commentaire) WHERE cc.id_commentant=:parent_id

  17. #37
    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 : 38
    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
    Cette requête m'a l'air correcte. Mets ça à la place du prepare pour voir les erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!$stmt = $pdo->prepare($query)) {
      echo json_encode($pdo->errorInfo());
    }
    pour voir temporairement les erreurs possibles.

  18. #38
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Bonjour,

    Si je fait ce que tu me dis, aucune erreur. Par contre si j'enlève le !

    soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($stmt = $pdo->prepare($query)) {
    		echo json_encode($pdo->errorInfo());
    	}
    J'ai ça qui apparaît :


    Concernant les requêtes. Est-ce normal que les trois requêtes soient collées les unes aux autres ?

  19. #39
    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 : 38
    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
    C'est ton instance de PDO qui est en cause. Fais un var_dump dessus avant le prepare pour vérifier.

  20. #40
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Et voilà le var_dump

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object(PDO)#13 (0) { } ["00000"]object(PDO)#13 (0) { }

Discussions similaires

  1. Probléme Modélisation - Gestion des Commentaires
    Par Pioul dans le forum Schéma
    Réponses: 5
    Dernier message: 11/12/2008, 10h23
  2. Simplification d'une fonction - gestion des événements
    Par superpigeon dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 18/11/2008, 12h44
  3. Gestion des commentaires dans cellule
    Par INeedHelp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/04/2008, 21h35
  4. [PhpDocumentor] Gestion des commentaires avec accents
    Par Nullos Oracle dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/09/2007, 11h24

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