[RESOLU] Problème avec un UPDATE

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Problème avec un UPDATE

Re: Problème avec un UPDATE

par Stu76 » 17 nov. 2021, 13:44

Ok problème résolu, malheureusement je ne sais pas expliqué pourquoi. Je suis sincèrement navré, je n'aime pas ça car si le problème se répète je ne saurai pas où chercher. Par contre, si je comprends l'origine du problème, je reviendrai vers vous.
Encore un tout grand merci pour soutient et votre aide, @rtur merci pour l'info sur la gestion d'erreur PDO. Je ne connaissais pas et je garde ça bien au chaud.
Bonne continuation à tous

Re: Problème avec un UPDATE

par Stu76 » 17 nov. 2021, 08:56

Re,

Afin que tout le monde voit plus claire, voici un exemple qui ressemble à mon code. Vous verrez que celui-ci ne retourne aucune erreur et que mes variables contiennent bien des valeurs. J'ai remplacé le champs date par un token, pour voir le changement à chaque rafraichissement plus simple et plus visuel.
Bien entendu, j'ai créé une table avec les bons champs et les bonnes valeurs.

Code : Tout sélectionner

<?php require 'classes/core.php'; $dsn = 'mysql:dbname=testcode;host=localhost'; $user = 'root'; $password = ''; try { $dbh = new PDO($dsn, $user, $password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Échec lors de la connexion : ' . $e->getMessage(); } $mail ='[email protected]'; $token = uniqid(); var_dump($mail); var_dump($token); $db =Database::connect(); $db->exec("SET CHARACTER SET utf8"); $stmt= $db->prepare('UPDATE users set token = :token WHERE email = :email'); $stmt->bindValue(":email",$mail,PDO::PARAM_STR); $stmt->bindvalue(":token",$token,PDO::PARAM_STR); $stmt->execute(); $stmt->debugDumpParams(); ?> <!DOCTYPE html> <html lang="en"> <head> <title>Récupération de votre psw</title> </head> <body> <section id="cours"> <div class="container"> <div class="tprinc"> <h2>Page de test </h2> </div> <div class="white"> Page de test </div> </div> </section> </body> </html>
Ce code ne fonctionne pas chez moi et je ne comprends pas pourquoi !!!! Il est pourtant basic et plus que rudimentaire.

Vous constaterez comme moi que les valeurs sont bien transmisses à la requête SQL, mais que celle-ci ne s'exécute pas car rien ne s'inscrit dans ma base de données.

Merci pour votre aide

Re: Problème avec un UPDATE

par Stu76 » 17 nov. 2021, 08:38

Je n'ai aucune erreur de retourner, je n'y comprend rien. Je vais vous envoyer mon code complet comme ça vous aurez une vue d'ensemble.
Merci pour votre aide

Re: Problème avec un UPDATE

par or 1 » 16 nov. 2021, 18:40

et la sugestion d'Arthur, cela dit quoi ?

Re: Problème avec un UPDATE

par Stu76 » 16 nov. 2021, 17:04

Salut Or1,

Il ne manque pas d'apostrophe à set date, c'est une erreur de manipulation de ma part (effacé par inadvertance).
var_dump($date); donne bien 2021-11-16, la date d'aujourd'hui vu que je viens de refaire le test à l'instant.

Re: Problème avec un UPDATE

par or 1 » 15 nov. 2021, 22:29

set date = 2021-11-15'
cela marcherait mieux avec
set date = '2021-11-15'

quel est le retour exact de :
var_dump($date);
?

Re: Problème avec un UPDATE

par Stu76 » 15 nov. 2021, 21:42

Re,

Voici le résultat de l'option debug

SQL: [52] UPDATE users set date = :date WHERE email = :email Sent SQL: [74] UPDATE users set date = 2021-11-15' WHERE email = '[email protected]' Params: 2 Key: Name: [6] :email paramno=-1 name=[6] ":email" is_param=1 param_type=2 Key: Name: [6] :date paramno=-1 name=[6] ":date" is_param=1 param_type=2

Pour les variables var_dump elles retournent bien toutes les deux une valeur.

Re: Problème avec un UPDATE

par Stu76 » 15 nov. 2021, 19:41

Bonsoir,

Merci du suivi, mes variables ont bien une valeur et c'est bien là le problème. Je m'arrache les cheveux car je ne comprends absolument pas pourquoi cette requête ne fonctionne pas :?

Re: Problème avec un UPDATE

par ynx » 15 nov. 2021, 17:26

Oui c'est normal que les valeurs ne s'affichent pas lorsqu'on affiche l'objet PDOStatement correspondant à la requête préparée.
A priori le problème viendrait des variables $mail et $date.
Que donne le test suivant ?
var_dump($mail);
var_dump($date);

$db = Database::connect();
$stmt= $db->prepare("UPDATE users SET date=:date WHERE email=:email");
$stmt->bindValue(':email', $mail, PDO::PARAM_STR);
$stmt->bindvalue(':date', $date, PDO::PARAM_STR);
$stmt->execute();

$stmt->debugDumpParams();

Re: Problème avec un UPDATE

par Stu76 » 15 nov. 2021, 09:49

Quand je fais un print_r juste avant l'excute de ma variable $stmt voici ce qu'elle m'affiche

PDOStatement Object ( [queryString] => UPDATE users set date=:date WHERE email=:email )

Elle ne contient aucune valeur, est-ce normal svp ?

Re: Problème avec un UPDATE

par Stu76 » 15 nov. 2021, 09:38

Je viens de faire encore une série de test et rien ne passe vers ma base de données. SAUF, quand je mets des valeurs directement dans la requête qui ce trouve dans ma page php. Là étrangement tout passe mais dès que je travaille en PDO ou autre plus rien de rentre à rien comprendre.

Re: Problème avec un UPDATE

par Stu76 » 15 nov. 2021, 09:20

Re,

@rthur, j'ai activé la gestion d'erreur PDO, malheureusement il me retourne aucune erreur :(

Re: Problème avec un UPDATE

par Stu76 » 15 nov. 2021, 09:00

Bonjour à tous,

D'abord un tout grand merci de vous pencher sur mon problème.
Ma requête fonctionne correctement dans MySQL, j'avais testé aussi avant d'envoyer un message sur le forum. Par contre, je n'ai pas activé les message d'erreur pour PDO je vais tester et je reviens vers vous :wink:

Re: Problème avec un UPDATE

par @rthur » 14 nov. 2021, 15:25

Également, active la gestion d'erreur PDO en WARNING ça aide pour débuguer :
https://www.php.net/manual/fr/pdo.error-handling.php

Re: Problème avec un UPDATE

par or 1 » 14 nov. 2021, 13:26

afficher
echo "UPDATE users SET date='$date' WHERE email='$mail'";
l'exécuter dans phpmyadmin pour voir si cela provoque une erreur.