Bloquer un compte membre après un certain temps d'inactivité
Résolu
TUCS
-
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:
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:
- Bloquer un compte membre après un certain temps d'inactivité
- Créer un compte google - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
- Compte gmail bloqué - Guide
- Comment récupérer un compte facebook piraté - Guide
2 réponses
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
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
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
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 :)
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
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.