Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Requête UPDATE avec valeur $_SESSION

PHP, MySql

Sujet résolu
16 octobre 2018 à 17:19:54

BBonjour à toute la communauté!

JE suis incapable de résoudre ce problème :

Je veux à travers un bouton mettre à jours certains champs de ma table, j'ai une erreur bizarre que voici :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Champ 'nomProf' inconnu dans field list' in C:\wamp64\www\RDV\valrdv.php on line 37

Alors que 'nomProf' n'est pas un champs dans la table mais la valeur à insérer !

Voici la page php qui reçois l'instruction:

<?php
session_start();
var_dump($_SESSION['userGrp']);
var_dump($_SESSION['idUser']);
var_dump($_SESSION['nomUser']);
var_dump($_GET);
$validateur=$_SESSION['nomUser'];
var_dump($validateur);
include_once("dbconnect.php");

If (($_SESSION['userGrp']) == 4) {
$sql = "UPDATE t_rdv SET
    valPar = ".$_SESSION['nomUser'].",
    valResp = 'Validé'
    WHERE idRdv = ".$_GET['idrdv'].";";
$bdd->exec($sql); }
// Redirection
//header("Location: " . $_SERVER["HTTP_REFERER"])
//
?>

j'ai utilisé le vardump et tout semble correct, y'a toujours une variable de type string qui'il me renvoie. que voici :

<small>C:\wamp64\www\RDV\valrdv.php:5:</small><small>string</small>
 'nomProf' (length=7)

coté bdd j'ai bien le champs 'valPar' écrit correctement et de type varchar de longueur 50.

sachant que j'ai essayé plusieurs types d'écritures et j'ai toujours la même erreur, voici tout ce que j'ai essayé :

$sql = "UPDATE t_rdv SET
    valPar = '$_SESSION['nomUser']',
    valResp = 'Validé'
    WHERE idRdv = ".$_GET['idrdv'].";";
$sql = "UPDATE t_rdv SET
    valPar = '$validateur',
    valResp = 'Validé'
    WHERE idRdv = ".$_GET['idrdv'].";";


sachant que si je mets une simple chaine de caractères manuellement dans la requête genre : 

$sql = "UPDATE t_rdv SET
    valPar = 'nomProf',
    valResp = 'Validé'
    WHERE idRdv = ".$_GET['idrdv'].";";

ça me met à jour la table sans aucune erreur !

je m'en remet donc à vous, merci d'avance.

-
Edité par hmimizstyle 16 octobre 2018 à 17:21:58

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 17:25:54

Bonjour,

ça devrait te mettre la puce à l'oreille pourtant, si SQL considère ta valeur comme une colonne c'est que tu as oublié les quotes...

Mais de toute façon, ta requête est vulnérable comme ça, il vaut mieux faire un requête préparée.

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 20:52:10

Et comment enlever les quotes !?

justement j'ai essayé avec ça s'affiche mais avec des quotes.

$sql = "UPDATE t_rdv SET
    valPar = '\'$validateur\'',
    valResp = 'Validé'
    WHERE idRdv = ".$_GET['idrdv'].";";

mais comment enlever ces fichues quotes !!!

mais sinon, pour la requête préparée j'ai essayé mais ça me parait impossible a faire, si tu veux bien m'aider.

 Merci !

  • Partager sur Facebook
  • Partager sur Twitter
16 octobre 2018 à 21:00:05

Ben c'est un peu les règles de base de la concaténation : ou comment associer des variables et des chaînes.

$sql = 'UPDATE t_rdv SET
    valPar = "'.$_SESSION['nomUser'].'",
    valResp = "Validé"
    WHERE idRdv = '.$_GET['idrdv'];


Par convention, on se sert plutôt des simples quotes pour php et des doubles pour sql.

Pour les requêtes préparées, ce n'est pas très compliqué, tu as tout ce qu'il faut dans ce tuto : https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1971264-requetes-preparees#/id/r-1988761

  • Partager sur Facebook
  • Partager sur Twitter