begin process at 2012 05 30 13:57:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

demande de l'aide en php(important)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

demande de l'aide en php(important)

vendredi 4 mai 2007 à 12:05:57 | demande de l'aide en php(important)

sittimo

bonjour
j'ai un grave problème, et je n'arrive pas à m'en sortir et j'aurais aimé avoir votre aide.
j'ai une application php qui existe déjà et qui fonctionne en intranet, je veux rajouter une fonction dans mon application qui me permettra de comptabiliser les heures de travail de chacun de mes utilisateurs.
j'ai fait tout ce que j'ai pu et je ne trouve que des erreurs. je suis tombée maintenant dans ce code de calcul de durée,je pense que ça peut me servir mais j'ai besoin d'aide d'avantage, car je ne sais exactement pour ce que j'ai fait n'a pas marché, peut mon code n'est bon ou peut etre j'ai mal placé mon.
en fait j'ai crée une tabe(id_log, u_login, t_log_debut_log, t_log_fin); j'ai fait fichier point_in.php qui ce code
(<body>
<?php
session_start();
//connexion mysql
mysql_connect("localhost", "dbconges", "motdepasse");
mysql_select_db("db_conges");
//pour l'heure de connexion
$sql="INSERT INTO $conges_users_log(u_login, date_log, t_log_deb)VALUES($rowUser['id'], date("Y-m-d"), date("H:i:s"))";
mysql_query($sql);
mysql_close();
?>
</body>)  et un autre point_off.php qui a ce code
(<body>
<?php
session_start();
//connexion mysql
mysql_connect("localhost", "dbconges", "motdepasse");
mysql_select_db("db_conges");
//pour mettre à jour la tps de deconnexion
$sql="UPDATE $conges_users_log SET t_log_fin='".date("H:i:s")."' WHERE id='".$_SESSION['log_id']."'";
mysql_query($sql,$link)or die(mysql_error());
?>
</body>)

