<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>TP3 - MySQL</title>
		<style>
			body {
				font-family: verdana, arial, sans-serif;
			}
			table#exo4 {
				margin-top: 20px;
			}
			td {
				padding: 3px 3px;
				border: solid 1px black;
			}
			td.bold {
				font-weight: bold;
			}
			table {
				border-collapse: collapse;
			}
		</style>
	</head>
<!-- ce fichier est visible et à lire à l'adresse suivante pour les tests : https://iut.echodelta.fr/desr4/tp3/index.php -->
	<body>
		<h1>Mes contacts</h1>

		<?php
			include("connexion.php");	// on inclut dans ce fichier le fichier connexion.php qui est notre point de connexion à la base de données
			$sql1="SELECT * FROM Contacts";	// déclaration d'une variable dans laquelle on stocke une requête SQL permettant d'afficher toutes les entrées de la table 'Contacts'
			$retour1=$connexion->query($sql1);	// on envoie la requête au SGBD à l'aide de la fonction PDO 'query' via le point de connexion
			$resultat1=$retour1->fetchAll(PDO::FETCH_ASSOC);	// on récupère ensuite le résultat de la requête effectuée précédemment sous la forme d'un tableau associatif stocké dans la variable 'resultat1'
//			print_r($resultat1);
			echo "<table>";	// on ouvre un tableau HTML
			foreach($resultat1 as $valeur) {	// on parcourt le tableau associatif obtenu via PDO
				echo "<tr>";	// on ouvre une nouvelle ligne HTML par boucle, soit par ligne de table SQL
				foreach($valeur as $key=>$val) {	// on parcourt chaque ligne de la table (chaque valeur du premier tableau) qui représente chacune une colonne de la ligne
					echo "<td class=\"bold\">$key :</td>";	// la clé est mise dans une première cellule HTML (intitulé de la colonne)
					echo "<td>$val</td>";	// la valeur associée est mise dans une seconde cellule HTML (contenu de la colonne)
				}
				echo "</tr>";	// on referme la ligne du tableau HTML une fois le sous-tableau associatif parcouru
			}
			echo "</table>";	// on referme le tableau HTML une fois que l'ensemble de la réponse SQL (soit le tableau associatif PHP resultat1) est parcourue
		?>

		<h2>Recherche avec critère</h2>

		<?php
			$sql2="SELECT * FROM Contacts WHERE ville=\"La Rochelle\"";	// cette requête SQL permet de sélectionner uniquement les contacts habitants à La Rochelle
			$retour2=$connexion->query($sql2);	// on envoie la requête via PDO (query())
			$resultat2=$retour2->fetchAll(PDO::FETCH_ASSOC);	// on récupère tout le résultat renvoyé par SQL dans la variable 'resultat2'
			echo "<table>";	// la suite est identique à l'exercice précédent (boucles imbriquées)
            foreach($resultat2 as $valeur) {
				echo "<tr>";
                foreach($valeur as $key=>$val) {
                    echo "<td class=\"bold\">$key :</td>";
                    echo "<td>$val</td>";
                }
				echo "</tr>";
            }
            echo "</table>";
		?>

		<h2>Requête d'insertion</h2>

		<?php /*
//			$sql4="SELECT * FROM Contacts WHERE nom=\"Titi\" AND prenom=\"Toto\"";	// les 7 lignes commentées dans cet exercice ont pour but de tester si le contact existe déjà pour ne pas réitérer la requête, cependant il me manque le test ligne 70.
//			$retour4=$connexion->query($sql4);
//			if($retour4 ????) {
				$sql3="INSERT INTO Contacts (nom, prenom, adresse, codePostal, ville, telephone, mail, anneeNaissance) VALUES (\"Titi\", \"Toto\", \"rue des tutus\", 12345, \"Tataville\", 0123456789, \"titi.toto@tetelecom.com\", 1970)";	// requête SQL permettant d'insérer un nouveau contact Toto
				$retour3=$connexion->exec($sql3);	// on envoie la requête d'insertion via PDO (exec())
				if($retour3 != 0) {		// on test le retour de MySQL, s'il est différent de 0, au moins une ligne a été insérée
					echo "<p>Requête insérée avec succès</p>";	// ce qui nous permet d'indiquer à l'utilisateur le succès de la requête d'insertion
				}
				else {
					echo "<p>Erreur lors de l'insertion de la requête</p>";		// sinon on le prévient d'une erreur
				}
//			}
//			else {
//				echo "<p>Ce contact existe déjà</p>";
//			}
	*/	?>

		<h2>Requête avec critère issu d'un formulaire</h2>

		<form method="POST" action="index.php">		<!-- Création d'un formulaire HTML de méthode POST dont les données sont envoyées au fichier courant -->
			<label for="ville" id="idVille">Ville recherchée :</label>
			<input type="text" id="ville" name="ville" maxlength="50" required />	<!-- zone de saisie de texte pour la ville recherchée par l'utilisateur -->
			<input type="submit" id="submit" name="submit" value="Lancer la recherche" />	<!-- bouton d'envoi du formulaire -->
		</form>

		<?php
			if(isset($_POST["submit"])) {	// on teste si le bouton précédent a été cliqué (= si $_POST existe)
				$ville=$_POST["ville"];	// on récupère la ville saisie dans la variable 'ville'
				$sql5="SELECT * FROM Contacts WHERE ville=\"$ville\"";	// requête SQL permettant de récupérer le(s) contact(s) dont la ville est égale à 'ville' (soit la ville saisie précédement par l'utilisateur et récupérée via $_POST
	            $retour5=$connexion->query($sql5);	// on envoie la requête via PDO (query())
	            $resultat5=$retour5->fetchAll(PDO::FETCH_ASSOC);	// on récupère TOUT ce que retourne MySQL sous forme d'un tableau associatif
				echo "<p>****** Résultat ******</p>";
	            echo "<table id=\"exo4\">";	// on crée un tableau HTML
	            foreach($resultat5 as $valeur) {	// on parcourt le tableau associatif récupéré
	                echo "<tr>";	// à chaque parcourt de valeur et donc de ligne SQL, on ouvre une nouvelle ligne HTML
	                foreach($valeur as $key=>$val) {	// chaque ligne est ensuite parcourue
	                    echo "<td class=\"bold\">$key :</td>";	// dans une première cellule, on insère la clé (libellé de la colonne en SQL)
	                    echo "<td>$val</td>";	// et dans une seconde cellule, on insère la valeur correspondante
	                }
 	                echo "</tr>";	// fermeture de la ligne de tableau HTML
	            }
	            echo "</table>";	// on ferme enfin le tableau HTML lorsque l'ensemble de la réponse de MySQL est parcourue
				echo "<p>********************</p>";
			}
		?>

		<h2>Requête d'insertion avec données issues d'un formulaire</h2>

		<form method="POST" action="index.php">		<!-- création d'un formulaire HTML de méthode POST dont les données sont envoyées au fichier courant -->
            <label for="nom" id="idNom">Nom recherché :</label>
            <input type="text" id="nom" name="nom" maxlength="30" required />	<!-- zone de saisie de texte pour le nom recherché (le maxlength correspond à la taille du VARCHAR lors de la création de la BD sous MySQL -->
			<label for="prenom" id="idPrenom">Prénom recherché :</label>
            <input type="text" id="prenom" name="prenom" maxlength="30" required />		<!-- zone de saisie de texte pour le prénom recherché -->
			<label for="adresse" id="idAdresse">Adresse recherchée :</label>
            <input type="text" id="adresse" name="adresse" maxlength="60" required />	<!-- zone de saisie de texte pour l'adresse recherchée -->
            <input type="submit" id="submit2" name="submit2" value="Lancer la recherche" />	<!-- bonton d'envoi du formulaire -->
        </form>

		<?php
			if(isset($_POST["submit2"])) {	// on teste si le bouton précédent a été cliqué
				$nom=addslashes($_POST["nom"]);		// on récupère dans la variable 'nom' le nom saisi par l'utilisateur
				$prenom=addslashes($_POST["prenom"]);	// de même pour le prénom dans la variable 'prenom'
				$adresse=addslashes($_POST["adresse"]);	// et pour l'adresse dans la variable 'adresse'
// NB: la fonction 'addslashes' permet d'échapper automatiquement les caractères spéciaux dans le texte saisi par l'utilisateur et avant l'envoi à MySQL
                $sql6="SELECT * FROM Contacts WHERE nom=\"$nom\" AND prenom=\"$prenom\" AND adresse=\"$adresse\"";	// requête SQL permettant de récupérer les contacts dont le nom, le prénom et l'adresse sont respectivement le nom, le prénom et l'adresse saisis par l'utilisateur (variables 'nom', 'prenom' et 'adresse')
                $retour6=$connexion->query($sql6);	// on envoie la reqête via PDO (query())
                $resultat6=$retour6->fetchAll(PDO::FETCH_ASSOC);	// on récupère TOUS les résultats renvoyés par MySQL dans le tableau associatif 'resultat6'
                echo "<p>****** Résultat ******</p>";	// la suite est identique à l'exercice précédent (affichage du résultat sous forme de tableau (FOREACH imbriqués))
                echo "<table id=\"exo4\">";
                foreach($resultat6 as $valeur) {
                    echo "<tr>";
                    foreach($valeur as $key=>$val) {
                        echo "<td class=\"bold\">$key :</td>";
                        echo "<td>$val</td>";
                    }
                    echo "</tr>";
                }
                echo "</table>";
                echo "<p>********************</p>";
            }
		?>
	</body>
</html>
