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
Bonjour, j'ai besoin de votre aide pour savoir comment créer un tableau avec plusieurs dates et heures d'ouverture. J'ai une table MySQL avec les champs suivants : mail, date et heure qui se remplie grâce à la page "requete.php". J'aimerais donc savoir comment afficher deux ou plusieurs lignes remplie par cette page car quand je fait
<?php echo $userinfo['date'];?>
ou
<?php echo $userinfo['heure'];?>
cela m'en affiche qu'une.

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
Voici ce que je te propose :

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
}
?>


1
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
9 mai 2019 à 17:43
Ok merci de s'être occupé à ce point la de mon cas mais faut que moi je comprenne le code donc jvais voir ...
0
NyriaOff Messages postés 19 Date d'inscription mercredi 20 février 2019 Statut Membre Dernière intervention 10 mai 2019
10 mai 2019 à 15:57
Jvais être chiant mais y a pas un moyen de juste link les deux bases de données de faire genre :
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.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
10 mai 2019 à 16:51
Que veux tu dire par
juste link les deux bases de données

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....
0
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
Bonjour il faut que tu fasses une boucle mais sans voir ton code il nous sera difficile de t'en dire plus
0
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
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
 	}
 	?>
0
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
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)
$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
0
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
Merci pour l'aide j'ai un dernier problème pourquoi les valeurs s'affichent que après la 1ère variable ?
0
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
Tout dépend de ton code...
Je suppose que tu as fais le while..... tout en laissant ton ancien code...
0
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
<?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
 	}
 	?>
0
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
Un truc du genre
<?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..
0
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
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.
0
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
Tu as donc deux tables....
Il serait bien de nous montrer le structure de ces deux tables....
0
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
0