Faire un tableau d'ouverture
Fermé
NyriaOff
Messages postés
19
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
10 mai 2019
-
7 mai 2019 à 18:55
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 10 mai 2019 à 16:51
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 10 mai 2019 à 16:51
A voir également:
- Faire un tableau d'ouverture
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Comment faire un tableau - Guide
- Tableau de combinaison loto 5/90 - Forum Excel
- Comment imprimer un tableau excel sur une seule page - Guide
4 réponses
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
9 mai 2019 à 12:34
9 mai 2019 à 12:34
Voici ce que je te propose :
Pour la bdd :
Ensuite :
Dans un fichier à part, le code de la connexion...
Fichier cnxbdd.php
Et le code de ta page revue et corrigé
Pour la bdd :
-- Export de la structure de table id8971020_espace_membres. historique DROP TABLE IF EXISTS `historique`; CREATE TABLE IF NOT EXISTS `historique` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_user` int(11) DEFAULT NULL, `dateheure` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `id_user` (`id_user`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; -- Export de données de la table id8971020_espace_membres.historique: ~0 rows (environ) DELETE FROM `historique`; INSERT INTO `historique` (`id`, `id_user`, `dateheure`) VALUES (1, 1, '2019-05-09 12:10:54'), (2, 1, '2019-05-05 10:15:50'), (3, 1, '2019-05-03 21:00:00'); -- Export de la structure de table id8971020_espace_membres. membres DROP TABLE IF EXISTS `membres`; CREATE TABLE IF NOT EXISTS `membres` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pseudo` varchar(50) DEFAULT NULL, `mail` varchar(50) DEFAULT NULL, `motdepasse` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), KEY `mail` (`mail`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; -- Export de données de la table id8971020_espace_membres.membres: ~0 rows (environ) DELETE FROM `membres`; INSERT INTO `membres` (`id`, `pseudo`, `mail`, `motdepasse`) VALUES (1, 'test', 'test@gmail.com', 'a4dsdf654df');
Ensuite :
Dans un fichier à part, le code de la connexion...
Fichier cnxbdd.php
<?php //connexion à la BDD try{ $bdd = new PDO('mysql:host=localhost;dbname=id8971020_espace_membres; charset=utf8', 'id8971020_nyria', 'saucisse'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); }
Et le code de ta page revue et corrigé
<?php session_start(); error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //juste le temps des tests: $_SESSION['mail'] = "test@gmail.com"; //-------------------------------------------------------------// //on inclus le fichier de connexion a la bdd //pour ne pas avoir a le reecrire a chaque fois qu'on en a besoin... //-------------------------------------------------------------// require_once "cnxbdd.php"; //-------------------------------------------------------------// //fonctions //-------------------------------------------------------------// function getInfosUserByMail($mail_user){ global $bdd; //pour avoir la connexion a bdd $sql = 'SELECT * FROM membres WHERE mail = ?'; $datas = array($mail_user); try{ $requser = $bdd->prepare($sql); $requser->execute($datas); $result = $requser->fetch(); //on stocke le premier resultat de la requete dans un array }catch(Exception $e){ //en cas d'erreur dans la requ뵥 echo "Erreur : ".$e->getMessage(); return NULL; } return $result; } function getHistoUser($id_user){ global $bdd; //pour avoir la connexion a bdd $sql = 'SELECT DATE_FORMAT(H.dateheure,"%d/%m/%Y") as DATE ,DATE_FORMAT(H.dateheure,"%H:%i:%s") as HEURE FROM historique H WHERE H.id_user = ?'; $datas = array($id_user); try{ $requser = $bdd->prepare($sql); $requser->execute($datas); $result = $requser->fetchAll(); //on stocke le resultat de la requete dans un array }catch(Exception $e){ //en cas d'erreur dans la requ뵥 echo "Erreur : ".$e->getMessage(); return NULL; } return $result; } //-------------------------------------------------------------// // Debut du traitement //-------------------------------------------------------------// //recuperation propre des variables AVANT de les utiliser $getMail = !empty($_GET['mail']) ? trim($_GET['mail']) : NULL; $mail = !empty($_SESSION['mail']) ? $_SESSION['mail'] : NULL; if(!empty($getMail) && $getMail == $mail){ //on recupere les infos du user (de la table membres) $userinfo = getInfosUserByMail($mail); $id_user = !empty($userinfo['id']) ? $userinfo['id'] : ""; $pseudo = !empty($userinfo['pseudo']) ? $userinfo['pseudo'] : ""; //on recuperer son historique $historique = getHistoUser($id_user); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="css/infos.css" /> <link rel="icon" href="css/images/cadenas.ico" /> <title>Cadenas Connecté | Infos</title> </head> <body> <header> <!-- ENTETE --> <div id="menu"> <img class="logo" src="css/images/cadenas.png"> <h2>- CADENAS CONNECTE -</h2> <div id="nav"> <?php if($userinfo){ ?> <a href="infos.php?mail=<?php echo $mail; ?>">INFOS</a> <a href="profil.php?mail=<?php echo $mail; ?>">PROFIl</a> <a href="editionprofil.php">EDITER MON PROFIL</a> <a href="deconnexion.php">SE DECONNECTER</a> <?php } else { ?> <a href="accueil.php">ACCUEIL</a> <a href="inscription.php">INSCRIPTION</a> <a href="connexion.php">CONNEXION</a> <?php } ?> </div> </div> </header> <h1><?php echo $pseudo ?></h1> <section class="contenu"> <!-- Contenu --> </br> <table> <thead> <tr> <th>Date</th> <th>Heure</th> </thead> <tbody> <?php //on boucle sur toutes les lignes de l'utilisateur issues de la requete foreach($historique as $H ){ echo "<tr>"; echo "<td>".$H['DATE'] . "</td>"; echo "<td>".$H['HEURE'] . "</td>"; echo "</tr>"; } ?> </tbody> </table> </section> </body> </html> <?php } ?>
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
7 mai 2019 à 21:04
7 mai 2019 à 21:04
Bonjour il faut que tu fasses une boucle mais sans voir ton code il nous sera difficile de t'en dire plus
NyriaOff
Messages postés
19
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
10 mai 2019
8 mai 2019 à 12:41
8 mai 2019 à 12:41
J'me suis renseigné et apparement un tableau dynamique serait la solution... Voici mon code :
<?php session_start(); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); try{ $bdd = new PDO('mysql:host=***;dbname=***', '***', '****'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } if(isset($_GET['mail'])) { $getmail = $_GET['mail']; $requser = $bdd ->prepare('SELECT * FROM dhouverture WHERE mail = ?'); $requser->execute(array($getmail)); $userinfo = $requser->fetch(); ?> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="css/infos.css" /> <link rel="icon" href="css/images/cadenas.ico" /> <title>Cadenas Connecté | Infos</title> </head> <body> <header> <!-- Entête --> <div id="menu"> <img class="logo" src="css/images/cadenas.png"> <h2>- CADENAS CONNECTÉ -</h2> <div id="nav"> <?php if(isset($_SESSION['mail']) AND $userinfo['mail'] == $_SESSION['mail']) { ?> <a href="infos.php?mail=<?php echo $_SESSION['mail']; ?>">INFOS</a> <a href="profil.php?mail=<?php echo $_SESSION['mail']; ?>">PROFIl</a> <a href="editionprofil.php">ÉDITER MON PROFIL</a> <a href="deconnexion.php">SE DÉCONNECTER</a> <?php } else { ?> <a href="accueil.php">ACCUEIL</a> <a href="inscription.php">INSCRIPTION</a> <a href="connexion.php">CONNEXION</a> <?php } ?> </div> </div> </header> <h1><?php echo $userinfo['pseudo']; ?></h1> <section class="contenu"> <!-- Contenu --> </br> <table> <tr><th>Date</th><th>Heure</th></tr> <tr><td><?php echo $userinfo['date']; ?></td><td><?php echo $userinfo['heure']; ?></td></tr> </table> </section> </body> </html> <?php } ?>
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
8 mai 2019 à 13:55
8 mai 2019 à 13:55
Tu utilises PDO... très bien.
Donc deux possibilités :
Soit tu stockes le résultat de ta requête directement dans un ARRAY (sur lequel tu devras boucler ensuite)
Soit tu boucles sur le résultat de ta requête directement.
Au passage, je t'invite fortement à lire (et à appliquer) le contenu de ces deux liens dans tes devs :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Donc deux possibilités :
Soit tu stockes le résultat de ta requête directement dans un ARRAY (sur lequel tu devras boucler ensuite)
$userinfo = $requser->fetchAll(); //stocke le resultat dans un array foreach($userinfo as $R ){ echo $R['mail']; }
Soit tu boucles sur le résultat de ta requête directement.
while ($userinfo = $requser->fetch() ){ echo $userinfo['mail']; }
Au passage, je t'invite fortement à lire (et à appliquer) le contenu de ces deux liens dans tes devs :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
NyriaOff
Messages postés
19
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
10 mai 2019
8 mai 2019 à 19:21
8 mai 2019 à 19:21
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
8 mai 2019 à 19:36
8 mai 2019 à 19:36
Tout dépend de ton code...
Je suppose que tu as fais le while..... tout en laissant ton ancien code...
Je suppose que tu as fais le while..... tout en laissant ton ancien code...
NyriaOff
Messages postés
19
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
10 mai 2019
8 mai 2019 à 22:33
8 mai 2019 à 22:33
<?php session_start(); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); try{ $bdd = new PDO('mysql:host=localhost;dbname=id8971020_espace_membres', 'id8971020_nyria', 'saucisse'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } if(isset($_GET['mail'])) { $getmail = $_GET['mail']; $requser = $bdd ->prepare('SELECT * FROM dhouverture WHERE mail = ?'); $requser->execute(array($getmail)); $userinfo = $requser->fetch(); ?> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="css/infos.css" /> <link rel="icon" href="css/images/cadenas.ico" /> <title>Cadenas Connecté | Infos</title> </head> <body> <header> <!-- Entête --> <div id="menu"> <img class="logo" src="css/images/cadenas.png"> <h2>- CADENAS CONNECTÉ -</h2> <div id="nav"> <?php if(isset($_SESSION['mail']) AND $userinfo['mail'] == $_SESSION['mail']) { ?> <a href="infos.php?mail=<?php echo $_SESSION['mail']; ?>">INFOS</a> <a href="profil.php?mail=<?php echo $_SESSION['mail']; ?>">PROFIl</a> <a href="editionprofil.php">ÉDITER MON PROFIL</a> <a href="deconnexion.php">SE DÉCONNECTER</a> <?php } else { ?> <a href="accueil.php">ACCUEIL</a> <a href="inscription.php">INSCRIPTION</a> <a href="connexion.php">CONNEXION</a> <?php } ?> </div> </div> </header> <h1><?php echo $userinfo['pseudo']; ?></h1> <section class="contenu"> <!-- Contenu --> </br> <?php $userinfo = $requser->fetchAll(); foreach($userinfo as $R ){?> <?php echo $R['date']; echo $R['heure']; } ?> </section> </body> </html> <?php } ?>
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
8 mai 2019 à 22:51
8 mai 2019 à 22:51
Un truc du genre
par contre.. je ne comprend pas comment tu peux avoir plusieurs fois la même adresse mail dans ta table ?
Ce sont les heures de connexion ??
Dans ce cas, tu dois séparer en deux tables...
- Une table user ( id, nom, prenom, pseudo, email ... )
- Une table historique (id, id_user, dateheure ) //aucune utilité de faire deux champs distincts pour la date et l'heure.. autant utiliser un datetime ou un timestamp..
<?php session_start(); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //connexion à la BDD try{ $bdd = new PDO('mysql:host=localhost;dbname=id8971020_espace_membres', 'id8971020_nyria', 'saucisse'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //récupération propre des variables AVANT de les utiliser $getMail = !empty($_GET['mail']) ? trim($_GET['mail']) : NULL; $mail = !empty($_SESSION['mail']) ? $_SESSION['mail'] : NULL; if(!empty($getMail) && $getMail == $mail){ $sql = 'SELECT * FROM dhouverture WHERE mail = ?'; $datas = array($getMail); try{ $requser = $bdd->prepare($sql); $requser->execute($datas); $arrUsers = $requser->fetchAll(); //on stocke le resultat de la requete dans un array }catch(Exception $e){ //en cas d'erreur dans la requête echo "Erreur : ".$e->getMessage(); } //récupération de la première ligne retournée par la requête pour en sortir le pseudo et le mail $userinfo = !empty($arrUsers) ? $arrUsers[0] : NULL; $userMail = !empty($userinfo['mail']) ? $userinfo['mail'] : ""; $pseudo = !empty($userinfo['pseudo']) ? $userinfo['pseudo'] : ""; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" href="css/infos.css" /> <link rel="icon" href="css/images/cadenas.ico" /> <title>Cadenas Connecté | Infos</title> </head> <body> <header> <!-- Entête --> <div id="menu"> <img class="logo" src="css/images/cadenas.png"> <h2>- CADENAS CONNECTÉ -</h2> <div id="nav"> <?php if($userinfo){ ?> <a href="infos.php?mail=<?php echo $userMail; ?>">INFOS</a> <a href="profil.php?mail=<?php echo $userMail; ?>">PROFIl</a> <a href="editionprofil.php">ÉDITER MON PROFIL</a> <a href="deconnexion.php">SE DÉCONNECTER</a> <?php } else { ?> <a href="accueil.php">ACCUEIL</a> <a href="inscription.php">INSCRIPTION</a> <a href="connexion.php">CONNEXION</a> <?php } ?> </div> </div> </header> <h1><?php echo $pseudo ?></h1> <section class="contenu"> <!-- Contenu --> </br> <?php //on boucle sur toutes les lignes de l'utilisateur issues de la requête foreach($arrUsers as $R ){ echo $R['date']; echo $R['heure']; } ?> </section> </body> </html> <?php } ?>
par contre.. je ne comprend pas comment tu peux avoir plusieurs fois la même adresse mail dans ta table ?
Ce sont les heures de connexion ??
Dans ce cas, tu dois séparer en deux tables...
- Une table user ( id, nom, prenom, pseudo, email ... )
- Une table historique (id, id_user, dateheure ) //aucune utilité de faire deux champs distincts pour la date et l'heure.. autant utiliser un datetime ou un timestamp..
NyriaOff
Messages postés
19
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
10 mai 2019
9 mai 2019 à 09:22
9 mai 2019 à 09:22
Pour tout dire c'est un projet en STI2D où l'on doit faire un cadenas connecté, l'utilisateur déverrouille le cadenas grâce à une application et envoie en même temps la date et l'heure d'ouverture avec une adresse e-mail entrée à la première utilisation de l'application. Je dois donc faire le lien entre la table "dhouverture" qui contient l'adresse mail entrée dans l'application et la table "membres" avec l'email d'inscription sur le site.
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
9 mai 2019 à 10:19
9 mai 2019 à 10:19
Tu as donc deux tables....
Il serait bien de nous montrer le structure de ces deux tables....
Il serait bien de nous montrer le structure de ces deux tables....
NyriaOff
Messages postés
19
Date d'inscription
mercredi 20 février 2019
Statut
Membre
Dernière intervention
10 mai 2019
9 mai 2019 à 10:29
9 mai 2019 à 10:29
9 mai 2019 à 17:43
10 mai 2019 à 15:57
if(maildedhouverture==mailespacemembres)
{
echo date et heure
}
Ça serait vraiment plus simple pour moi au moins je comprendre ce que j'écris et ça sera + simple à présenter au jury.
10 mai 2019 à 16:51
Car c'est déjà le cas...il y a bien un lien (une jointure) entre les deux tables.... le lien.. c'est l'id de l'utilisateur (dans le code et la structure de table que je t'ai donné )
Pour un gain de performance, il est préférable de faire des jointures sur des "nombres" plutôt que sur des chaines de caractères....
De plus, imagine que l'utilisateur décide de changer d'adresse mail.... il te faudra aller la modifier dans toutes tes tables ( au risque d'en oublier....) alors que là.. tu n'auras qu'à la changer que dans une seule table.
J'ai, de plus, un peu de mal à comprendre ce que tu essayes de faire avec ton utilisation des variables de session ET le passage du mail via l'url.....
Les informations de l'utilisateur étant déjà en variables de session....et vu que, dans ton code, tu ne laisses la possibilité à l’utilisateur de ne modifier/voir que SES informations ... pourquoi ???
Seule les variables de session suffisent à ce moment là...
Afin de t'aider à faire la présentation de ton projet à ton jury et pour faciliter sa phase de conception / écriture du code... je t'invite forment à arrêter de coder quelques temps pour prendre le temps de rédiger
1 - un cahier des charges de ce que tu souhaites réaliser ( les grandes lignes de ce que tu souhaites obtenir... comme le nom des page et une description de leur fonctionnement )
Puis :
2 - Découper ce cahier des charges en cahier des spécificités fonctionnelles ( en gros, pour chaque page, tu expliques le fonctionnement, comment elles sont composées ( les boutons, les liens, les champs qu'il faut remplir........) et d'où proviennent les données ( de quelle table... les données sont liées par rapport à quel champ...etc... ) et quelles sont les conditions à respecter ( est-ce que l'utilisateur doit être connecté, si oui, de quelle(s) informations le concernant j'ai besoin .... )
Une fois ce travail réaliser , non seulement tu auras déjà rédigé 95% de ton rapport...., mais en plus tu seras plus à mème de structurer ton code et d'expliquer son fonctionnement....