Bloquer un compte membre après un certain temps d'inactivité

Résolu
TUCS -  
 TUCS -
Bonjour,

Je souhaiterai que les membres du site qui ne se sont pas connecté depuis un certain temps (3mois) soit temporairement bloqué. Un mail leur serait envoyé au moment du blocage pour qu'il puisse le débloquer.

Mon but est de faire une page qui réalise une boucle dans ma bdd où se trouve la date de la dernière connexion de chaque personne, fasse la différence entre auj et sa dernière connexion. Si ça fait plus que 100jours, ça change un chiffre dans la même bdd qui bloque le compte lors de la connexion.
Les codes ci-dessous calcule bien la différence mais je n'ai pas réussi à faire modifier l'information dans ma bdd. Si vous savez m'aider, je serais reconnaissant :)

PS: Lorsque j'ouvre la page comme elle est, je vois les jours d'inactivité mais rien ne se passe dans la bdd et pas d'erreur.

Voici mes codes:

<?php
    $host = 'db770114383.hosting-data.io';
    $database = 'db770114383';
    $username = 'dbo770114383';
    $password = '';
    try {
        $dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        print "Erreur !: " . $e->getMessage() . "<br/>";
        die();
    }
?>
<?php 
 function dateDiff($date1, $date2){
    $host = 'db770114383.hosting-data.io';
    $database = 'db770114383';
    $username = 'dbo770114383';
    $password = '';
    try {
        $dbh = new PDO("mysql:host=$host;dbname=$database", $username, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        print "Erreur !: " . $e->getMessage() . "<br/>";
        die();
    }
   
    $diff = abs($date1 - $date2);
    $retour = array();
 
    $tmp = $diff;
    $retour['second'] = $tmp % 60;
 
    $tmp = floor( ($tmp - $retour['second']) /60 );
    $retour['minute'] = $tmp % 60;
 
    $tmp = floor( ($tmp - $retour['minute'])/60 );
    $retour['hour'] = $tmp % 24;
 
    $tmp = floor( ($tmp - $retour['hour'])  /24 );
    $retour['day'] = $tmp;
   	
    return $retour;
}   
  

$query = 'SELECT * FROM users WHERE autorisation="50" AND actif="0";';
    try {
    $reponse = $dbh->prepare($query);
    $reponse->execute();
    $NbreData = $reponse->rowCount();  // nombre d'enregistrements (lignes)
    $rowAll = $reponse->fetchAll();
    } catch (PDOException $e){ echo 'Erreur SQL : '. $e->getMessage().'<br/>'; die(); }
// --------------------------------
// affichage
if ($NbreData != 0) 
{
?>
  <table border=1 width=70% align="center" cellspacing=0 cellpadding=1>
  <thead>
    <tr><th colspan="3"><h2 class="partie2">Les membres:</h2></th></tr>
    <tr>
      <th><h3>ID</h3></th>
      <th><h3>Connexion</h3></th>
      <th><h3>Différence</h3></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
<?php
  // pour chaque ligne (chaque enregistrement)
  foreach ( $rowAll as $row ) 
  {
    // DONNEES A AFFICHER dans chaque cellule de la ligne
?>
    <tr>
      <td><?php echo $row['identifiant']; ?></td>
      <td><?php echo $row['connexion']; ?></td>
      <td><?php  $now = time();
				 $date2 = strtotime($row['connexion']);
				 print_r( dateDiff($now, $date2) );    			
	  ?></td>
      <td><?php if ($retour['day'] > 100) {
    echo 'Inactif  ';
    $actif = '1';	
    $ide = $row['identifiant'];
	$stmt = $dbh->prepare("UPDATE users SET actif=:actif WHERE identifiant=:identifiant");
    $stmt->bindParam(':actif', $actif);
    $stmt->bindParam(':identifiant', $ide);
    $stmt->execute();  
        }?></td>
    </tr>
<?php
  } } // fin foreach
?>
  </tbody>
  </table>


Configuration: Windows / Firefox 70.0
A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Il y a plus simple qu'une boucle....
Tu peux simplement faire ta requête UPDATE sur TOUS les utilisateurs qui ont leur date ''connexion''
inférieur à Aujourd'hui - 100 Jours

UPDATE `users` SET actif= 1
WHERE connexion <= NOW() - INTERVAL 100 DAY


Et au passage, vu que tu fais du PDO, active la gestion des erreurs PDO
Ainsi que l'affichage des erreurs PHP
et place CHAQUE requête dans un bloc TRY/CATCH

Je t'invite à lire ceci :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
et ça
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

0
TUCS
 
Merci Jordane, si j'avais su qu'il y avait si simple... J'ai passé des heures avec une solutions tordues ahaha merci à toi, ça fonctionne à merveille :)
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
tu as négligé de nous indiquer si la ligne 85 affichait "inactif", ou pas.
il me semble que ton code calcule bien la différence, mais ne l'utilise pas.
ta ligne 84 est incorrecte, j'espère que tu auras un message d'erreur clair dès que tu auras appliqué les conseils de jordane45.
ajoute un
print_r($retour);
juste avant la ligne 84.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Hello,
La ligne 84 n'existera plus dès lors qu'il appliquer la mise à jour en une seule requête au lieu de faire une boucle en php.
0