[sql]|[php] help systeme d expiration

Résolu
alborq Messages postés 61 Statut Membre -  
avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   -
Bijour, Bisoir,
je suis venu encore une fois vous demandez votre aide j'ai un champs de ma table de compte de mon site qui se nomme expire sont type es INT et j'aimerais automatiser un -1 chaque jours de cette donné dans l'intégrale de la colone expire pour que chaque mois les compte soit désactivez pour vidé ma bases ou réactiver grâce un script déjà tout prêt mais je ne sais pas comment automatisé un -1 dans toute la colone de ma table sachant que je n'es pas de serveur dédier disponible pour faire tourné une page web de -1 donc y a t'il possibilité d'entrer une requête sql sur phpmyadmin qui aurais cette effet ? merci de m'avoir lu au-revoir a bientôt !

7 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Salut.

    Tu peux utiliser les tâches CRON.
    Seulement, il te faut un serveur dédié, ou certains hébergeurs en mutualisés proposent aussi cette option. Elles permettent tout simplement d'exécuter un script PHP à un moment donné (une date, ou à intervalle).
    Sinon, tu peux coder toi-même un système de CRON en PHP. Tu vérifies si la différence entre la date de la dernière exécution (stockée dans un fichier) et la date actuelle est supérieur à une jour. Si oui, tu exécutes la requête SQL. Ce script devra être inclus dans toutes les pages.

    Ou bien alors tu peux tout simplement indiquer le jour d'expiration au lieu de stocker le nombre de jours restant.
    1
  2. Zep3k!GnO Messages postés 2049 Statut Membre 200
     
    Salut, si je comprend bien tu veux décrémenter ton champ "expire".
    tu peux le faire avec une requête du type:
    UPDATE 'Nom_de_ta_table' SET 'expire' =  ('expire' - 1)
    0
  3. alborq Messages postés 61 Statut Membre
     
    Oui c'est sa mais j'ai besoin que cette requete s'execute automatiquement chaque jour a minuit par exemple es possible ?
    0
  4. Zep3k!GnO Messages postés 2049 Statut Membre 200
     
    Ah, autant pour moi, j'avais pas bien lu.
    Je ne l'ai jamais mis en place mais je pense qu'il y a moyen de créer une procédure SQL et ensuite de la scheduler, j'ai vite fait trouvé ça sur google : https://atranchant.developpez.com/mysql/evenement/

    Bon courage
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. alborq Messages postés 61 Statut Membre
     
    je vais regardez merci a toi
    0
  7. alborq Messages postés 61 Statut Membre
     
    eee.... LOVE =) tu roxx toi =)
    0
  8. alborq Messages postés 61 Statut Membre
     
    la requete que l'on ma donnez pour le -1 ne marche pas elle remplace le champs par -1 donc comment soustraire en requete SQL un champs svp ? ou un scrypt php ^^
    0
    1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Il faut d'abord récupérer la valeur actuelle. Une fois que tu l'as dans une variable PHP, il suffit de décrémenter cette variable de 1 : $var -= 1
      Et après, tu fais une requête pour mettre à jour la valeur de la colonne.

      Mais je te conseille plutôt d'utiliser les dates ou le timestamp plutôt qu'un nombre représentant le nombre de jours restant.
      0
    2. alborq Messages postés 61 Statut Membre
       
      Avec les Date je vois pas comment faire ^^ car la apres je compte mettre un systeme de conditions sur mes pages proteger pour verifié s'il sont toujours abonné
      0
    3. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Il suffira de vérifier si "la date d'expiration est inférieur à la date actuelle"
      0
    4. alborq Messages postés 61 Statut Membre
       
      je fait le scrypt de -1 la mon code es en cours c'est corect ?
      <?php
      try
      {
          // On se connecte à MySQL
          $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
          $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
          
          // On récupère tout le contenu de la table jeux_video
          $reponse = $bdd->query('SELECT * FROM compte');
          
          // On affiche chaque entrée une à une
          while ($donnees = $reponse->fetch())
          {
          ?>
          <?php
      	 $result = $donnees['expire'] -= 1; 
      	$req = $bdd->prepare(UPDATE 'compte' SET 'expire' = :top)
          $req->execute(array(
      	                'top' => $result,
      					));
          ?>
      
          }
          
          $reponse->closeCursor(); // Termine le traitement de la requête
      
      }
      catch(Exception $e)
      {
          // En cas d'erreur précédemment, on affiche un message et on arrête tout
          die('Erreur : '.$e->getMessage());
      }
      
      
      ?>
      l'erreur es
      Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\wamp\www\gm\lecture table.php on line 17
      es la je voit pas ....
      0
    5. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Pourquoi fermer et réouvrir directement les "balises" PHP ?
      Ta requête SQL est une chaine de caractère en PHP, donc il faut des guillemets autour.
      De plus, il faut ajouter la clause WHERE pour ne pas mettre à jour tous les comptes par le nombre qui vient d'être trouvé.
      Et pour terminer, "-=" sert à décrémenter une variable. Ici, le signe "moins" seulement suffit.
      <?php
      while ($donnees = $reponse->fetch()) {
      	$result = $donnees['expire'] - 1;
      	$req = $bdd->prepare('UPDATE compte SET expire = :top WHERE id = :id')
      	$req->execute(array(
      		'top' => $result,
      		'id' => $donnees['id'],
      	));
      }
      ?>
      0