Problème requête SQL
Résolu/Fermé
A voir également:
- Problème requête SQL
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Logiciel sql - Télécharger - Bases de données
- Sql replace plusieurs valeurs - Forum Programmation
- Récupération serveur sql - Télécharger - Gestion de données
3 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
6 mars 2020 à 16:10
6 mars 2020 à 16:10
Bonjour,
Dans ta requête
Il manque un
J'aurais quand même une remarque à faire concernant la sécurité : tes mots de passe sont stockés en clair en base de données. Personnellement je trouve que c'est une rupture de confiance franche.
Tu peux utiliser password_hash (https://www.php.net/password_hash) et password_verify (https://www.php.net/password_verify) pour sécuriser ces données.
Attention aussi à cette ligne :
Xavier
Dans ta requête
$sql = $bdd->query('SELECT `responsable`, chantier.`societe`,`adresse_toiture`,`nombre_capteur`,`adresse_bluetooth`,`nom_box`,`date_installation` FROM `chantier` JOIN etancheur ON chantier.societe = etancheur.societe');
Il manque un
WHERE etancheur.id_etancheur = :id_etancheuravec ton $id_etancheur (et en faisant prepare puis execute, comme tu faisais pour les requêtes de mot de passe).
J'aurais quand même une remarque à faire concernant la sécurité : tes mots de passe sont stockés en clair en base de données. Personnellement je trouve que c'est une rupture de confiance franche.
Tu peux utiliser password_hash (https://www.php.net/password_hash) et password_verify (https://www.php.net/password_verify) pour sécuriser ces données.
Attention aussi à cette ligne :
header("Location: profiletancheur.php?id_etancheur=".$_SESSION['prenom_nom']);: on dirait bien qu'il y a un mélange entre nom_prenom et id_etancheur.
Xavier
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
Modifié le 6 mars 2020 à 23:21
Modifié le 6 mars 2020 à 23:21
Bonjour,
Beaucoup d'erreurs dans ton code.
Que ça soit dans le html, le css (que je ne traiterai pas ici), le php...
Voici ce que je te propose :
Déjà, au lieu de recopier X fois le code de connexion à ta bdd... place le dans un fichier à part
que tu n'auras qu'à inclure dans tes autres page.
Je t'invite, au passage, à activer les erreurs PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Ensuite, histoire de sécuriser ton code, je te conseille de lire et d'appliquer les informations fournies ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Pour ton fichier de connexion
Et ton fichier profil professionel :
Pour finir, à l'avenir, merci de poster ton code correctement en utilisant les balises de code ET en y précisant le langage
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
Beaucoup d'erreurs dans ton code.
Que ça soit dans le html, le css (que je ne traiterai pas ici), le php...
Voici ce que je te propose :
Déjà, au lieu de recopier X fois le code de connexion à ta bdd... place le dans un fichier à part
que tu n'auras qu'à inclure dans tes autres page.
Je t'invite, au passage, à activer les erreurs PDO
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
<?php /** * cnxBdd.php */ try{ $bdd =new PDO('mysql:host=localhost; dbname=gestion_toiture; charset=utf8', 'root', ''); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } ?>
Ensuite, histoire de sécuriser ton code, je te conseille de lire et d'appliquer les informations fournies ici :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Pour ton fichier de connexion
<?php /* démarrage des sessions */ session_start(); // A PLACE AVANT TOUT AUTRE CODE PHP/HTML... //activation de l'affichage des erreurs php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); /* Connexion */ require_once "cnxBdd.php"; //récupération PROPRE des variables AVANT de les utiliser $mail = !empty($_POST['mail']) ? $_POST['mail'] : NULL; $mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL; if($mail && $mdp ){ //préparation de la requête et des variables $sql = "SELECT * FROM etancheur WHERE mail= :mail AND mdp= :mdp"; $datas = array(':mail'=>$mail, ':mdp'=>$mdp); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; if ($row = $requete->fetch(PDO::FETCH_ASSOC)){ $_SESSION['prenom_nom'] = $row['prenom_nom']; $_SESSION['mail'] = $mail; $_SESSION['mdp'] = $mdp; $_SESSION['id_etancheur'] = $id_etancheur; header("Location: profiletancheur.php"); }else { $erreur ="Identifiant ou Mot De Passe incorrect."; } }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } else { $erreur = "Tous les champs doivent être complétés !"; } ?> <html> <head> <meta charset="utf-8"> <!-- importer le fichier de style --> <link rel="stylesheet" href="styleconnexionetancheur.css" media="screen" type="text/css" /> </head> <body> <div id= "container"> <form method="POST" action=""> <h1>Connexion</h1> <label><b>Mail : </b> </label> <input type="text" placeholder="Entrer votre mail" name="mail" value="<?php echo $mail;?>"/></p> <label> <b>Mot de passe :</b> </label> <input type="password" placeholder="Entrer votre mot de passe" name="mdp" /></p> <input type="submit" name='formconnexion' value="Se connecter" /></p> <button type="submit">Retour accueil</button> <div class="error"> <?php if(!empty($erreur)){ echo '<font color="red">'.$erreur."</font>"; } ?> </div> </form> </div> </body> </html>
Et ton fichier profil professionel :
<?php /* démarrage des sessions */ session_start(); // A PLACE AVANT TOUT AUTRE CODE PHP/HTML... //activation de l'affichage des erreurs php error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); /* Connexion */ require_once "cnxBdd.php"; //inclusion de fichier de configuration include('config.php'); // ?? qu'est-ce que c'est ?? //récupération PROPRE des variables AVANT de les utiliser $mail = !empty($_SESSION['mail']) ? $_SESSION['mail'] : NULL; $mdp = !empty($_SESSION['mdp']) ? $_SESSION['mdp'] : NULL; $id_etancheur = !empty($_SESSION['id_etancheur']) ? $_SESSION['id_etancheur'] : NULL; $prenom_nom = !empty($_SESSION['prenom_nom']) ? $_SESSION['prenom_nom'] : NULL; // si non connecté... retour à l'écran de connexion if(!$mail){ header('Location:accueil.php'); } //récupération des ifnos chantiers $sql = 'SELECT `responsable` , chantier.`societe` ,`adresse_toiture` ,`nombre_capteur` ,`adresse_bluetooth` ,`nom_box` ,`date_installation` FROM `chantier` C JOIN etancheur E ON C.societe = E.societe WHERE E.id_etancheur = :id'; $datas = array(':id'=>$id_etancheur); //Execution de la requete try{ $requete = $bdd -> prepare($sql) ; $requete->execute($datas) ; $chantiers = $requete->fetchAll() // on stocke dans un array }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } ?> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="styleprofiladministrateur.css" media="screen" type="text/css" /> <style> #footer { position: absolute; botom: 0; } </style> </head> <body> <div align="center"> <h2>Profil de l'étancheur <?php echo $prenom_nom;?></h2> <br/> <br/> Mail : <?php echo $mail;?> <br/> <br/> <div class="table"> <table border="3"> <tr> <th>Responsable</th> <th>Société d'étanchéité</th> <th>Adresse toiture</th> <th>Nombre capteur</th> <th>Adresse bluetooth</th> <th>Nom de la Box</th> <th>Date d'installation</th> </tr> <?php if(!empty($chantiers)){ foreach($chantiers as $C){ echo "<tr>"; foreach($C as $cellule){ echo "<td>" . $$cellule . "</td>"; } echo "</tr>"; } } ?> </table> </div> </div> <div id="footer"> <a href="deconnexion1.php">Se déconnecter</a> </div> </body> </html>
Pour finir, à l'avenir, merci de poster ton code correctement en utilisant les balises de code ET en y précisant le langage
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code
6 mars 2020 à 16:42
Pour ma requête, j'ai changé comme tu me l'as dis.
Cela donne
Sauf que du coup maintenant j'ai plus aucun résultat dans mon tableau.
Oui, c'est vrai je ne me suis pas du tout chargé de la partie sécurité, merci j'y ferai un tour.
Tout à fait je me suis emmelée les pinceaux.
6 mars 2020 à 16:53
6 mars 2020 à 16:54
6 mars 2020 à 17:05
ça me change rien du tout, j'ai aucune information qui apparait, je pense que je dois avoir un problème après.
Modifié le 6 mars 2020 à 17:10
Est-ce que tu utilises un outil externe pour faire des requêtes, comme phpMyAdmin ?
Si oui, essaie de copier cette requête en mettant un id_etancheur pour voir si tu obtiens quelque chose.