Débutant en php j'essaie de changer le format de date de ma rubrique "commentaires", j'ai tenté quelque chose sans conviction mais ça ne marche pas, si quelqu'un veut bien me donner un petit coup de main, je suis preneur.
A l'occasion, il faudra qu'on m'explique pourquoi tu créés une connexion PDO en début de script et utilises mysql_* en fin, sachant que ces dernières n'existent plus depuis PHP 7.
Je suis pas sûr mais je crois que je vois une erreur dans ton code. Lors de l'execution de ta requete preparée, il ne faut pas mettre les doubles points (:) dans l'array. Il faut juste les mettre dans le prepare et pas dans l'execute
L’erreur que je rencontre est que sur mon site internet le format de la date n’a pas changé, la date reste affichée comme telle : Y-m-d H:i:s
EDIT:
Je vais essayer d'être plus précis sur mon problème.
Pour ma rubrique commentaire j'ai 2 fichiers php.
le 1er : add_comment.php (le code affiché plus haut)
le 2e : fetch_comment.php
Si je mets
$date = new DateTime('01-01-2021 17:45:12');
echo $date->format('d/m/Y H:i:s');
dans le 1er fichier, il ne se passe rien. Si je mets ce même code dans le 2e fichier, le nouveau format apparait en bas des commentaires mais en plus du 1er format.
C'est la 1ere fois que je manipule les dates du coup je tâtonne un peu.
Dans add_comment.php, je ne vois pas à quoi ça rime de mettre la date en-dehors du JSON retourné tout comme le fait de mettre une date fixe, mais à part ça, la date devrait être formatée correctement. Souci de cache navigateur ?
Dans fetch_comment.php, l'affichage de la date ne semble pas adapté lors de la génération ligne 62, ça me paraît normal qu'on ait encore la même valeur qu'en base de données.
Tu l'as pourtant très bien fait ligne 66 du code présenté dans ce message. La seule chose qu'il faudrait adapter pour fetch_comment.php, c'est la création de l'objet afin qu'il prenne en paramètre la date de la base de données.
Et dans add_comment.php, tu confirmes que dans le retour la date n'est pas dans le format que tu attends ?
Oui je confirme que la date n'est pas dans le format que j'attends. Peut-être à cause de la ligne 24 de fetch_comment.php sur le même principe que tu me dis pour la ligne 62 ?
Comment dois-je m'y prendre pour la création de l'objet si ce n'est pas trop demandé ?
Ne mélange pas les deux fichiers s'il te plaît. Tu me réponds à propos d'une ligne de fetch_comment.php alors que je te pose la question pour add_comment.php…
Pour la création de l'objet, c'est comme tu l'as fait dans le code précédent à la ligne 65, mais au lieu de mettre une date fixe, tu mets la date de la base de données.
Après, tu peux aussi demander au SGBD de te retourner la date directement formatée comme tu le souhaites, ça ne change plus que ta requête, pas ton code d'affichage.
Pour la traduction, oublie les fonctions ***time(), setlocale() et date() dont les deux premières dépendent de l'OS et non de PHP, la dernière ne fait pas de traduction, et suit la FAQ PHP dont j'ai fourni le lien.
Tu as un exemple de code qui permet de créer un objet DateTime dans ton propre code ligne 66, tu le remets même ici dans les deux lignes de l'édition. A cela j'ai ajouté que, pour avoir un objet depuis une date de la base de données, il faut la donner en paramètre au lieu de la date fixe.
Ensuite de quoi tu pourras reprendre la FAQ PHP.
Par contre, dans ta boucle ligne 57 à 68, il faudra probablement créer l'objet DateTime avant de commencer ta chaîne $output afin de pouvoir mettre la date formatée dedans. Quelque chose comme
foreach ($result as $row) {
$date = new \DateTime(…); // cf. ma remarque pour créer une date depuis la base de données
$formatedDate = …; // cf. la FAQ PHP
$output .= '…' . $formatedDate . '…';
}
Bon dsl je ne suis pas assez calé en php pour compléter ce que tu me demandes.
add_comment :
$connect = new PDO('');
$error = '';
$comment_name = '';
$comment_content = '';
$email = '';
$date = new DateTime();
echo $date->format('d M Y H:i');
$now = new DateTime();
$metteurEnForme = new IntlDateFormatter(
'fr',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE
);
echo $metteurEnForme->format($now);
//...
fetch_comment :
//...
foreach ($result as $row) {
$date = new \DateTime(…); // cf. ma remarque pour créer une date depuis la base de données
$formatedDate = 'd M Y H:i'; // cf. la FAQ PHP
$output .= '…' . $formatedDate . 'd M Y H:i';
$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>'.$row["date"].'</i></div>
<div class="texte-com">'.$row["comment"].'</div>
<div class="reponse"><button type="button" class="reply" id="'.$row["comment_id"].'">Répondre</button></div>
</div>
';
$output .= get_reply_comment($connect, $row["comment_id"], $marginleft);
}
}
return $output;
}
Disons que tu n'as pas lu les commentaires dans le pseudo-code que j'ai fourni…
D'après ce que tu as mis ci-dessus
Dans add_comment.php, les lignes 7 à 11 ne servent à rien, elles peuvent disparaître.
Dans fetch_comment.php :
la ligne 4 a besoin d'être adaptée, relis le commentaire que tu as copié-collé ainsi que le deuxième paragraphe de ce message ou le deuxième de celui-ci ;
la ligne 5 ne définit pas le format de la date, mais la date formatée, donc vraiment la date comme tu souhaites l'afficher ;
la ligne 6 devrait être les lignes 10 à 17, et ces dernières sont à adapter évidemment pour prendre la date formatée.
Une fois de plus, pour formater ta date, tu sais le faire dans un des scripts (lignes 13 à 19 de add_comment.php) et plus dans l'autre, moi ça me surprend beaucoup, sinon m'inquiète.
Tes messages je les lis et relis tellement que je les connais par coeur.. je peux y passer plusieurs heures à tester/essayer de comprendre avant de venir poster un message. Mon cerveau est incompatible avec le php je pense..
Bref, pour commencer : "au lieu de mettre une date fixe, tu mets la date de la base de données."
C'est quoi "la date de la base de donnée" ? Je ne comprends pas ce que je dois trouver dans ma base de donnée
$row est un résultat de base de données, avec une colonne 'date', non ? Rien à "trouver" dans ce cas, juste l'utiliser un peu différemment, donc le passer en paramètre du constructeur de l'objet DateTime.
Un constructeur, c'est une méthode de classe un peu particulière qui permet de créer une instance de cette classe avec le mot-clé new.
Là tu passes l'entier du résultat en paramètre, or tu ne veux manipuler que la date (normalement si tu avais essayé, tu aurais dû avoir une erreur disant qu'une chaîne de caractères était attendue et que tu lui as passé un PDOStatement) . C'est de ma faute, j'ai mis "le" au lieu de "la" dans le message précédent.
Et pourtant si. Raisonnons un peu : $row['date'] contient une date sous forme de chaîne de caractères au format Y-m-d H:i:s, ce qui est la même chose qu'à la ligne 65 du code de ce message, sauf que cette fois la valeur vient de la base de données.
Ok bon ça je pense que c'est compris, ensuite suis-je sur la bonne voie ?
Pour le moment je vois que la date change mais elle est sous cette forme : 08 Marsh 2021 à 15h20 Et je ne peux plus poster de messages
add_comment :
$connect = new PDO('');
$error = '';
$comment_name = '';
$comment_content = '';
$email = '';
$now = new DateTime();
$metteurEnForme = new IntlDateFormatter(
'fr',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE
);
echo $metteurEnForme->format($now);
//...
fetch_comment :
//...
foreach ($result as $row) {
$date = new \DateTime($row["date"]); // cf. ma remarque pour créer une date depuis la base de données
$formatedDate = '08 Mars 2021 à 13h21'; // cf. la FAQ PHP
$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>'. $date->format('d F Y \à H\hi') .'</i></div>
<div class="texte-com">'.$row["comment"].'</div>
<div class="reponse"><button type="button" class="reply" id="'.$row["comment_id"].'">Répondre</button></div>
</div>
';
$output .= get_reply_comment($connect, $row["comment_id"], $marginleft);
}
}
return $output;
}
Ligne 4 de fetch_comment.php, il faut mettre du code qui formate la date, pas formater à la main Tu as ce genre de code lignes 10 à 14 de add_comment.php.
Et ligne 8 il faut utiliser $formatedDate, sans quoi tu risques de ne toujours pas avoir ce que tu souhaites.
Fatal error: Uncaught Error: Class 'IntlDateFormatter' not found in /home/prenoms-bebe/www/fetch_comment.php:61 Stack trace: #0 /home/prenoms-bebe/www/fetch_comment.php(32): get_reply_comment(Object(PDO), '25') #1 {main} thrown in /home/prenoms-bebe/www/fetch_comment.php on line
Là, ton code me parait bon, l'erreur ne vient pas directement de celui-ci. Tu es bien sous Linux ?
Trois possibilités non exclusives :
l'extension de PHP intl n'est pas activée, à toi de vérifier avec un phpinfo();, il faudrait l'activer` ;
ta version de PHP n'a pas été installée avec l'extension intl, il faudrait l'installer et l'activer ;
il te manque la bibliothèque ICU sur ta machine.
Là, je vais difficilement pouvoir t'aider dans la mesure ou c'est de la configuration serveur qui dépend de ton environnement.
Du coup, au pire, peux utiliser les versions avec strftime(), strtotime() et setlocale(). elles aussi renseignées dans la FAQ PHP, mais il y a pas de garantie que cela fonctionne partout.
J'ai un hébergement gratuit chez Alwaysdata, voici ce que j'ai trouvé comme informations :
La puissance GNU/Linux
Nous utilisons les fonctionnalités natives du noyau Linux et de la distribution Debian pour offrir nativement un accès aux technologies les plus avancées : SSH, IPv6 généralisées, tâches planifiées, VPN, etc.
Et est-ce que tu saurais me dire quelle version de PHP est activée sur ton espace d'hébergement ? Un "simple" fichier avec <?php phpinfo(); te le dira. Parce qu'au vu de ce que tu me dis et de ce que je peux voir, chez ton hébergeur, il y a pléthore de versions disponibles, mais c'est sensé être configurable.
A savoir qu'il vaudrait mieux que tu aies une installation sur ta propre machine pour développer, mais déjà pas mal d'étapes ont été grillées, alors quelques unes de plus ou de moins…
C'est pourtant fastidieux de toujours devoir envoyer sur le serveur "final" pour tester, et tu verras qu'une fois ton site en ligne, ce ne sera plus viable parce que cela voudra dire que tu travailleras sur le site que tout le monde peut voir et causer une erreur pour de vrais utilisateurs.
Je ne sais pas quelles sont les possibilités de ta solution d'hébergement, mais jette un oeil à cette page et regarde ce que tu peux faire. L'extension qu'il te manque est sauf erreur php_intl.so.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
j'imagine car effectivement j'avais une erreur mais je n'ai pas d'erreurs si je mets Mais pas sure non plus que ce soit comme ça qu'il faut faire