Ajout d'informations de session dans une Base de données
Fermé
marcelpeju22
Messages postés
8
Date d'inscription
samedi 10 octobre 2015
Statut
Membre
Dernière intervention
9 mars 2016
-
2 mars 2016 à 23:34
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 - 10 mars 2016 à 00:50
jordane45 Messages postés 38300 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 novembre 2024 - 10 mars 2016 à 00:50
A voir également:
- Ajout d'informations de session dans une Base de données
- Le protocole assure que la communication entre l'ordinateur de chaïma et le serveur de partageimage est car les informations seront avant d'être envoyées. - Forum traduction
- Ajout snap sans rien - Forum Snapchat
- Formules excel de base - Guide
- Entrer les informations d'identification reseau - Guide
- Reinstaller windows sans perte de données - Guide
3 réponses
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
3 mars 2016 à 10:40
3 mars 2016 à 10:40
Bonjour,
1 - Tu as le code de connexion à ta BDD au milieu du code ... alors que tu fais une requête SELECT au début du fichier ..... ??
2 - Ta varaible $ID_user provient de :
Sauf que tu n'a aucun champ ID_user dans le formulaire HTML
3 - Pour valider le formulaire en restant sur la même page ... modifie
1 - Tu as le code de connexion à ta BDD au milieu du code ... alors que tu fais une requête SELECT au début du fichier ..... ??
2 - Ta varaible $ID_user provient de :
$ID_users = htmlspecialchars (trim($_POST['ID_users']));
Sauf que tu n'a aucun champ ID_user dans le formulaire HTML
3 - Pour valider le formulaire en restant sur la même page ... modifie
action="editer-profil.php">par
action="">
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
Modifié par jordane45 le 3/03/2016 à 12:05
Modifié par jordane45 le 3/03/2016 à 12:05
Je suppose que $ID_user est en fait une variable que tu as en SESSION non ?
Essayes ce code :
Déjà.. place la connexion de ta BDD dans un fichier à part
que tu n'auras qu'à inclure dans les pages où tu en auras besoin.
Ensuite, voici ton code corrigé :
Cordialement,
Jordane
Essayes ce code :
Déjà.. place la connexion de ta BDD dans un fichier à part
que tu n'auras qu'à inclure dans les pages où tu en auras besoin.
<?php // Fichier cnxBDD.php //-------------------------------// //pour afficher les erreurs php: error_reporting(E_ALL); try { $conn = new PDO('mysql:host=localhost;dbname=phpmembre;charset=utf8, 'root, ''); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch(PDOException $e){ echo $sql . "<br>" . $e->getMessage(); }
Ensuite, voici ton code corrigé :
<?php //demarrage des SESSION session_start(); //pour afficher les erreurs php: error_reporting(E_ALL); //connexion à la BDD en incluant le fichier cnxBDD.php require_once "cnxBDD.php"; //récupération propre des variables POST : $service_titre = isset($_POST['service_titre']) ? htmlspecialchars (trim($_POST['service_titre'])) : NULL; $service_categorie = isset($_POST['service_categorie']) ? htmlspecialchars(trim($_POST['service_categorie'])) : NULL; $service_description = isset($_POST['service_description']) ? htmlspecialchars(trim($_POST['service_description'])) : NULL; $ID_users = isset($_SESSION['ID_users']) ? $_SESSION['ID_users'] : NULL; //Traitement du submit if(isset($_POST['submit'])){ $sql = "INSERT INTO services(service_titre, service_categorie, service_description, ID_users) VALUES (:service_titre,:service_categorie,:service_description,:ID_users)"; $a_datas = array(":service_titre"=>$service_titre ,":service_categorie"=>$service_categorie ,":service_description"=>$service_description ,":ID_users":=>$ID_users ); try{ $prepare = $conn->prepare($sql); $prepare->execute($a_datas); echo 'Votre nouveau service a été enregistré avec succès!</a>'; }catch (PDOException $e) { echo "<br>Erreur : ".$e->getMessage(); } } // fin du PHP ?> <!-- debut code html --> <h1>Ajouter un service</h1> <form method="post" action="editer-profil.php"> <table id="inscription"> <tr> <td> <p>*Votre service</p> <input type="text" name="service_titre" value="<?php echo $service_titre;?>" /> </td> <td> <p>*Catégorie</p> <select type="text" name="service_categorie" /> <option value="1" <?php if($service_categorie == "1"){echo "selected='selected' ";}?>>Choisir</option> <option value="art" <?php if($service_categorie == "art"){echo "selected='selected' ";}?>>Art</option> <option value="finances"<?php if($service_categorie == "finances"){echo "selected='selected' ";}?> >finances</option> <option value="manuel" <?php if($service_categorie == "manuel"){echo "selected='selected' ";}?> >Traveaux manuels</option> </select> </td> </tr> <tr> <td> <p>*Description</p> <input type="textarea" name="service_description" value="<?php echo $service_description;?>"> </td> <td></td> </tr> </table> <hr> <br><br> <input type="submit" name="submit" value="Valider"> </form>
Cordialement,
Jordane
marcelpeju22
Messages postés
8
Date d'inscription
samedi 10 octobre 2015
Statut
Membre
Dernière intervention
9 mars 2016
6 mars 2016 à 22:41
6 mars 2016 à 22:41
Bonjour,
Désolé pour le délais. Ça ne fonctionne pas encore et je crois que j'aurais certains détails à spécifier.
D'abord, voici le code d'ouverture de ma session
Ici, 'username' correspond au courriel que l'usager doit entrer avec son mot de passe afin de se connecter. Il y a donc un champ 'username' dans la table 'users' de ma base de données. Ce que je cherche à faire, c'est un joint entre mes deux tables pour que le service corresponde à l'usager de la session. ID_users est un champ qui se trouve dans la table 'services' et c'est ce champ qui doit faire le pont. Je lui ai donné un type INT. Toutes les informations du formulaire entre bien dans la base de données, mais pas ce champ.
Aussi, j'ai essayé le code que vous m'avez proposé et je reçois le message d'erreur suivant : Fatal error: Call to a member function prepare() on null in /Applications/XAMPP/xamppfiles/htdocs/becsphp/editer-profil.php on line 126. La ligne 126 correspond à celle-ci :
Merci!
Désolé pour le délais. Ça ne fonctionne pas encore et je crois que j'aurais certains détails à spécifier.
D'abord, voici le code d'ouverture de ma session
<?php
session_start();
if(isset($_SESSION['username']))
{
try
{
$bdd = new PDO('mysql:host=localhost;dbname=phpmembre', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
Ici, 'username' correspond au courriel que l'usager doit entrer avec son mot de passe afin de se connecter. Il y a donc un champ 'username' dans la table 'users' de ma base de données. Ce que je cherche à faire, c'est un joint entre mes deux tables pour que le service corresponde à l'usager de la session. ID_users est un champ qui se trouve dans la table 'services' et c'est ce champ qui doit faire le pont. Je lui ai donné un type INT. Toutes les informations du formulaire entre bien dans la base de données, mais pas ce champ.
Aussi, j'ai essayé le code que vous m'avez proposé et je reçois le message d'erreur suivant : Fatal error: Call to a member function prepare() on null in /Applications/XAMPP/xamppfiles/htdocs/becsphp/editer-profil.php on line 126. La ligne 126 correspond à celle-ci :
try{
$prepare = $conn->prepare($sql);
$prepare->execute($a_datas);
Merci!
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
>
marcelpeju22
Messages postés
8
Date d'inscription
samedi 10 octobre 2015
Statut
Membre
Dernière intervention
9 mars 2016
7 mars 2016 à 20:33
7 mars 2016 à 20:33
Dans un code tu as utilisé la variable $conn lors de la connexion à la BDD ... et maintenant .. tu nous dis utiliser $bdd ....
Faut te décider ... et adapter le code en conséquence !
Faut te décider ... et adapter le code en conséquence !
marcelpeju22
Messages postés
8
Date d'inscription
samedi 10 octobre 2015
Statut
Membre
Dernière intervention
9 mars 2016
6 mars 2016 à 23:45
6 mars 2016 à 23:45
Ok, je ne sais pas pourquoi je n'y ai pas pensé avant, mais en fait, ce que je dois faire, c'est faire une requête de jointure à ma base de données. Cependant, je ne sais pas trop comment et où intégrer cette requête. si j'ai bien compris, elle devrait ressembler à ça :
Mais bon, je m'approche je crois, mais ce n'est pas encore tout à fait ça. Aussi, il faut vraiment que le ID_users que je vais entrer soit le ID de la session en cours.
Des idées?
SELECT *
FROM services
JOIN users
ON services.ID_users = users.ID
Mais bon, je m'approche je crois, mais ce n'est pas encore tout à fait ça. Aussi, il faut vraiment que le ID_users que je vais entrer soit le ID de la session en cours.
Des idées?
marcelpeju22
Messages postés
8
Date d'inscription
samedi 10 octobre 2015
Statut
Membre
Dernière intervention
9 mars 2016
Modifié par jordane45 le 10/03/2016 à 00:37
Modifié par jordane45 le 10/03/2016 à 00:37
Bonjour jordane45,
Après avoir changé $conn pour $bdd et $_SESSION['ID_users'] pour $_SESSION['username'] et deux autres ID_users, je suis finalement arrivé à ce que je voulais au départ. Comme on dit par chez nous, je vais me coucher moins niaiseux ce soir.
Mais je me dit qu'il serait peut-être mieux que j'entre plutôt le "id" de ma table users que le "username" J'imagine que rendu là, ça de doit pas être trop compliqué, mais comme mes connaissances sont encore un peu limitées, j'aurais encore besoin d'un peu d'aide sur ce dossier.
Voici mon code:
Je ne sais pas si ça peux aider, mais voici ma connexion :
Merci pour toute cette aide!
Après avoir changé $conn pour $bdd et $_SESSION['ID_users'] pour $_SESSION['username'] et deux autres ID_users, je suis finalement arrivé à ce que je voulais au départ. Comme on dit par chez nous, je vais me coucher moins niaiseux ce soir.
Mais je me dit qu'il serait peut-être mieux que j'entre plutôt le "id" de ma table users que le "username" J'imagine que rendu là, ça de doit pas être trop compliqué, mais comme mes connaissances sont encore un peu limitées, j'aurais encore besoin d'un peu d'aide sur ce dossier.
Voici mon code:
<?php $reponse = $bdd->query("SELECT * FROM users WHERE username = '" . $_SESSION['username'] . "'"); while ($donnees = $reponse->fetch()) { echo $donnees['prenom']." ". $donnees['nom']." ". $donnees['quartier']." ". $donnees['codepostal']." ". $donnees['ville']; } ?> <hr /> <?php error_reporting(E_ALL); ?> <?php //récupération propre des variables POST : $service_titre = isset($_POST['service_titre']) ? htmlspecialchars (trim($_POST['service_titre'])) : NULL; $service_categorie = isset($_POST['service_categorie']) ? htmlspecialchars(trim($_POST['service_categorie'])) : NULL; $service_description = isset($_POST['service_description']) ? htmlspecialchars(trim($_POST['service_description'])) : NULL; $ID_users = isset($_SESSION['username']) ? $_SESSION['username'] : NULL; //Traitement du submit if(isset($_POST['submit'])){ $sql = "INSERT INTO services(service_titre, service_categorie, service_description, username_users) VALUES (:service_titre,:service_categorie,:service_description,:username)"; $a_datas = array(":service_titre"=>$service_titre ,":service_categorie"=>$service_categorie ,":service_description"=>$service_description ,":username"=>$ID_users ); try{ $prepare = $bdd->prepare($sql); $prepare->execute($a_datas); echo 'Votre nouveau service a été enregistré avec succès!</a>'; }catch (PDOException $e) { echo "<br>Erreur : ".$e->getMessage(); } } // fin du PHP ?>
Je ne sais pas si ça peux aider, mais voici ma connexion :
<?php
session_start();
if(isset($_SESSION['username']))
{
try
{
$bdd = new PDO('mysql:host=localhost;dbname=phpmembre', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$reponse = $bdd->query("SELECT * FROM users WHERE username = '" . $_SESSION['username'] . "'");
?>
<?php
}else{
header('Location:login.php');
}
while ($donnees = $reponse->fetch())
{
echo "Bonjour " .$donnees['prenom'];
}
?>
Merci pour toute cette aide!
jordane45
Messages postés
38300
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 novembre 2024
4 704
Modifié par jordane45 le 10/03/2016 à 00:50
Modifié par jordane45 le 10/03/2016 à 00:50
*
Commence par mettre la connexion à ta BDD dans un fichier à part que tu n'auras qu'à inclure
dans les page où tu en as besoin.
Par exemple :
Puis dans ton code de connexion de l'utilisateur
Je te laisse corriger ton autre page en prenant celle là comme exemple.
Commence par mettre la connexion à ta BDD dans un fichier à part que tu n'auras qu'à inclure
dans les page où tu en as besoin.
Par exemple :
<?php // affichage des erreurs php error_reporting(E_ALL); // Fichier de connexion à la BDD : cnxBDD.php try{ $bdd = new PDO('mysql:host=localhost;dbname=phpmembre', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (PDOException $e) { echo "<br>".$e."<br>"; printf("%s:%d %s (%d) [%s]\n", $e->getFile(), $e->getLine(), $e->getMessage(), $e->getCode(), get_class($e)); exit('Impossible de se connecter à la base de données.'); } ?>
Puis dans ton code de connexion de l'utilisateur
<?php // affichage des erreurs php error_reporting(E_ALL); //demarrage des sessions session_start(); //connexion à la bdd require_once "cnxBDD.php"; //récupération "propre" des variables AVANT de les utiliser $username = isset($_SESSION['username']) ? $_SESSION['username'] : NULL; if($username){ //Utilisation des requêtes préparées // Ca protège, entre autres choses, contre les failles d'injection sql $sql = "SELECT * FROM users WHERE username = :username "; $a_datas = array(":username"=>$username ); try{ $prepare = $bdd->prepare($sql); $prepare->execute($a_datas); //on stocke le résultat dans un array $donnees = $prepare->fetchAll(); } catch (Exception $e) { echo 'Erreur : ' . $e->getMessage(); exit(); } //On boucle sur l'array de résultat foreach($donnees as $R) { echo "Bonjour " .$R['prenom']; } }else{ header('Location:login.php'); exit(); //faire un exit après un header location. } ?>
Je te laisse corriger ton autre page en prenant celle là comme exemple.