Modification et édition de profil sql

Par ACDesign27, il y a 9 ans


Salut,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

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" !

Ce que je veux

Je veut faire en sorte que le code fonctionne et que mes membres puisse changer leurs "Nombre de vues" easy.

Ce que j'obtiens

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.

11 réponses

Carouge10, il y a 9 ans

Il manque les "," dans la requête SQL entre les éléments

ACDesign27, il y a 9 ans

Les virgules ne change rien :/

Carouge10, il y a 9 ans

Aucun message d'erreur ?
Vous travaillez en local ou en ligne ?

ACDesign27, il y a 9 ans

Je travail en ligne ^^

neecride, il y a 9 ans

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 !!

ACDesign27, il y a 9 ans

Salut neecride, l'input Viewers c'est pour que les membres puissent choisir d'afficher ou non leurs nombre de vues sur Snapchat ^^

ACDesign27, il y a 9 ans

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 ?

keulu, il y a 9 ans

normal, tu n'envoies pas l'id du compte a editer ^^

rajoute un <input type="hidden" name="id" value="{TON_ID}" /> dans ton formulaire

keulu, il y a 9 ans

ah autant pour moi, tu le récupères dans ton code... j'avais mal vu. (ben essai en supprimant le intval() )

ACDesign27, il y a 9 ans

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(); }
ACDesign27, il y a 9 ans

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(); }