Bonsoir à vous,

Je fais des update sur mon site et le soucis c'est que quand j'update les infos elles se update en bdd mais pas sur le site et donc je dois à chaque fois me déconnecter / réconnecter pour avoir les infos actualiser

Si vous avez une méthode merci !

31 réponses


Pour que tes modifications s'affichent dynamiquement, il faut soit faire des appels AJAX, soit utiliser un serveur de websockets. Dans tous les cas tu as besoin de JavaScript.

Ces pas très precis comme question.

Si je comprend bien, tu doit forcement utiliser des sessions et les infos que tu actualise doivent êtres en sessions donc ces tout à fait normal que tu doit te déconnecter / re-connecter à chaque fois.

Si tu veut éviter cela, quant tu fait un update tu doit refaire la sessions et ca evitera cela.

aStunner
Auteur
$email = $_POST['email'];
        $update = "UPDATE users SET email = :email WHERE id = ".$_SESSION['Auth']['id']."";
        $req = $db->prepare($update);
        $req->bindParam(':email', $_POST['email']);
        $req->execute();

je ne vois pas l'erreur :/

Dans ta requete, il n'y as pas d'erreur mais comme tu l'as demande, a chaque modification tu souhaites que cela soit visible immediatement et pour cela tu vas devoir utiliser AJAX pour que chaque modification que tu vas effectuer soit visible sans que tu es besoin de te deconnecter / reconnecter.

Pouvons-nous avoir le code de la page en question ?
Penser à cacher les éléments sensibles s'il y en a (mdp, host...)

aStunner
Auteur

ben non elle ne fonctionne pas, pour le moment je n'utilise pas ajax, j'aimerais quel marche déjà :'(

Oui ça nous le savons. Donc en voyant votre code nous pourrons surement vous aider plus précisément.

$email = $_POST['email'];
$update = "UPDATE users SET email = ? WHERE id = '" . $_SESSION['Auth']['id'] . "'";
$req = $db->prepare($update);
$req->bindParam(1, $email, PDO::PARAM_STR);
$req->execute();

Essai avec ce bout de code

aStunner
Auteur
<?php
    require '../db.php';
    require '../auth.php';
    $errors = [];
    $success = [];

    $success['modifications'] = "Vos informations seront mis à jour une fois votre <strong>reconnexion</strong>";

    $req = $db->prepare("SELECT email FROM users WHERE email = :email");
    $req->bindParam("email", $email);
    $req->execute();
    $count = $req->rowCount();
    if($count)
    {
        $errors['email'] = "Cette adresse e-mail est déjà utlisée !";
    }

    if(!$errors)
    {
        $email = $_POST['email'];
        $update = "UPDATE users SET email = :email WHERE id = ".$_SESSION['Auth']['id']."";
        $req = $db->prepare($update);
        $req->bindParam(':email', $email);
        $req->execute();
        $_SESSION['success'] = $success;
        header('Location: ../../account/index.php');
    }else{
        $_SESSION['errors'] = $errors;
        header('Location: ../../signup.php');
    }
?>

Donc si je suis votre logique. Lorsque vous arrivé sur la page "account/index.php", les infos de l'utilisateur ne sont pas mises à jours ?

aStunner
Auteur

ben je suis bien redirigé mais la requete de update pas dans la bdd

Moi avoir compris rien.

aStunner
Auteur

CE CODE

$email = $_POST['email'];
        $update = "UPDATE users SET email = :email WHERE id = ".$_SESSION['Auth']['id']."";
        $req = $db->prepare($update);
        $req->bindParam(':email', $email);
        $req->execute();

s'excute mais dans la base de donnée (bdd) il ne met pas à jour l'email

D'accord, c'est bien différent de ce que vous nous avez dit au début.

Essayer ceci

$update = "UPDATE users SET email = :email WHERE id = :id";
$req = $db->prepare($update);
$req->bindParam(':email', $email, PDO::PARAM_STR);
$req->bindParam(':id', $_SESSION['Auth']['id'], PDO::PARAM_INT);
$req->execute();
aStunner
Auteur

