Page 1 sur 2
Script Automatique (Système cron je pense)
Posté : 01 août 2007, 23:52
par benjam89
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.
Posté : 02 août 2007, 00:25
par Ryle
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

Posté : 02 août 2007, 00:48
par benjam89
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
Posté : 02 août 2007, 17:30
par Ryle
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

Posté : 02 août 2007, 17:32
par Invité
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 !
Posté : 02 août 2007, 17:56
par Invité
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
Non conecté...
Posté : 02 août 2007, 17:58
par benjam89
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.
Posté : 04 août 2007, 00:27
par Ryle
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

Posté : 07 août 2007, 02:21
par benjam89
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
Posté : 07 août 2007, 08:17
par Ryle
"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

Posté : 07 août 2007, 12:06
par benjam89
"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

Posté : 07 août 2007, 13:24
par Ryle
bah fais voir le code de ta page employes2.php

Posté : 07 août 2007, 14:58
par benjam89
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
Posté : 07 août 2007, 15:11
par Ryle
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

Posté : 07 août 2007, 15:13
par benjam89
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 ?