IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

UPDATE valeur tous les X(valeur sql) du mois. [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2017
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2017
    Messages : 124
    Points : 46
    Points
    46
    Par défaut UPDATE valeur tous les X(valeur sql) du mois.
    Bonjour !

    Je suis actuellement entrain de créer un système de solde(banque), il est fonctionnel, par contre il y a quelque chose que je n'arrive pas à faire, c'est le fait que tous les mois, ce solde se décrémente d'un certain tarif..

    Je ne sais pas comment le réaliser, puis-je le faire en PHP ?

    Si non, puis-je le faire en crontab (malgré que je pense que cela ne va pas être super adapté a mon besoin ) ? Si oui, avez vous des exemples car ce sera nouveau pour moi..

    Voila mes tables qui vont etre nécessaire :

    http://prntscr.com/k25q8g
    http://prntscr.com/k25r0w

    Les tables sont liés de cette manière : http://prntscr.com/k25s71

    Ma demande : Que tous les [date de Table 1, le solde de table 2 soit réduit du prix de table 1 ..]
    La date est définit de cette manière : strftime('%Y/%m/%d %H:%M:%S');



    Merci à vous !

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Une tâche planifiée (Cron ou autre) c'est comme un rappel dans ton calendrier, ça lance un traitement à heure/date fixe.
    Il va donc falloir un script PHP qui fait la modification souhaitée (indifféremment de la date) et une tâche planifiée qui lance le script à la date souhaitée.

    Une remarque sur le forum : pour nous donner la structure des tables, tu peux faire un copier-coller du SQL de création de la table plutôt qu'une capture d'écran de PhpMyAdmin
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2017
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2017
    Messages : 124
    Points : 46
    Points
    46
    Par défaut
    Merci de la réponse, je comprends ta proposition mais je ne comprend pas comment faire pour quelle s’exécute en fonction et pour chaque client.

    Voila ce à quoi je pense malgré que je sais que le $_SESSION ne sera pas utilisable ici j'imagine..
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?php
    try{
     
    	$db = new PDO('mysql:host=127.0.0.1;dbname=db', 'USER','MDP');
    	$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules
    	$db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions
     
    }
     
    catch(Exception $e){
     
    	die('Veuillez vérifier la connexion à la base de données');
     
    }
    	//Selection du prix de l'objet par rapport au numéro client
    	$user_id = $_SESSION['user_id'];
    	$select = $db->query("SELECT prix FROM TABLE1 WHERE user_id='$user_id'");
    	$r = $select->fetch(PDO::FETCH_OBJ);
    	$price = $r->prix;
     
    	// Modification du solde du client
    	$selectsolde = $db->query("SELECT solde FROM users WHERE id='$user_id'");
    	$r2 = $select->fetch(PDO::FETCH_OBJ);
    	$solde = $r2->solde;
    	$soldenew = $solde-$price;
    	$update = $db->query("UPDATE users SET solde='$soldenew' WHERE id='$user_id'");
     
     
    ?>

  4. #4
    Modérateur
    Avatar de BakSh0
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 276
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Tu boucle ton script sur la tables des clients (select id from users ..)
    BakSh0, Modérateur .Net & Web

    Affichez la colorisation syntaxique dans votre code en ajoutant dans votre balise : [CODE=xxx] en remplaçant xxx par le nom du langage.


    N'oubliez pas de consulter les FAQs : .Net / Web et les cours et tutoriels .Net / Web

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Novembre 2017
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2017
    Messages : 124
    Points : 46
    Points
    46
    Par défaut
    Hum dis comme ça je ne vois pas du tout à quoi cela répond
    Un adaptation du code stp ?


    Sachant que c'est une requete à executée pour l'utilisateur lorsque nous somme la "colonne date" de son renouvellement.

  6. #6
    Modérateur
    Avatar de BakSh0
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2014
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 276
    Points : 1 271
    Points
    1 271
    Par défaut
    Et bien la tu a ton code comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
       // Code de connexion a la base de données 
       $db = new PDO('mysql:host=127.0.0.1;dbname=db', 'USER','MDP');
       // (...)
     
       // Ton code qui fait le job pour l utilisateur $user_id
    ?>

    L'idée est de le faire pour TOUS les utilisateurs, il suffit donc de boucler ton code sur la liste des utilisateurs

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
       // Code de connexion a la base de données 
       $db = new PDO('mysql:host=127.0.0.1;dbname=db', 'USER','MDP');
       // (...)
     
       // Ta requete qui récupère la liste des utilisateurs dont la date de son renouvellement est inférieure ou égale a la date aujourd’hui, ou égale a la date d aujourd’hui comme tu veux ..
       $select = $db->query("SELECT id FROM users WHERE date_renouvellement ... ");
       // (...)
     
       // Tu boucle sur le résultat
       // Ton code qui fait le job pour l utilisateur courant dans ta boucle
    ?>
     
    Ensuite tu fait exécuter ce code une fois par jour par une tâche planifiée et le tour est joué.
    BakSh0, Modérateur .Net & Web

    Affichez la colorisation syntaxique dans votre code en ajoutant dans votre balise : [CODE=xxx] en remplaçant xxx par le nom du langage.


    N'oubliez pas de consulter les FAQs : .Net / Web et les cours et tutoriels .Net / Web

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ce que suggère BakSh0, c'est de récupérer la liste des utilisateurs par une requête avant et de boucler dessus pour avoir l'information que tu as actuellement via $_SESSION
    Citation Envoyé par Whisper40 Voir le message
    Sachant que c'est une requete à executée pour l'utilisateur lorsque nous somme la "colonne date" de son renouvellement.
    Dans ce cas, il faut faire une requête qui remonte tous les utilisateurs ciblés.
    Par exemple (code non testé, j'ai mis les noms de table et colonnesau hasard)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $stmtUsers = $db->query('SELECT user_id from user where DATE(dateRenouvellement) = CURDATE()');
    $user_ids = $stmtUsers->fetchAll(PDO::FETCH_COLUMN, 0);
     
    // pour chaque utilisateur dont la date de renouvellement est aujourd'hui
    foreach ($user_ids as $user_id) {
        //Selection du prix de l'objet par rapport au numéro client
        $select = $db->query("SELECT prix FROM TABLE1 WHERE user_id='$user_id'");
        $r = $select->fetch(PDO::FETCH_OBJ);
        $price = $r->prix;
     
        // Modification du solde du client
        $selectsolde = $db->query("SELECT solde FROM users WHERE id='$user_id'");
        $r2 = $select->fetch(PDO::FETCH_OBJ);
        $solde = $r2->solde;
        $soldenew = $solde-$price;
        $update = $db->query("UPDATE users SET solde='$soldenew' WHERE id='$user_id'");
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/10/2009, 14h03
  2. Mettre une même valeur à tous les champs d'un formulaire.
    Par nodogeid dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/06/2007, 15h43
  3. oracle 9i - update de tous les champs
    Par the_ugly dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/03/2007, 14h54
  4. [SQL Server 2000] UPDATE sur tous les champs de ma table
    Par neeux dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/12/2006, 10h13
  5. Réponses: 9
    Dernier message: 20/09/2006, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo