[RESOLU] Résultat de requête SQL dans une value d'input

Petit nouveau ! | 5 Messages

24 déc. 2015, 14:46

Bonjour,

Je suis un codeur débutant en PHP et j'ai très peu de contacts dans le domaine pour m'aider. J'aurais aimé avoir un "parrain" pour m'aider à me former mais pour le moment, je demande de l'aide sur ce forum.

Je sais qu'auto-remplir un formulaire avec des valeurs présentes dans une base de donnée est simple, mais je n'y arrive pas.

Dans ma page account.php, j'aurais aimé remplir les cases de coordonnées avec les valeurs présentes dans la base de données (le morceau de code visé est entouré de --------------------------------------------------).

Voici mon code :

// account.php

Code : Tout sélectionner

<?php session_start(); require('inc/functions.php'); logged_only(); require_once 'inc/db.php'; $user_id = $_SESSION['auth']->id; if(isset($_POST['submit_changepw'])){ if(!empty($_POST)){ if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']){ $_SESSION['flash']['danger'] = "Les mots de passe ne correspondent pas"; } else { $password= password_hash($_POST['password'], PASSWORD_BCRYPT); $pdo->prepare('UPDATE users SET password = ? WHERE id = ?')->execute([$password, $user_id]); $_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour."; } } } if(isset($_POST['submit_pubinfo'])){ if(!empty($_POST)){ $req = $pdo->prepare('UPDATE users SET name = ?, firstname = ?, birthdate = ?, adress = ?, phone = ?, activity = ? WHERE id = ?'); $req->execute([$_POST['name'], $_POST['firstname'], $_POST['birthdate'], $_POST['adress'], $_POST['phone'], $_POST['activity'], $user_id]); $_SESSION['flash']['success'] = "Informations mises à jour !"; } } include('inc/header.php'); ?> <div id="content"> <?php if(isset($_SESSION['flash'])): ?> <?php foreach($_SESSION['flash'] as $type => $message): ?> <div class="<?= $type; ?>"> <?= $message; ?> </div> <?php endforeach; ?> <?php unset($_SESSION['flash']); ?> <?php endif; ?> <h1>Votre compte</h1><br /><br /> -------------------------------------------------- <?php $req = $pdo->prepare('SELECT * FROM users WHERE id = ?'); $req->execute([$user_id]); $data = $req->fetch(); ?> <p>Coordonnées :</p> <form action="" method="POST"> <label>Nom </label><input type="text" name="name" value="<?php echo $data['name']; ?>" /><br /> <label>Prénom </label><input type="text" name="firstname" value="<?php echo $data['firstname']; ?>" /><br /> <label>Année de naissance </label><input type="text" name="birthdate" value="<?php echo $data['birthdate']; ?>" /><br /> <label>Adresse </label><input type="text" name="adress" value="<?php echo $data['adress']; ?>" /><br /> <label>Téléphone </label><input type="text" name="phone" value="<?php echo $data['phone']; ?>" /><br /> <label>Activité </label><input type="text" name="activity" value="<?php echo $data['activity']; ?>" /><br /> <button type="submit" name="submit_pubinfo">Envoyer</button> </form> -------------------------------------------------- <p>Modifier votre mot de passe :</p> <form action="" method="POST"> <div> <input type="password" name="password" placeholder="Changer de mot de passe"/> </div> <div> <input type="password" name="password_confirm" placeholder="Confirmation du mot de passe"/> </div> <button type="submit" name="submit_changepw">Changer mon mot de passe</button> </form> </div> <?php include('inc/footer.php'); ?>
// Le functions.php

Code : Tout sélectionner

<?php function debug($variable){ echo '<pre>' . print_r($variable, true) . '</pre>'; } function str_random($length) { $alphabet = "0123456789azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN"; return substr(str_shuffle(str_repeat($alphabet, $length)), 0, $length); } function logged_only(){ if(session_status() == PHP_SESSION_NONE){ session_start(); } if(!isset($_SESSION['auth'])){ $_SESSION['flash']['danger'] = "Vous n'avez pas accès à cette page, veuillez vous connecter ou vous inscrire !"; header('Location: index.php'); exit(); } }?>
// Le header.php

Code : Tout sélectionner

<?php if(session_status() == PHP_SESSION_NONE){ session_start(); } if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])) { require('db.php'); $req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL'); $req->execute(['username' => $_POST['username']]); $user = $req->fetch(); if(password_verify($_POST['password'], $user->password)){ session_start(); $_SESSION['auth'] = $user; $_SESSION['flash']['success'] = 'Vous êtes maintenant connecté'; header('Location: account.php'); exit(); } else { $_SESSION['flash']['danger'] = 'Identifiant ou mot de passe incorrect.'; } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="description" content="Job'Etu, le site d'annonces pour étudiants."> <meta name="keywords" content="Job,Etu,annonce,annonces,étudiants,étudiant"> <title>Job'Etu</title> <link rel="stylesheet" type="text/css" href="./css/jobetustyle.css"> <link rel="icon" type="image/png" href="./img/favicon.png" /> </head> <body> <?php if(isset($_SESSION['auth'])): ?> <div align="right"> <?php require('db.php'); $currentname = $_SESSION['auth']->username; echo ("Bienvenue ") . $currentname; ?> <a href="logout.php">Se déconnecter</a> </div> <?php else: ?> <div align="right"> <form action="" method="POST"> <label>Pseudo ou Email</label><br /> <input type="text" name="username"/><br/><br/> <label>Mot de passe</label><br/> <input type="password" name="password"/><br/><br/> <button type="submit">Se connecter</button> </form><br/><br/> Pas de compte ? <a href="register.php">S'inscrire</a> </div> <?php endif; ?> <center><a href="index.php" id="logo">Job'Etu</a></center> <br /> <div id="main"> <div id="navigation"> <table width="100%"> <td style="text-align: center"> <a class="nav" href="index.php">Accueil</a> <a class="nav" href="createannounce.php">Déposer une annonce</a> <a class="nav" href="offers.php">Offres</a> <a class="nav" href="demands.php">Demandes</a> <a class="nav" href="account.php">Mon compte</a> </td> </table> </div>
Voila le résultat visuel : http://awesomescreenshot.com/0fd5ibkkaa

Voila une image de la structure de la base de donnée : http://awesomescreenshot.com/0a45ibkw93

Le DB.php permet de faire la connexion à la BDD et je sais qu'il marche.

Voila, soit je suis bigleux, soit j'ignore une règle et la transgresse.

Merci beaucoup d'avance pour votre aide.
Cephou
Codeur PHP Débutant
_______________________________
PortFolio & SoundCloud

Mammouth du PHP | 1967 Messages

24 déc. 2015, 15:53

Vu le nombre de point d'interrogation restant dans tes requêtes SQL, ton script n'est pas fini. Il faut te demander quelle variable utiliser à la place de ces ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 5 Messages

24 déc. 2015, 16:31

Bonjour,

Merci pour votre réponse.

Voulez vous parler de ce passage ?

Code : Tout sélectionner

if(isset($_POST['submit_pubinfo'])){ if(!empty($_POST)){ $req = $pdo->prepare('UPDATE users SET name = ?, firstname = ?, birthdate = ?, adress = ?, phone = ?, activity = ? WHERE id = ?'); $req->execute([$_POST['name'], $_POST['firstname'], $_POST['birthdate'], $_POST['adress'], $_POST['phone'], $_POST['activity'], $user_id]); $_SESSION['flash']['success'] = "Informations mises à jour !"; } }
Chaque ? est remplacé par les paramètres donnés dans l'execute. Je crois que la fonction en elle même marche, j'update bien ma BDD avec les paramètres placés dans les input, mais c'est la complétion automatique des input qui pêche.

Avez vous une idée de ce qui peut bloquer ?

Cephou.
Cephou
Codeur PHP Débutant
_______________________________
PortFolio & SoundCloud

Mammouth du PHP | 2703 Messages

24 déc. 2015, 16:32

$req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
echo "$user_id";
$req->execute([$user_id]);
echo $req->rowCount();

qu'est ce que cela affiche ?

Mammouth du PHP | 881 Messages

24 déc. 2015, 17:05

Et ton 'fetch' ... est-ce fetch_array ? fetch_row ? fetch_object ?

si c'est fetch_array, ton code est bon entre les ---------------
si c'est fetch_row, ton code devrait ressembler à

Code : Tout sélectionner

echo $data[2];
si c'est fetch_object ton code devrait ressembler à

Code : Tout sélectionner

echo $data->nom;
Soyez artisans de paix

Petit nouveau ! | 5 Messages

25 déc. 2015, 23:14

Bonjour, j'ai résolu mon problème en utilisant echo ($data->name);

Merci beaucoup pour votre aide.

Joyeuses fêtes.
Cephou
Codeur PHP Débutant
_______________________________
PortFolio & SoundCloud