Script Automatique (Système cron je pense)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Script Automatique (Système cron je pense)

par Ryle » 07 août 2007, 22:37

Alors regarde la requête que je t'ai proposé plus haut :)
UPDATE membre_gastro SET # met à jour la table membre_gastro
  derniere_paie = NOW(), # set le champ "derniere_paie" avec la date du jour
  argent = argent - (serveur *".SERVER_PRICE." + maitre_hotel *".MASTER_PRICE.") # set le champ "argent" avec le calcul : "argent (sous entendu argent actuel) moins le calcul (nombre de serveur * prix du serveur + nb maitre d'hotel * prix maitre)
  WHERE derniere_paie = DATE_SUB(NOW(), INTERVAL 1 DAY) # pour tous les enregistrement daté d'hier

par benjam89 » 07 août 2007, 17:36

tu as raison j'ai oublié le $, mais même avec sa ne fonctionne pas, serveur et maitre_hotel sont des champs dans la base et argent aussi, le but de sa et de retiré le salaire de tout les employés et donc de modifié l'argent du membre.

par Ryle » 07 août 2007, 16:57

Tu peux soit faire une selection des données en base et plusieurs update utilisateur par utilisateur avec un WHERE, ou bien faire un update massif à partir des données qui sont en base pour tous les utilisateurs... il n'y a pas d'option moitié-moitié faire un select et tout updater.

Donc je réitère... à quoi correspondent : "$serveur" et "maitre_hotel" (qui a perdu son $ soit dit en passant) et d'où provient ta variable $argent ? qu'est ce qu'elle contient ? pour quel utilisateur ?

Essaye de bien définir ce que tu veux faire... ça ne sert à rien de coder tant que ce n'est pas clair pour toi (et ça ne l'est visiblement pas puisque tu n'arrêtes pas de changer le nom de tes variables :))

par benjam89 » 07 août 2007, 16:04

Merci, ton système fonctionne pour le timestamps et ne vide plus le champ argent mais ne calcul pas l'argent, voici le code:
<?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 = ($serveur * serveur_sal) + (maitre_hotel * maitre_hotel_sal);
    $news_argent = ($argent - $depenses);
    }
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd) or die ('Pb de connexion'); 

$sql = "UPDATE membre_gastro SET 
  argent = $news_argent ,
  derniere_paie = NOW()
  WHERE derniere_paie = DATE_SUB(NOW(), INTERVAL 1 DAY) ";

par Ryle » 07 août 2007, 15:28

bah tu y mets les critères permettant d'identifier les enregistrements à affecter... des ids, des dates, des ce que tu veux ..... l'autre solution consiste à ne faire qu'un update de tous les enregistrement d'un coup et de virer tout le code superflux.

D'où viennent tes $nombreServeurs et $nombreMaitres ? ils sont en base ?
Et SERVEUR_PRICE et MASTER_PRICE des constantes ?

Si c'est le cas, il te suffit juste de faire une requête du genre :
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd) or die ('Pb de connexion'); 

$sql = "UPDATE membre_gastro SET 
  argent = argent - (nombre_serveurs*".SERVER_PRICE." + nombre_maitres*".MASTER_PRICE.") ,
  derniere_paie = NOW()
  WHERE derniere_paie = DATE_SUB(NOW(), INTERVAL 1 DAY) ";

mysql_query($sql) or die(mysql_error());
NOW() correspond à la date du jour, DATE_SUB() permet d'oter des jours, mois ou autre et donc d'obtenir la date de la veille en supprimant 1 jour (1 DAY) :)

par benjam89 » 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 ?

par Ryle » 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 :)

par benjam89 » 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

par Ryle » 07 août 2007, 13:24

bah fais voir le code de ta page employes2.php :)

par benjam89 » 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 :)

par Ryle » 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 ;)

par benjam89 » 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

par Ryle » 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 :)

Non conecté...

par benjam89 » 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.

par Invité » 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