Système de pointage (entrée/sortie) en PHP

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Secu1000, 29 Juillet 2014.

  1. Secu1000
    Secu1000 Nouveau WRInaute
    Inscrit:
    23 Juin 2014
    Messages:
    17
    J'aime reçus:
    0
    Bonjour,

    J'aimerais un petit coup de main concernant un script que je souhaite mettre en place.

    J'ai un lecteur de code barre (douchette) qui pioche des données dans la BDD et qui implémente l'heure de check.

    Actuellement, le script fonctionne correctement mais renseigne plusieurs ligne pour la même personne.

    J'aimerais définir une heure d'entrée et une heure de sortie en fonction du nombre de check par jour.

    Exemple : 1er check de la journée, l'heure renseigne la colonne entrée, et 2 eme check de la journée l'heure renseigne la colonne sortie.

    Mais je bloque un peu sur la logique que je peux apporter à ce script.

    Voici mon bout de code :

    Code:
    <?php
    									try{
    								$db = new PDO('mysql:host=localhost;dbname=personnel','name','pass');
    								$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    								}
    								catch(PDOException $e){
    								echo 'Erreur SQL';
    								}
    								$i=0;
    								while($i=1){
    								if(isset($_POST['id'])){
    								$pointage = "INSERT INTO pointage (heure, jour, id, nom, prenom, service) SELECT '".$_POST['date']."', '".$_POST['jour']."', id, nom, prenom, service FROM salaries  WHERE id='".$_POST['id']."'";
    								$pointage = $db->query($pointage);
    								$i++;
    								echo "<div class=\"validation\">Votre pointage à bien ok enregistré</div>";
    								}
    							}		
    								while($i=2){
    								if(isset($_POST['id'])){
    								$pointage = "INSERT INTO pointage (heure, jour, id, nom, prenom, service) SELECT '".$_POST['date']."', '".$_POST['jour']."', id, nom, prenom, service FROM salaries  WHERE id='".$_POST['id']."'";
    								$pointage = $db->query($pointage);
    								$i++;
    								echo "<div class=\"validation\">Votre pointage à bien bib enregistré</div>";
    								}
    							}	
    							?>
    Merci
     
  2. Axiso
    Axiso WRInaute passionné
    Inscrit:
    8 Avril 2004
    Messages:
    1 209
    J'aime reçus:
    0
    Il fonctionne ce code ?? Parce que tu as deux boucles dont la condition ne semble jamais pouvoir être vraie vu que $i est défini à 0 juste avant.

    Et pour ton système, tu penses à gérer aussi les doubles pointages ("J'ai pointé ce matin ou pas ? Hop, j'en remets un coup !") et les oublis si tu veux que l'outil soit un minimum intelligent et ne t'impose pas de corriger les pointages sur plusieurs jours en cas d'erreur ?
     
  3. Secu1000
    Secu1000 Nouveau WRInaute
    Inscrit:
    23 Juin 2014
    Messages:
    17
    J'aime reçus:
    0
    Non justement il ne fonctionne pas...

    Pour le moment il recueil les informations c'est une bonne chose de faite, mais c'est vrai que j'envisageais par la suite de définir des conditions.
    Pour le double pointage je voulais définir une tranche horaire minimum entre 2 pointages par exemple.

    Pour le moment, aurais tu une solution a la logique que je voudrais apporter à ce script ?

    Voici le script de base qui fonctionne correctement :

    Code:
    <?php
    									try{
    								$db = new PDO('mysql:host=localhost;dbname=personnel','login','pass');
    								$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    								}
    								catch(PDOException $e){
    								echo 'Erreur SQL';
    								}
    								if(isset($_POST['id'])){
    								$pointage = "INSERT INTO pointage (heure, jour, id, nom, prenom, service) SELECT '".$_POST['date']."', '".$_POST['jour']."', id, nom, prenom, service FROM salaries  WHERE id='".$_POST['id']."'";
    								$pointage = $db->query($pointage);
    								echo "<div class=\"validation\">Votre pointage à bien été enregistré</div>";
    								}		
    							?>
     
  4. baud74
    baud74 WRInaute impliqué
    Inscrit:
    21 Juillet 2014
    Messages:
    586
    J'aime reçus:
    0
    tu commences par faire un select pour savoir si tu as des données pour cet id et ce jour.
    si non :
    - c'est avant une certaine heure -> ajout d'une entrée
    - c'est après une certaine heure -> cas bizarre à gérer comme tu veux
    si oui :
    - c'est avant une certaine heure -> un doublon ou quelqu'un qui part super tot
    - c'est après une certaine heure -> ajout d'une sortie
     
  5. Secu1000
    Secu1000 Nouveau WRInaute
    Inscrit:
    23 Juin 2014
    Messages:
    17
    J'aime reçus:
    0
    J'ai essayé de m'en sortir mais j'ai une erreur qui me turlupine !

    Voici mon code :

    Code:
    <?php
    									try{
    								$db = new PDO('mysql:host=localhost;dbname=personnel','login','pass');
    								$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    								}
    								catch(PDOException $e){
    								echo 'Erreur SQL';
    								}
    								$id_Exist = $db->prepare("SELECT id, jour FROM pointage WHERE id='".$_POST['id']."', jour='".$_POST['jour']."'");
    								//On recupère les pseudo de t'as base ou les pseudo son egal au pseudo passer par le formulaire
    								$id_Exist->bindValue('id', $_POST['id'], PDO::PARAM_STR);
    								$id_Exist->execute();
    								//on exécute la requête
    								 
    								$pseudoINbdd = $id_Exist->rowCount();
    								//Rowcount permet de sortir le nombre de valeur que t'as requête renvoi, que l'on rentre dans la variable pseudoINbdd (ou autre )
    								 
    								if($pseudoINbdd == 0){
    								//Si la requête renvoi 0, le pseudo n'existe pas dans la base, sinon le pseudo existe.
    									if($_POST['id']){
    										$arrive = "INSERT INTO pointage (arrive, jour, id, nom, prenom, service) SELECT '".$_POST['heure']."', '".$_POST['jour']."', id, nom, prenom, service FROM salaries WHERE id='".$_POST['id']."'";
    										$controle = $arrive;
    										echo "<div class=\"validation\">Votre arrivee à bien été enregistré</div>";
    									}
    									}
    									if($pseudoINbdd == 1){
    										$sortie = "UPDATE pointage SET sortie='".$_POST['heure']."' WHERE id='".$_POST['id']."'";
    										$controle = $sortie;
    										echo "<div class=\"validation\">Votre sortie à bien été enregistré</div>";
    										}
    										$controle = $db->query($controle);
    							?>
    et voici l'erreur :

    Code:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' jour=''' at line 1' in /home/fabrice/sd/intranet/www/pointage.php:57 Stack trace: #0 /home/fabrice/sd/intranet/www/pointage.php(57): PDOStatement->execute() #1 {main} thrown in /home/fabrice/sd/intranet/www/pointage.php on line 57
    Merci
     
  6. Secu1000
    Secu1000 Nouveau WRInaute
    Inscrit:
    23 Juin 2014
    Messages:
    17
    J'aime reçus:
    0
    J'ai résolu mon problème, pour ceux qui souhaiteraient faire une manip de ce style voici mon code commenté :

    Code:
    <?php
    									try{
    								$db = new PDO('mysql:host=localhost;dbname=personnel','login','pass');
    								$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    								}
    								catch(PDOException $e){
    								echo 'Erreur SQL';
    								}
    								$id_Exist = $db->prepare("SELECT id FROM pointage WHERE id='".$_POST['id']."'");
    								//On recupère les pseudo de t'as base ou les pseudo son egal au pseudo passer par le formulaire
    								$id_Exist->bindValue('id', $_POST['id'], PDO::PARAM_STR);
    								$id_Exist->execute();
    								//on exécute la requête
    								 
    								$pseudoINbdd = $id_Exist->rowCount();
    								//Rowcount permet de sortir le nombre de valeur que t'as requête renvoi, que l'on rentre dans la variable pseudoINbdd (ou autre )
    								 
    								if($_POST['id']){
    								//Si la requête renvoi 0, le pseudo n'existe pas dans la base, sinon le pseudo existe.
    									if($pseudoINbdd == 0){
    										$arrive = "INSERT INTO pointage (arrive, jour, id, nom, prenom, service) SELECT '".$_POST['heure']."', '".$_POST['jour']."', id, nom, prenom, service FROM salaries WHERE id='".$_POST['id']."'";
    										$controle = $arrive;
    										echo "<div class=\"validation\">Votre arrivee à bien été enregistré</div>";
    									}
    									if($pseudoINbdd == 1){
    										$sortie = "UPDATE pointage SET sortie='".$_POST['heure']."' WHERE id='".$_POST['id']."'";
    										$controle = $sortie;
    										echo "<div class=\"validation\">Votre sortie à bien été enregistré</div>";
    										}
    										$controle = $db->query($controle);
    								}
    							?>
     
  7. Secu1000
    Secu1000 Nouveau WRInaute
    Inscrit:
    23 Juin 2014
    Messages:
    17
    J'aime reçus:
    0
    Bonjour,

    Comme vous l'avez constaté sur mon post précédent, j'ai apporté une logique booléenne à mon script.
    Mais je n'avais pas prévu un détail, les salariés doivent pointer 4 fois dans une journée, donc pas de booléen.
    De plus, j'ai une contrainte au niveau de l'horaire, je ne peux pas me baser dessus car ils varient tout au long de la journée en fonction de chaque personne.

    Je pense que le plus adapté serait de dire que :
    -1er pointage de la journée ==> Entrée
    -2ème pointage de la journée ==> Sortie déjeuner
    -3ème pointage de la journée ==> Revient du déjeuner
    -4ème pointage de la journée ==> Sortie du travail.

    En mettant une condition de 20 minutes entre chaque pointage.

    Je n'ai aucun idée de comment coder le faite que ce soit le 1er, 2eme, 3eme etc...

    Si vous pouviez de transmettre un bout de code, ou un lien qui serait susceptible de m'aider pour apporter cette logique à mon script je vous en serais très reconnaissant.

    Merci
     
Chargement...
Similar Threads - Système pointage (entrée Forum Date
Que pensez-vous du système de monétisation wordpress premium ? Monétisation d'un site web 2 Novembre 2019
système de notation par étoiles : dimensions mini ? Administration d'un site Web 9 Octobre 2019
Système de tirage de carte aléatoire Développement d'un site Web ou d'une appli mobile 27 Août 2019
Intégration système point relais sur site ecommerce e-commerce 25 Mars 2019
Que pensez-vous de ce systeme de cache? Développement d'un site Web ou d'une appli mobile 23 Janvier 2019
Avoir son propre système de redirections sur un sous domaine Netlinking, backlinks, liens et redirections 27 Septembre 2018
Système de paiement Stripe e-commerce 19 Août 2018
Quels systèmes de paiement certifiés ? e-commerce 1 Mars 2018
[avis website] seo-systeme.fr Demandes d'avis et de conseils sur vos sites 7 Juin 2017
Témoignage sur le systeme Facebook Facebook 21 Avril 2017
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice