8768 sujets

Développement web côté serveur, CMS

Bonjour,

Débutant en PHP PDO, je cherche à modifier la date à chaque validation dans la dernière colonne de ma table 'people'.
Tout fonctionne bien mais je cale sur la date, je ne sais pas comment m'y prendre pour déclarer la variable après la colonne 'messages'
J'ai essayé avec NOW( ) mais sans succès.
Dans ma table, la colonne date_modif est en DATETIME

Voici le code de ma page edit.php :


<?php
require 'db.php';
$id = $_GET['id'];
$sql = 'SELECT * FROM people WHERE id=:id';
$statement = $connection->prepare($sql);
$statement->execute([':id' => $id ]);
$person = $statement->fetch(PDO::FETCH_OBJ);
if (isset($_POST['equipe_1']) && isset($_POST['equipe_2']) && isset($_POST['equipe_3']) && isset($_POST['equipe_4']) && isset($_POST['messages']) ) {
  $equipe_1 = $_POST['equipe_1'];
  $equipe_2 = $_POST['equipe_2'];
  $equipe_3 = $_POST['equipe_3'];
  $equipe_4 = $_POST['equipe_4'];
  $messages = $_POST['messages'];
  $sql = 'UPDATE people SET equipe_1=:equipe_1, equipe_2=:equipe_2, equipe_3=:equipe_3, equipe_4=:equipe_4, messages=:messages WHERE id=:id';
  $statement = $connection->prepare($sql);
  if ($statement->execute([':equipe_1' => $equipe_1, ':equipe_2' => $equipe_2, ':equipe_3' => $equipe_3, ':equipe_4' => $equipe_4, ':messages' => $messages, ':id' => $id])) {
    header("Location: /");
  }
}



Meci pour votre aide ....
La façon la plus robuste est de gérer la date de modif dans la base de données en utilisant un trigger sur update.
L'implémentation dépend de ton moteur de base de données (SQlite3, MariaDb, PostGreSQL, ...)
Il te faut créer une colonne dans la table people dédiée à cela :
soit type long integer pour enregistrer la date en temps EPOCH
soit type string pour enregistrer la date au format ISO

Ca c'est mal (injection de code par un hacker possible ) Smiley fache
$equipe1 = $_POST['equipe1'];

Faire :
$equipe1 = filter_input(INPUT_POST, 'equipe1', FILTER_SANITIZE_STRING);

http://php.net/manual/fr/function.filter-input.php
Tous les input 'equipe_' sont des variables type="number" , pas possible d'injecter du code.
Pour l'input 'messages' c'est du type ="text" je mettrai :
$messages = htmlspecialchars($_POST['messages']); pour le protéger un minimum.

Ma table est définie comme ceci:
id
name
email
message_1
message_2
message_3
message_4
date_modif

Mon souci c'est d'arriver à écrire le code qui fera qu'à chaque submit de UPDATE, la date dans date_modif prenne la date et l'heure du style 2018-04-21 18:24:00

Mais les dates c'est compliqué pour moi !!!

Je suis sous serveur local :

Serveur : Local Databases (127.0.0.1 via TCP/IP)
Type de serveur : MySQL
Version du serveur : 5.7.14 - MySQL Community Server (GPL)
Version du protocole : 10
Utilisateur : root@localhost
Jeu de caractères du serveur : UTF-8 Unicode (utf8)


Help Smiley rolleyes
Ne jamais faire confiance à un utilisateur. Ce n'est pas lui qui répare les dégâts.
$equipe1 = filter_input(INPUT_POST, 'equipe1', FILTER_SANITIZE_NUMBER_INT);
http://php.net/manual/fr/filter.filters.sanitize.php

Tu as la doc officielle ici
https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

Pour les only francophones :
https://openclassrooms.com/courses/administrez-vos-bases-de-donnees-avec-mysql/triggers
Modifié par bazooka07 (22 Apr 2018 - 10:54)