Script Automatique (Système cron je pense)

Eléphanteau du PHP | 30 Messages

01 août 2007, 23:52

Bonjour à tous,
Je viens de créer un jeu de gestion en ligne, et j'aurais besoins que chaque jours, un script s'exécute automatiquement. Il faudrais qu'il calcul le salaire total que chaque joueur doit payer pour payer ses salariés et qu'il modifie le champs dans la base de données mysql !

Voici les infos:
Champs des employés: Serveur payé à 35.00/jour et chef de rang payé à 46.00/jour

Comment faire ?

Merci d'avance pour vos réponses.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 août 2007, 00:25

Une crontab, si ton serveur en dispose, est effectivement la solution la plus simple pour programmer une exécution... à défaut, certains sites comme webcron.org te propose ce même service :)

Pour le reste, bah à toi d'exécuter les requêtes SQL qui vont bien pour mettre à jour ta base :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 30 Messages

02 août 2007, 00:48

Oui, merci de ta réponse, sa m'aide déjà un peu, mais quel script dois-je faire ?

Peut-tu m'aider s'il te plaît ?

Merci beaucoup

EDIT: Quelqu'un m'avais déjà donner un code, mais sa ne fonctionne pas, que faut-il modifier ?

Code : Tout sélectionner

<?php require("conf_gastro.php"); /*-----------------------------------------------------------------*/ /* AJOUT DANS MySQL */ /*-----------------------------------------------------------------*/ // CONNEXION A LA BASE DE DONNEE $db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd); if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf_gastro.php"; exit;} $requete=mysql_db_query($sql_bdd,"select * from membre_gastro",$db_link) or die(mysql_error()); // Insertion dans la table if ($_SESSION['derniere_paie'] < $time_genere) { $diff = $time_genere - $_SESSION['time_genere']; $nbrJourPaie = $diff / (24*60*60); //calcul du nombre de jour non-payés $apayer1 = $nbrJourPaie * $serveur_sal * $serveur; //calcul de la paye $apayer2 = $nbrJourPaie * $chef_rang_sal * $chef_rang; //calcul de la paye $apayer_fini = $apayer1 + $apayer2; //fin du calcul //mise à jour de la derniere paie et du nouvel argent ! $requete=mysql_db_query($sql_bdd,"UPDATE membre_gastro SET derniere_paie=time(), argent=$argent - $apayer_fini",$db_link); } // DECONNEXION MYSQL mysql_close($db_link); ?>
Merci de votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 août 2007, 17:30

Bah dis nous peut être ce qui ne fonctionne pas :) As-tu un message d'erreur ? (vire les "@" ils peuvent dissimuler certaines infos et te faire louper des messages)

A noter que si tu passes par un webcron, il n'y aura pas d'objet $_SESSION, donc le test n'est pas adapté. Enfin, je pense que tu dois pouvoir faire la mise à jour directement avec une requête UPDATE (bien réfléchie, certes, mais une seul) directement en base sans nécessiter de faire de SELECT ou de traitement php :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

02 août 2007, 17:32

Bah dis nous peut être ce qui ne fonctionne pas :) As-tu un message d'erreur ? (vire les "@" ils peuvent dissimuler certaines infos et te faire louper des messages)

A noter que si tu passes par un webcron, il n'y aura pas d'objet $_SESSION, donc le test n'est pas adapté. Enfin, je pense que tu dois pouvoir faire la mise à jour directement avec une requête UPDATE (bien réfléchie, certes, mais une seul) directement en base sans nécessiter de faire de SELECT ou de traitement php :)
D'accord, je vais essayer......merci !

Invité
Invité n'ayant pas de compte PHPfrance

02 août 2007, 17:56

Alors voici le code que je vien de créer, voici le système:
Calcul le salaire de tous les serveurs (Nombre de serveur enregistré dans la base x le salaire)
il le fait avec tous les employés et ensuite, il fait le salaire total des serveurs + le salaire total des chefs de rangs......

Ce code est-il correct pour faire celà ?

Code : Tout sélectionner

<?php // CONNEXION A LA BASE DE DONNEE $db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd); if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf_gastro.php"; exit;} $requete=mysql_db_query($sql_bdd,"select * from membre_gastro",$db_link) or die(mysql_error()); // Calcul des salaires $new_serveur_sal = '$serveur * 30.00';// Nombre d'employé(s) x le salaire $new_chef_rang_sal = '$chef_rang * 36.42'; $new_maitre_hotel_sal = '$maitre_hotel * 39.12'; $new_commis_sal = '$commis * 32.75'; $new_sommelier = '$sommelier * 34.88'; $new_argent = '$new_serveur_sal + $new_chef_rang_sal + $new_maitre_hotel_sal + $new_commis_sal + $new_sommelier_sal'; // DECONNEXION MYSQL mysql_close($db_link); ?>
Merci de vos réponses

Eléphanteau du PHP | 30 Messages

02 août 2007, 17:58

Désolé c'est moi qui ai écrit les messages en tant que "invité" car je n'avais pas vu que j'étais déconnecté du forum :)

EDIT: Je vien de me rendre compte d'un truc, alors j'ai ajouté et voici le nouveau code que j'ai:

Code : Tout sélectionner

