Ah non mais moi aussi je risque de tout te saccager, alors je préfère te donner les bases du php
La première, c'est d'aérer ton code en sautant des lignes entre les instructions qui ne sont pas liées, et d'utiliser des tabulations afin d'indenter ton code ce qui va le rendre plus lisible et plus facile à maintenir / comprendre. La seconde, c'est de mettre des commentaires pour expliquer ce que tu fais et pourquoi, surtout quand c'est complexe. Ça peut sembler ridicule, mais c'est super important le jour où quelqu'un va lire ton code pour comprendre à quoi il sert (ce quelqu'un pouvant parfaitement être toi dans 6 mois

)
<?php
//fetch_comment.php
$connect = new PDO('***');
$output = '';
$query = " SELECT * FROM tbl_comment
WHERE parent_comment_id = '0'
ORDER BY comment_id DESC ";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
foreach ($result as $row) {
$date = new \DateTime($row["date"]);
$formatedDate = (new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::SHORT));
$output .= '
<div class="separator"</div>
<div class="box-light">
<div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div>
<div class="white"><i>'.$formatedDate->format($date).'</i></div>
<div class="texte-com">'.nl2br($row["comment"]).'</div>
<div class="repondre"><button type="button" class="button1 reply" id="'.$row["comment_id"].'">Répondre</button></div>
</div>
';
$output .= get_reply_comment($connect, $row["comment_id"]);
}
echo $output;
function get_reply_comment($connect, $parent_id = 0, $marginleft = 0)
{
$output = '';
$query = " SELECT * FROM tbl_comment WHERE parent_comment_id = '".$parent_id."' ";
$statement = $connect->prepare($query);
$statement->execute(
array(
':parent_comment_id' => $_POST["comment_id"]
)
);
$result = $statement->fetchAll();
if($parent_id == 0)
{
$marginleft = 0;
}
else
{
$marginleft = $marginleft + 50;
}
if($result)
{
foreach ($result as $row) {
$date = new \DateTime($row["date"]);
$formatedDate = (new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::SHORT));
$output .= '
<div class="separator"</div>
<div class="box-light" style="margin-left:'.$marginleft.'px">
<div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div>
<div class="white"><i>'.$formatedDate->format($date).'</i></div>
<div class="texte-com">'.nl2br($row["comment"]).'</div>
<div class="reponse"><button type="button" class="button1 reply" id="'.$row["comment_id"].'">Répondre</button></div>
</div>
';
$output .= get_reply_comment($connect, $row["comment_id"], $marginleft);
}
}
return $output;
}
?>
Maintenant qu'on y voir plus clair, on constate que dans ton code tu fais appel à la fonction get_reply_comment() en lui passant 2 paramètres $connect et $row["comment_id"]. On voit aussi la déclaration de la fonction get_reply_comment(), c'est elle qui va nous intéresser.
Cette fonction accepte jusqu'à 3 paramètres :
- $connect (qui permet d'exécuter des requêtes sur la base de données - obligatoire),
- $parent_id (l'id de l'élément pour lequel tu veux récupérer les commentaires - facultatif, s'il n'est pas spécifié, il prend la valeur 0),
- $marginleft (qui permet d'afficher une marge pour indenter les réponses - facultatif, s'il n'est pas spécifié, il prend la valeur 0).
Lors du premier appel à la fonction ( get_reply_comment($connect, $row["comment_id"]); ), tu vas transmettre la variable de connexion à la base de données, et tu vas également transmettre la valeur de $row["comment_id"] en second paramètre. Celle-ci va ainsi être stockée dans la variable $parent_id et pourra ainsi être utilisée dans ta fonction.
Regardons maintenant de plus près ce que fait la fonction. Elle commence par une requête SQL qui utilise la valeur de $parent_id dans sa structure. Ça fonctionne, mais il est préférable de la sécuriser contre les injections SQL en sortant cette variable et en la remplaçant par un token :
$query = " SELECT * FROM tbl_comment WHERE parent_comment_id = :parentId ";
Pour autant, on veut quand même que la valeur contenue dans $parent_id soit utilisée au moment de l'exécution de la requête. Pour cela tu peux soit utiliser les fonctions bindParam ou bindValue, mais tu peux aussi continuer comme tu les fais déjà en passant cette valeur dans le execute().
Cette méthode attend en argument un tableau array(), qui va contenir les valeurs que tu veux spécifier pour chacun des tokens que tu as placé dans la structure de ta requête. Ici nous n'avons qu'un seul token dans la requête (:parentId), donc une seule entrée dans le tableau, sous la forme "clé => valeur". La clé est le nom du token (:parentId) et la valeur, c'est ta variable $parentId

Ah non mais moi aussi je risque de tout te saccager, alors je préfère te donner les bases du php ;)
La première, c'est d'aérer ton code en sautant des lignes entre les instructions qui ne sont pas liées, et d'utiliser des tabulations afin d'indenter ton code ce qui va le rendre plus lisible et plus facile à maintenir / comprendre. La seconde, c'est de mettre des commentaires pour expliquer ce que tu fais et pourquoi, surtout quand c'est complexe. Ça peut sembler ridicule, mais c'est super important le jour où quelqu'un va lire ton code pour comprendre à quoi il sert (ce quelqu'un pouvant parfaitement être toi dans 6 mois ;))
[php]<?php
//fetch_comment.php
$connect = new PDO('***');
$output = '';
$query = " SELECT * FROM tbl_comment
WHERE parent_comment_id = '0'
ORDER BY comment_id DESC ";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
foreach ($result as $row) {
$date = new \DateTime($row["date"]);
$formatedDate = (new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::SHORT));
$output .= '
<div class="separator"</div>
<div class="box-light">
<div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div>
<div class="white"><i>'.$formatedDate->format($date).'</i></div>
<div class="texte-com">'.nl2br($row["comment"]).'</div>
<div class="repondre"><button type="button" class="button1 reply" id="'.$row["comment_id"].'">Répondre</button></div>
</div>
';
$output .= get_reply_comment($connect, $row["comment_id"]);
}
echo $output;
function get_reply_comment($connect, $parent_id = 0, $marginleft = 0)
{
$output = '';
$query = " SELECT * FROM tbl_comment WHERE parent_comment_id = '".$parent_id."' ";
$statement = $connect->prepare($query);
$statement->execute(
array(
':parent_comment_id' => $_POST["comment_id"]
)
);
$result = $statement->fetchAll();
if($parent_id == 0)
{
$marginleft = 0;
}
else
{
$marginleft = $marginleft + 50;
}
if($result)
{
foreach ($result as $row) {
$date = new \DateTime($row["date"]);
$formatedDate = (new IntlDateFormatter( 'fr_FR', IntlDateFormatter::LONG, IntlDateFormatter::SHORT));
$output .= '
<div class="separator"</div>
<div class="box-light" style="margin-left:'.$marginleft.'px">
<div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div>
<div class="white"><i>'.$formatedDate->format($date).'</i></div>
<div class="texte-com">'.nl2br($row["comment"]).'</div>
<div class="reponse"><button type="button" class="button1 reply" id="'.$row["comment_id"].'">Répondre</button></div>
</div>
';
$output .= get_reply_comment($connect, $row["comment_id"], $marginleft);
}
}
return $output;
}
?>[/php]
Maintenant qu'on y voir plus clair, on constate que dans ton code tu fais appel à la fonction get_reply_comment() en lui passant 2 paramètres $connect et $row["comment_id"]. On voit aussi la déclaration de la fonction get_reply_comment(), c'est elle qui va nous intéresser.
Cette fonction accepte jusqu'à 3 paramètres :
- $connect (qui permet d'exécuter des requêtes sur la base de données - obligatoire),
- $parent_id (l'id de l'élément pour lequel tu veux récupérer les commentaires - facultatif, s'il n'est pas spécifié, il prend la valeur 0),
- $marginleft (qui permet d'afficher une marge pour indenter les réponses - facultatif, s'il n'est pas spécifié, il prend la valeur 0).
Lors du premier appel à la fonction ( get_reply_comment($connect, $row["comment_id"]); ), tu vas transmettre la variable de connexion à la base de données, et tu vas également transmettre la valeur de $row["comment_id"] en second paramètre. Celle-ci va ainsi être stockée dans la variable $parent_id et pourra ainsi être utilisée dans ta fonction.
Regardons maintenant de plus près ce que fait la fonction. Elle commence par une requête SQL qui utilise la valeur de $parent_id dans sa structure. Ça fonctionne, mais il est préférable de la sécuriser contre les injections SQL en sortant cette variable et en la remplaçant par un token :
[php]$query = " SELECT * FROM tbl_comment WHERE parent_comment_id = :parentId ";[/php]
Pour autant, on veut quand même que la valeur contenue dans $parent_id soit utilisée au moment de l'exécution de la requête. Pour cela tu peux soit utiliser les fonctions bindParam ou bindValue, mais tu peux aussi continuer comme tu les fais déjà en passant cette valeur dans le execute().
Cette méthode attend en argument un tableau array(), qui va contenir les valeurs que tu veux spécifier pour chacun des tokens que tu as placé dans la structure de ta requête. Ici nous n'avons qu'un seul token dans la requête (:parentId), donc une seule entrée dans le tableau, sous la forme "clé => valeur". La clé est le nom du token (:parentId) et la valeur, c'est ta variable $parentId :)