Salut,
Voila je rencontre un petit problème avec mon code.
J'essaie de faire en sorte que mes membres puisse editer leurs profils correctement en ajoutant des champs "Site Internet" etc... Mais mon code n'en à pas décidé ainsi...
edit.php / Form HTML :
<form action="" method="POST">
<div class="form-group">
<label style="display: flex;">Nom d'utilisateur</label>
<input class="form-control" type="text" name="website" disabled="disabled" value="<?= $_SESSION['auth']->username; ?>"/>
</div>
<div class="form-group">
<label style="display: flex;">Nombre de vues</label>
<input class="form-control" type="number" min="1" max="20000" name="viewers" value="<?= $_SESSION['auth']->viewers; ?>"/>
</div>
<div class="form-group">
<label style="display: flex;">Site internet / Portfolio</label>
<input class="form-control" type="text" name="website" placeholder="<?= $_SESSION['auth']->website; ?>"/>
</div>
<div class="form-group">
<label style="display: flex;">Pseudo Twitter</label>
<input class="form-control" type="text" name="twitter" placeholder="<?= $_SESSION['auth']->twitter; ?>"/>
</div>
<div class="form-group">
<label style="display: flex;">Pseudo Facebook</label>
<input class="form-control" type="text" name="facebook" placeholder="<?= $_SESSION['auth']->facebook; ?>"/>
</div>
<div class="form-group">
<label style="display: flex;">Changer de mot de passe</label>
<input class="form-control" type="password" name="password" placeholder="*********"/>
</div>
<div class="form-group">
<label style="display: flex;">Confirmation du mot de passe</label>
<input class="form-control" type="password" name="password_confirm"/>
</div>
<button class="btn btn-primary">Mettre à jour mon profil</button>
</form>
edit.php / PHP :
<?php
require 'inc/functions.php';
logged_only();
if(!empty($_POST)){
if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']){
$_SESSION['flash']['danger'] = "Les mots de passes ne correspondent pas";
}else{
$user_id = $_SESSION['auth']->id;
$password= password_hash($_POST['password'], PASSWORD_BCRYPT);
require_once 'inc/db.php';
$pdo->prepare('UPDATE users SET password = ? viewers = ? WHERE id = ?')->execute([$password, $_POST['viewers'], $user_id]);
$_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour";
}
}
?>
J'essaie de faire des test en premier temps avec "viewers" mais sa ne fonctionne même pas... Aucune modification n'est apporté dans ma table "users" !
Je veut faire en sorte que le code fonctionne et que mes membres puisse changer leurs "Nombre de vues" easy.
Aucune erreur après avoir cliqué sur le bouton "Mettre à jour mon profil", ont est bien redirigé vers la meme page après traitement...
Mais aucune modification n'a lieu.. Ni niveau SQL ni au niveau du form.
J'ai résolu mon problème ! Voici mon code au cas où quelqu'un aurais le même problème que moi :
<?php
require 'inc/functions.php';
logged_only();
if(!empty($_POST)){
$id = $_SESSION['auth']->id;
require_once 'inc/db.php';
$req = $pdo->prepare("UPDATE users SET viewers = ? WHERE id = ?");
$req->execute([$_POST['viewers'], $id]);
$_SESSION['flash']['success'] = 'REUSSITE';
header('Location: edit.php');
exit();
}
essai comme ça faut adapter :
//edition du mdp
if(isset($_POST['pwd'])){
$pass = trim($_POST['password']);
$password_confirm = trim($_POST['password_confirm']);
checkCsrf();//on vérifie tout de meme les failles csrf
if(!empty($pass != $password_confirm)){
$error = errors("Vos mots de pass sont diférent");
}if((strlen($pass) < 6) || (strlen($pass) > 100)){
$error = errors("Le mots de pass est trop court 6 mini ou trop long - 100 caractères");
}if(empty($error)){
$user_id = intval($_SESSION['auth']->id);
$password = trim(password_hash($pass, PASSWORD_BCRYPT));
$db->prepare("UPDATE users SET password = ? WHERE id = ?")->execute([$password, $user_id]);
//on inject les changement dans la session
$_SESSION['auth']->password = $password;
setFlash('<strong>Super !</strong> Votre mots de pass a bien étais modifier <strong>Bien jouer :)</strong>','Success !');
redirect('account#flash');
}
}
A quoi te sert viewers ? par-ce-que tu le met dans ta requète mai pas dans tes valeurs poster on peut t'injecter ici .
je ne connaissait pas les input numbers !!
Salut neecride, l'input Viewers c'est pour que les membres puissent choisir d'afficher ou non leurs nombre de vues sur Snapchat ^^
Pour faire un bref retour sur le sujet, j'ai réussi à faire en sorte que le traitement soit bien prit en compte et la j'arrive à modifier les "viewers" mais il le modifie aussi pour tous les autres membres, des idée ?
normal, tu n'envoies pas l'id du compte a editer ^^
rajoute un <input type="hidden" name="id" value="{TON_ID}" />
dans ton formulaire
ah autant pour moi, tu le récupères dans ton code... j'avais mal vu. (ben essai en supprimant le intval() )
Hello Keulu, je suis rester sur le même code, le voici :
<?php
require 'inc/functions.php';
logged_only();
if(!empty($_POST)){
if(empty($_POST['viewers']) || $_POST['viewers'] != $_POST['viewers']){
$_SESSION['flash']['danger'] = "Les mots de passes ne correspondent pas";
}else{
$id = $_SESSION['auth']->id;
require_once 'inc/db.php';
$pdo->prepare("UPDATE users SET viewers = ? WHERE id = ?")->execute([$viewers, $id]);
$_SESSION['flash']['success'] = "Votre mot de passe a bien été mis à jour";
}
$req = $pdo->prepare("UPDATE users SET viewers = ?");
$req->execute([$_POST['viewers']]);
$user_id = $pdo->lastInsertId();
$_SESSION['flash']['success'] = 'REUSSITE';
header('Location: edit.php');
exit();
}