<?php // CONNEXION A LA BASE DE DONNEE $db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd); if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf_gastro.php"; exit;} $requete=mysql_db_query($sql_bdd,"select * from membre_gastro",$db_link) or die(mysql_error()); // Calcul des salaires $new_serveur_sal = '$serveur * 30.00';// Nombre d'employé(s) x le salaire $new_chef_rang_sal = '$chef_rang * 36.42'; $new_maitre_hotel_sal = '$maitre_hotel * 39.12'; $new_commis_sal = '$commis * 32.75'; $new_sommelier = '$sommelier * 34.88'; $new_argent = '$new_serveur_sal + $new_chef_rang_sal + $new_maitre_hotel_sal + $new_commis_sal + $new_sommelier_sal'; mysql_query("UPDATE membre_gastro SET argent='$new_argent'"); // DECONNEXION MYSQL mysql_close($db_link); ?>
Mais celà ne fonctionne toujours pas, quelqu'un sait-il pour quoi ?

Merci d'avance pour vos réponses.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 août 2007, 00:27

C'est toujours aussi vrai :
Bah dis nous peut être ce qui ne fonctionne pas :) As-tu un message d'erreur ? (vire les "@" ils peuvent dissimuler certaines infos et te faire louper des messages)
Par ailleurs, sors tes variables php des chaines, cela t'évitera de nombreuses erreurs, nottament parce que si une variable entre guillemets est interprétée, une variable entre apostrophe ne l'est pas.

Ajoute un or die (mysql_error()) lorsque tu fais l'update.. affiche également la requête SQL que tu génère, tu verrais tout de suite l'erreur et comment la corriger :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 30 Messages

07 août 2007, 02:21

Voilà, j'ai modifié mais sa fait toujours parreil, sa m'affiche:

Parse error: parse error, unexpected '}' in /homepages/4/d205857560/htdocs/mon-restaurant-virtuel.com/gastro/employes2.php on line 30

Et je ne voit vraiment pas pourquoi puisqu'il n'y à même pas 30 lignes dans mon code :)

Merci d'avance pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 août 2007, 08:17

"Parse Error" signifie que tu as une erreur de syntaxe dans ton code, "unexpected '}'" signifie qu'il tombe sur une accolade fermante alors qu'il ne s'y attendait pas, c'est donc qu'il ne trouve pas l'accolade ouvrante correspondante. Vérifies que tes paires d'accolades sont toutes bien équilibrées ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 30 Messages

07 août 2007, 12:06

"Parse Error" signifie que tu as une erreur de syntaxe dans ton code, "unexpected '}'" signifie qu'il tombe sur une accolade fermante alors qu'il ne s'y attendait pas, c'est donc qu'il ne trouve pas l'accolade ouvrante correspondante. Vérifies que tes paires d'accolades sont toutes bien équilibrées ;)
Merci mais je ne voit pas d'accolade fermente donc je ne sais pas ou en mettre une ouvrante :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 août 2007, 13:24

bah fais voir le code de ta page employes2.php :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 30 Messages

07 août 2007, 14:58

Nous avons fait un nouveau script, celui-ci ne m'affiche aucune erreur, seulement, lorsque le script s'exectute, il vide les champs argent et timestamps à la place de les modifiés
<?php
require("conf_gastro.php");

// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez
les paramètres du fichier conf_gastro.php"; exit;}
$requete=mysql_db_query($sql_bdd,"select * from membre_gastro",$db_link) or die(mysql_error());
    
    // Fonction qui transforme un timestamp en nombre de jours
    function getDay($timestamp) {
    // On divise tout simplement les secondes pour obtenir des jours
    $day = floor($timestamp/(60*60*24)); // 60 secondes = 1 min, 60 min = 1 h, 24 h = 1 jour
    return ($day);
    }

    // On crée deux constantes contenant les salaires
    define ('serveur_sal', 32);
    define ('maitre_hotel_sal', 35);

    // Le timestamp actuel
    $actual = time();

    /* Avec la manipulation que tu souhaite (lecture d'un fichier ou d'une base de donnée), tu récupère dans la variable $last le timestamp qui a été stocké */

    // On convertit les secondes du timestamp en jours grâce à la fonction getDay()

    $now = getDay($actual);
    $before = getDay($last);

    if ($now > $before) // Si le jour est supérieur à celui marqué dans le timestamp
    // On actualise le timestamp et on calcule l'argent
    /* Je te laisse actualiser de la manière que tu souhaite le fichier ou la base de donnée, sachant qu'il faut que le contenu du timestamp soit $actual */
    {
    $depenses = ($nombreServeurs * SERVER_PRICE) + ($nombreMaitres * MASTER_PRICE);
    $news_argent - $depenses;
    }
mysql_query("UPDATE membre_gastro SET argent=\"$new_argent\",derniere_paie=\"$actual\"") or die(mysql_error());
    ?>
Merci de vos réponse

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 août 2007, 15:11

Affiche la requête que tu exécutes.... regarde si celle-ci correspond bien à ce que tu souhaites... affiche les valeurs que tu utilises, regarde si celles-ci correspondent bien à ce que tu attends...

Regarde bien le nom de teS variableS, en faiSant attention, tu devraiS aSSez vite trouver d'où vient SouciS ;)

Et par ailleurs, à moins de vouloir donner le même argent à tout le monde, ajouter un WHERE ou reprendre la valeur précédente du champ dans l'update me semblerait assez judicieux :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 30 Messages

07 août 2007, 15:13

Et par ailleurs, à moins de vouloir donner le même argent à tout le monde, ajouter un WHERE ou reprendre la valeur précédente du champ dans l'update me semblerait assez judicieux :)
Oui mais alor de doit mettre quoi après WHERE ?