Problème requête SQL
Résolu
Marion-Slr
-
Marion-Slr -
Marion-Slr -
A voir également:
- Problème requête SQL
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
- Jointure sql ✓ - Forum MySQL
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
3 réponses
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
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
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.
ça me change rien du tout, j'ai aucune information qui apparait, je pense que je dois avoir un problème après.
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.