Non sa ne marche toujours pas :(

Pas de message d'erreur ?

Sinon :

try
{
    $update = "UPDATE users SET email = :email WHERE id = :id";
$req = $db->prepare($update);
$req->bindParam(':email', $email, PDO::PARAM_STR);
$req->bindParam(':id', $_SESSION['Auth']['id'], PDO::PARAM_INT);
$req->execute();
}
catch(Exception $err)
{
    die('erreur ['.$err->getCode().'] '.$err->getMessage());
}
aStunner
Auteur

Sa ne me retourne aucune erreur :(

Fait un var_dump de $email pour voir s'il n'est pas vide.

Tout au début de votre code, mettez ceci pour afficher toute les erreurs.

// Afficher les erreurs à l'écran
ini_set('display_errors', 1);
// Afficher les erreurs et les avertissements
error_reporting(E_ALL);

De plus, commenter les 2 header("... et ajouter en dessous un echo avec un message du style "pas d'erreurs" pour le premiers et l'inver pour le second

aStunner
Auteur

j'ai fais un var_dump($_SESSION['Auth']['email']); après le execute et il me retourne un string null

Logique puisque à aucun moment vous faite : $_SESSION['Auth']['email'] =

C'est le principe d'avoir des données stockées dans la session ?

Sinon pour l'auteur essaye de faire

var_dump($_SESSION);

ou

var_dump($_SESSION['Auth']);

pour qu'on voit ce que ça donne déjà

aStunner
Auteur

array (size=16)
'id' => string '16' (length=2)
'identifiant' => string 'admin' (length=5)
'password' => string 'd033e22ae348aeb5660fc2140aec35850c4da997' (length=40)
'email' => string '' (length=0)
'age' => string '17' (length=2)
'avatar' => string '' (length=0)
'biographie' => string '' (length=0)
'site' => string '' (length=0)
'facebook' => string '' (length=0)
'twitter' => string '' (length=0)
'google_plus' => string '' (length=0)
'steam' => string '' (length=0)
'twitch' => string '' (length=0)
'youtube' => string '' (length=0)
'skype' => string '' (length=0)
'date_inscription' => string '0000-00-00' (length=10)

Où est fait le :

$_SESSION['Auth']['email'] = $email;
aStunner
Auteur

En quoi sa peut résoudre le truc ?
mon fichier de traitement n'arrive pas à récup les valeur des champs !

Au temps pour moi, je me suis égaré dans le problème.

Et en changeant la méthode d'insertion des valeurs par celle-ci:

if(!$errors)
{
    $email = $_POST['email'];
    $update = "UPDATE users SET email = :email WHERE id = :id";
    $req = $db->prepare($update);
    $req->execute(array('email' => $email, 'id' => $_SESSION['Auth']['id'])) or die("erreur update : ". $db->errorInfo() ."<br>");
    $_SESSION['success'] = $success;
    //header('Location: ../../account/index.php');
    echo "succes";
}else{
    $_SESSION['errors'] = $errors;
    header('Location: ../../signup.php');
    echo "erreurs";
}

Fait un var_dump($_POST['email']);

<?php
    require '../db.php';
    require '../auth.php';
    $errors = [];
    $success = [];

    $success['modifications'] = "Vos informations seront mis à jour une fois votre <strong>reconnexion</strong>";

    $req = $db->prepare("SELECT email FROM users WHERE email = :email");
    $req->bindParam("email", $email);  <==== il y a quoi dans cette variable $email.
    $req->execute();
    $count = $req->rowCount();
    if($count)
    {
        $errors['email'] = "Cette adresse e-mail est déjà utlisée !";
    }

    if(!$errors)
    {
        $email = $_POST['email'];
        $update = "UPDATE users SET email = :email WHERE id = ".$_SESSION['Auth']['id']."";
        $req = $db->prepare($update);
        $req->bindParam('email', $email);
        $req->execute();
        $_SESSION['success'] = $success;
        header('Location: ../../account/index.php');
    }else{
        $_SESSION['errors'] = $errors;
        header('Location: ../../signup.php');
    }
?>
aStunner
Auteur

j'ai trouvé l'erreur, qui est du côte html et donc j'ai le code du traitement

<?php
    require '../db.php';
    require '../auth.php';

    $errors = [];
    $success = [];

    // Variables POST //

        $email = $_POST['email'];
        $identifiant = $_POST['identifiant'];
        $site = $_POST['site'];
        $facebook = $_POST['facebook'];
        $twitter = $_POST['twitter'];
        $googlePlus = $_POST['googleplus'];
        $steam = $_POST['steam'];
        $twitch = $_POST['twitch'];
        $youtube = $_POST['youtube'];
        $skype = $_POST['skype'];
        $password = sha1($_POST['password']);
        $newPassword = sha1($_POST['password']);
        $biographie = $_POST['biographie'];
        $avatar = $_POST['avatar'];

    // Requête Database //

        $req = $db->prepare("SELECT email FROM users WHERE email = :email");
        $req->bindParam("email", $email);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['email'] = "Cette adresse e-mail existe déjà !";
        }

        $req = $db->prepare("SELECT identifiant FROM users WHERE identifiant = :identifiant");
        $req->bindParam("identifiant", $identifiant);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['identifiant'] = "Cet identifiant existe déjà !";
        }

        $req = $db->prepare("SELECT site FROM users WHERE site = :site");
        $req->bindParam("site", $site);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['site'] = "Cette adresse de site internet existe déjà !";
        }

        $req = $db->prepare("SELECT facebook FROM users WHERE facebook = :facebook");
        $req->bindParam("facebook", $facebook);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['facebook'] = "Cette adresse facebook internet existe déjà !";
        }

        $req = $db->prepare("SELECT twitter FROM users WHERE twitter = :twitter");
        $req->bindParam("twitter", $twitter);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['twitter'] = "Cette adresse twitter internet existe déjà !";
        }

        $req = $db->prepare("SELECT google_plus FROM users WHERE google_plus = :googleplus");
        $req->bindParam("google_plus", $googlePlus);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['googleplus'] = "Cette adresse google + existe déjà !";
        }

        $req = $db->prepare("SELECT steam FROM users WHERE steam = :steam");
        $req->bindParam("steam", $steam);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['steam'] = "Ce pseudo steam existe déjà !";
        }

        $req = $db->prepare("SELECT twitch FROM users WHERE twitch = :twitch");
        $req->bindParam("twitch", $twitch);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['twitch'] = "Ce pseudo twitch existe déjà !";
        }

        $req = $db->prepare("SELECT youtube FROM users WHERE youtube = :youtube");
        $req->bindParam("youtube", $youtube);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['youtube'] = "Cette adresse youtube existe déjà !";
        }

        $req = $db->prepare("SELECT skype FROM users WHERE skype = :skype");
        $req->bindParam("skype", $skype);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            $errors['skype'] = "Ce pseudo skype existe déjà !";
        }

        $req = $db->prepare("SELECT password FROM users WHERE password = :password AND id = ".$_SESSION['Auth']['id']."");
        $req->bindParam("password", $password);
        $req->execute();
        $count = $req->rowCount();
        if($count)
        {
            if(!array_key_exists('new-password', $_POST) || strlen($newPassword) < 5)
            {
                $errors['new-password'] = "Votre nouveau mot de passe est trop court!";
            }else{
                $req = $db->prepare("UPDATE users SET password = :new-password WHERE id = ".$_SESSION['Auth']['id']."");
                $req->bindParam("new-password", $newPassword);
                $req->execute();
            }
        }else{
            $errors['password'] = "Votre mot de passe est incorrect !";
        }

    // UpDate Database //

        if(!$errors)
        {
            $req = $db->prepare("UPDATE users SET email = :email, identifiant = :identifiant, site = :site, facebook = :facebook, twitter = :twitter, google_plus = :googleplus, steam = :steam, twitch = :twitch, youtube = :youtube, skype = :skype, biographie = :biographie, avatar = :avatar");
            $req->bindParam("email", $email);
            $req->bindParam("identifiant", $identifiant);
            $req->bindParam("site", $site);
            $req->bindParam("facebook", $facebook);
            $req->bindParam("twitter", $twitter);
            $req->bindParam("google_plus", $googlePlus);
            $req->bindParam("steam", $steam);
            $req->bindParam("twitch", $twitch);
            $req->bindParam("youtube", $youtube);
            $req->bindParam("skype", $skype);
            $req->bindParam("biographie", $biographie);
            $req->bindParam("avatar", $avatar);
            $req->execute();

            $success['edit'] = "Modifications effectuées !";
            $_SESSION['success'] = $success;
            header('Location: ../../account/index.php');
        }else{
            $_SESSION['errors'] = $errors;
            header('Location: ../../account/index.php');
        }
?>

sinon merci quand même pour votre aide !

Tu devrais retravailler le code de ce fichier, tu te repetes beaucoup (METHODE DRY) , tu gagnerais en performance et en skill ^^.

Vous pouvez utiliser AJAX
Mais le mieux c'est d'utiliser une fonction dans laquelle vous mettez une autre $.Get ()
Est Vous pouvez la rappeler éternellement avec la fonction setintervale()