j'ai mis la fonction(session_start(); dans tous mes pages comme on le conseille et j'ai appeler (include("point_in.php"); dans tous les pages au tout debut et include("point_off"); dans la page de deconnexion au tout debut. peut etre que ce n'est pas comme ça comment je devais les placer ou que lecode est mal fait.
en pensant rajouter aprés la difference pour trouver la durée mais déjà celane m'affiche que des erreurs.

donc j'aurais aimé que vous m'accordiez une aide, regarder ce que j'ai fait me dire ce que vous en pensez ou me conseillez ce que je peux faire pour utiliser votre code s'il peut correspondre à mon objectif.
je vous signale que je suis une etudiante.
j'utilise windows xp, php4, easyphp1.7, et mon navigateur est mozilla firfox . je vous remercie d'avance et que vous ayez le courage de m'aider.


vendredi 4 mai 2007 à 23:04:30 | Re : demande de l'aide en php(important)

neigedhiver

Salut, Avant toute chose, je dois avouer que j'ai eu du mal à comprendre tout ce que tu dis. D'ailleurs, je n'ai pas tout compris : il manque des mots. Des erreurs de syntaxe, du sms, on peut décoder. Mais avec des données manquantes, sans RAID, c'est pas facile de reconstituer tout ce que tu veux transmettre... Bref. En gro, tu veux compter le temps qui s'écoule entre la connexion et la déconnexion d'un utilisateur. La ligne sur laquelle se trouve la première requête SQL est mal écrite. Elle ne peut que générer des erreurs. $sql="INSERT INTO $conges_users_log(u_login, date_log, t_log_deb)VALUES($rowUser['id'], date("Y-m-d"), date("H:i:s"))"; dans la chaine de caractères, tu ne peux pas utiliser : - de variable de type array (ici, $rowUser) - de fonction php Puisque tu utilises des doubles quotes, tu peux placer dans la chaine des variables pour qu'elles soient directement remplacées par leur valeur. Dans le cas de tableaux il faut entourer la variable d'accolades : $exemple = "Bonjour {$user['Nom']} ! Comment ça va ?"; Pour les fonctions php, pas moyen : il faut soit les sortir de la chaine et concaténer avec l'opérateur de concaténation de chaines, le point (.) $exemple = "Nous sommes le " . date("Y-m-d") . " et il est " . date("H:i:s"); Par ailleurs, la fonction date() retourne une chaine. Il faut donc l'entourer de guillemets simples dans la requete SQL. D'ailleurs, idem pour le user_id si c'est une chaine de caractères. Ca donne : $sql="INSERT INTO $conges_users_log (u_login, date_log, t_log_deb) VALUES ('{$rowUser['id']}', '" . date("Y-m-d") . "', '" . date("H:i:s") ."')"; Bon, mais ton problème ne doit pas être ici... Puisque tu utilises les Sessions, tu peux stocker la date de début de session dans une variable de session : session_start(); $_SESSION['start_date'] = time(); Il n'y a besoin de rien d'autre, PHP gère tout seul cette variable de session. Quand l'utilisateur se déconnecte, il suffit de faire une soustraction : $temps_passe = time() - $_SESSION['start_date']; time() retourne un entier correspondant au nombre de secondes écoulées depuis l'époque UNIX, c'est à dire le 1er janvier 1970. La soustraction te donne donc le nombre de secondes de connexion de l'utilisateur. Tu peux alors stocker cette valeur dans ta base de données. Si on considère que dans ta table, le champ u_login est une clé (primaire ou au moins index) alors on peut exécuter une requête comme ça : $sql = 'INSERT INTO ' . $conges_users_log . ' (u_login, temps_passe) ON DUPLICATE KEY UPDATE temps_passe=temps_passe+' . $temps_passe; Cette requête insert le temps passé pour l'utilisateur si l'utilisateur n'est pas encore présent dans la table. Si un temps a déjà été enregistré pour cet utilisateur, alors au lieu d'insérer à nouveau un enregistrement on modifie une valeur pour cet enregistrement (c'est à ça que sert ON DUPLICATE KEY) en incrémentant le temps passé : on y ajoute le temps passé pendant la session. Ensuite, tu peux déconnecter l'utilisateur en détruisant la session. C'est, je pense, plus simple que d'enregistrer tous les temps de connexion de chaque utilisateur et à chaque fois, d'extraire tous les enregistrement pour un utilisateur et d'ajouter toutes les valeurs... Là, tu as une seule requête pour insérer ou mettre à jour. Tu ne stockes qu'une seule valeur que tu peux lire directement : c'est quand même plus rapide à l'exécution...
lundi 7 mai 2007 à 10:26:07 | poouriez vous continuer à m'aider!!!

sittimo

merci beaucoup d'avoir eu le courage de repondre à ma question.
d'aprés tes explications, j'ai voulu faire ce ci:
j'ai crée une nouvelle table
conges_users_log(id_log(id), u_login(id), start_date, ,time, temps_passe)
je mets ce code au tout debut de la page session:
session_start();
$_SESSION['start_date'] = time();
je mets ce code au tout debut de la page deconnexin:
$temps_passe = time() - $_SESSION['start_date'];
et pour stocker cette valeur de temps_passe dans la base et lamettre à jour j'execute cette requete:
$sql = 'INSERT INTO ' . $conges_users_log . ' (u_login, temps_passe) ON DUPLICATE KEY UPDATE temps_passe=temps_passe+' . $temps_passe;
pour detruire la session:
session_destroy();
apparemment c'est lors de la deconnexion qu'on calcule et enregistre le temps_passe,   je me suis donc demandé ceci:
Par ailleurs, que se passe-t-il si un utilisateur quitte le navigateur, se déconnecter ?
Je pense que la session est détruite => plus d'UPDATE... mais après combien de tps ?
lundi 7 mai 2007 à 12:07:44 | Re : demande de l'aide en php(important)

neigedhiver

Salut, Ca dépend de la configuration du serveur. http://ch2.php.net/manual/fr/ref.session.php Par ailleurs, la destruction d'une session (même si l'utilisateur clique sur "déconnexion") ne calcule pas le temps et ne met pas à jour la table. C'est une opération qu'il faut faire manuellement (je veux dire coder manuellement). Le calcul du temps passé pour les utilisateurs qui ne cliquent pas sur déconnexion pose problème. Tu dois vérifier régulièrement les sessions qui sont encore "en cours" (pas de clic sur "déconnexion") et calculer le temps de connexion (en comptabilisant ou non la durée de vie de la session). En gros, il te faut intégrer dans ta table si la session est en cours ou pas. La gestion des sessions, c'est vraiment pas quelque chose de si simple que ça, dès qu'on veut stocker des informations dans une base de données.
lundi 7 mai 2007 à 13:46:17 | merci, ça te dis de continuer !!!!!

sittimo

merci
n'est ce pas cecode qui calcule le temps?
$temps_passe = time() - $_SESSION['start_date'];

n'est ce pas ce code qui met à jour la table?
$sql = 'INSERT INTO ' . $conges_users_log . ' (u_login, temps_passe) ON DUPLICATE KEY UPDATE temps_passe=temps_passe+' . $temps_passe;

est ce je ne peux pas avec tous ces bouts de code constituer une page php puis l'appeler dans la page de connexion?

d'autre part, ils tjs cliquer sur deconexion pour se deconnecter mais pas sur le croix.
vendredi 11 mai 2007 à 17:52:42 | ayez le courage de partager, ça vs dit de geter 1c d'oeil?

sittimo

bonjour à tous vous etes si courageux!

tu pourais etre un peu claire car moi avec le javascript ça colle pas mais je regarde descours, sur le net et surtout je meurs de la fatigue morale je regrette d'exister.
ça fait un mois de plus que je cherche et que je ne trouve pas pour ce problème.

comme vous lesavez avant de faire quoi que ce soit je doit stocket aprés qu'un utilisateur s'est connecté, son nom d'utilisateur(u_login), la date du jour(datejour), son heure de connexion(cotime), son heure de deconnexion(decotime)  dans la table conges_users_log(id_log, u_login, dtaejour, cotime, decotime, elapsed(elapsed=decotime-cotime)).

j'ai fait ce code , j'arrive maintenant à me connectr , il y'a pas des erreurs, mais le code ne stocke rien dans la table conges_users_log.
ce code je l'ai inseré dansla page de session comme, suit:

------------------------------------------------------------- 
voilà le code de ma page de session et ce qui est entouré par //-----------sitti     //------------sitti , c'est mon code.

<?php

//
// MAIN
//

/*** initialisation des variables ***/
$session_username="";
$session_password="";
/************************************/

//
// recup du num  de session (mais on ne sais pas s'il est passé en GET ou POST
$session=(isset($_GET['session']) ? $_GET['session'] : ((isset($_POST['session'])) ? $_POST['session'] : "") ) ;
/*******************sitti
******************************************/
$DEBUG=FALSE;
//$DEBUG=TRUE;

if($DEBUG==TRUE) { print_r($_SESSION); echo "<br><br>\n"; }

if ($session != "")
{
    if(session_is_valid($session) == TRUE)
    {
        session_update($session);
        //--------------------------------sitti
        if($session=(isset($_GET['session']) ? $_GET['session'] : ((isset($_POST['session'])) ? $_POST['session'] : "")))
        {
        //connexion mysql
        $db = mysql_connect('localhost', 'dbconges','motdepasse') or die('Erreur de connexion '.mysql_error());
        //selection de la base
        mysql_select_db('db_conges', $db) or die('Erreur deselection '.mysql_error());
        //code
        $cotime = time();
        $u_login = "session_username";
        $_SESSION['cotime']="cotime";
        $_SESSION['u_login']="u_login";
        $datejour = date("Y-m-d");
        $sql = "INSERT INTO conges_users_log(u_login,datejour,cotime)";
        //$sql .=
        $sql .="VALUES('$u_login','$cotime','$datejour')";
        }
        //---------------------------------------- sitti
       
    }
    else
    {
        session_delete($session);
        $session="";
        $session_username="";
        $session_password="";
        $_SESSION['config']=init_config_tab();  // on recrée le tableau de config pour l'url du lien

        echo "<center>\n";
        echo "Pas de session ouverte<br>\n";
        echo "Veuillez <a href='".$_SESSION['config']['URL_ACCUEIL_CONGES']."/index.php' target='_top'> vous authentifier</a>\n";
        echo "</center>\n";

        exit;
    }
}
else    //  $session == ""
{
    if(isset($_POST['session_username'])) { $session_username=$_POST['session_username']; }
    if(isset($_POST['session_password'])) { $session_password=$_POST['session_password']; }

    if ( ($_SESSION['config']['how_to_connect_user'] == "CAS") && ($session_username != "admin") )
    {
        $usernameCAS = authentification_passwd_conges_CAS();
        if($usernameCAS != "")
        {
            if(session_id()!="")
                session_destroy();
           
            // on initialise la nouvelle session
            session_create($usernameCAS);
           
        }
        else //dans ce cas l'utilisateur n'a pas encore été enregistré dans la base de données db_conges
        {
           echo "<center>\n";
           echo "Il n'existe pas de compte correspondant à votre login dans la base de données de PHP_CONGES<br>\n";
           echo "Contactez l'administrateur de php_conges";
           echo "</center>\n";
        }
    }
    else
    {
        if (($session_username == "") || ($session_password == "")) // si login et passwd non saisis
        {
            //  SAISIE LOGIN / PASSWORD :
            session_saisie_user_password("", "", ""); // appel du formulaire d'intentification (login/password)
            exit;
        }
        else
        {
            //  AUTHENTIFICATION :

            // le user doit etre authentifié dans la table conges (login + passwd) ou dans le ldap.
            // si on a trouve personne qui correspond au couple user/password

            if ( ($_SESSION['config']['how_to_connect_user'] == "ldap") && ($session_username != "admin") )
            {
                if(session_id()!="")
                    session_destroy();
                   
                if (authentification_ldap_conges($session_username,$session_password) != $session_username)
                {
                    $session="";
                    $session_username="";
                    $session_password="";

                    $erreur="login_passwd_incorrect";
                    session_saisie_user_password($erreur, $session_username, $session_password); // appel du formulaire d'intentification (login/password)
                    exit;
                }

                if ((authentification_ldap_conges($session_username,$session_password) == $session_username) && ($session_username != ""))
                {
                    if (valid_ldap_user($session_username)==TRUE) // LDAP ok, on vérifie ici que le compte existe dans la base de données des congés.
                    {
                        // on initialise la nouvelle session
                        session_create($session_username);
                    }
                    else//dans ce cas l'utilisateur n'a pas encore été enregistré dans la base de données db_conges
                    {
                        $erreur="login_non_connu";
                        session_saisie_user_password($erreur, $session_username,$session_password); // appel du formulaire d'intentification (login/password)
                        exit;                             
                    }
                }
            } // fin du if test avec ldap
            elseif ($_SESSION['config']['how_to_connect_user'] == "dbconges")
            {
                if(session_id()!="")
                    session_destroy();
                   
                if (autentification_passwd_conges($session_username,$session_password) != $session_username)
                {
                    $session="";
                    $session_username="";
                    $session_password="";

                    $erreur="login_passwd_incorrect";
                    session_saisie_user_password($erreur, $session_username,$session_password); // appel du formulaire d'intentification (login/password)
                    exit;
                }

                if ((autentification_passwd_conges($session_username,$session_password) == $session_username) && ($session_username != ""))
                {
                    // on initialise la nouvelle session
                    session_create($session_username);
                }
            }
        }
    }
  
}

?>

ayez vous unesur l'emplacement , car aucune erreur ne s'affiche je suppose que peut c pas là où je dois placer lecode.
merci de votre aide.


Cette discussion est classée dans : aide, code, php, mysql, log


Répondre à ce message

Sujets en rapport avec ce message

Aide avec une requête mysql du php et un list/menu [ par monoski ] Voilà, il est très tard et je sèche sur un petit truc : [code=php] " selected="selected"> <? if ($fetch['slot1'] == galerie photo avec php [ par stophking ] bonjour : je suis entrain de créer une galerie photo avec php/mysql et j'aimeria bien que vous me corriger le code si il ya des fautes, et une chose q Aide PHP - MYSQL [ par yoyo77yo ] Bonjour, J'essaie d'adapter un kit graphique à une base de donnée de films issue d'un logiciel appelé "FILMOTECH" : Voici mon site http://killers77.f liste deroulante avec php et mysql [ par jolina87 ] bonjour; j'ai un formulaire au quel il y a une liste déroulante qu'il faut qu'elle récupère une liste de noms de la base pour afficher les coordonnée Rejet de connexion à ma BDD sur serveur distant [ par christ_28 ] Bonjour à tous, J'ai un petit problème, quelqu'un a sûrement une réponse. Voila, j'ai développé mon site en local sous WAMP, j'y ai récemment ajouté u mdp PHP [ par bibidu69 ] Bonjour, j'ai un problème de mot de passe dans mon code PHP le voici : [code=php]<?php // on teste si le visiteur a soumis le formulaire de connexion MYSQL vers EXCEL [ par quinton75 ] Je souhaite exporter ma table sql vers excel via une requete php avec le code suivant mais ça ne marche pas.. Je souhaite en fait générer le fichier Afficher une ligne du contenu d'une table selon son premier champ [ par spacedelta ] Bonjour, J'ai longtemps cherché et je n'ai jamais trouvé. Je recherche le code en php qui permet de lire une ligne du contenu d'une table avec un cham communication PHP MySQL [ par mrassaa ] Salut, J'ai un problème de communication entre PHP et MySQL. En fait, j'ai réalisé une petite application avec Macromedia Flash 8 et j'ai voulu enreg erreur mysql_fetch_array [ par teussido ] Salut je sollicite votre aide j'ai vu l'erreur suivante dans un code php et j'aimerais avoir votre aide afin de le corriger. Warning: mysql_fetch_arra


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,775 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales