Probleme mise a jour BDD

Répondre
TomZzy
le 21/01/2014 à 20:11
TomZzy
Bonjour tout le monde !

Voila j'ai un projet a faire dans mes études et je doit faire un site web. Sur mon site j'ai besoin d'un onglet "Paramètres" où l'utilisateur peut modifier son mot de passe en remplissant 3 case "mot de passe" "nouveau mdp" et "confirmer nouveau mdp"

Mais voila je n'arrive pas a mettre a jour ma BDD :'(

voila mon code :

<?php
//connection au serveur
$cnx = mysql_connect( "localhost", "root", "" ) ;

//sélection de la base de données:
$db = mysql_select_db( "lyberta" ) ;

//récupération des valeurs des champs:
//mot de passe
if( isset($_POST['mdp']) && isset($_POST['newmdp']) && isset($_POST['confirmmdp']))
{
if( $_POST['confirmmdp'] == $_POST['newmdp'])
{
//création de la requête SQL:
$sql = "UPDATE utilisateur
SET mdp = '$newmdp',

WHERE id = 'thomas' " ;

//exécution de la requête SQL:
$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;


//affichage des résultats, pour savoir si la modification a marchée:
if($requete)
{
echo("La modification à été correctement effectuée") ;
}
else
{
echo("La modification à échouée") ;
}

?>
LupusMic
le 22/01/2014 à 11:59
LupusMic
1. Fais attention à l'indentation: adopte un style, et essaye de t'y conformer.
2. isset peut prendre plusieurs paramètres, ça simplifie le code, parfois.
3. mysql_real_string_escape est ton ami pour éviter les injections SQL (je penses à $newmdp qui est injecté directement)
4. « La modification à échouée » ne sera jamais affiché, car tu tue le script en cas d'échec de mysql_query.
5. Quand on fait un update, on vérifie aussi le nombre d'enregistrements modifiés, car une requête qui ne modifie rien est une requête qui a pu réussir. mysql_query n'échoue que lorsqu'il y a une erreur (syntaxe, privilèges insuffisants, etc).
6. Es-tu certain que la propriété utilisateur.id contient le nom d'utilisateur ? (ceci brise plusieurs conventions, qui veut qu'un id est toujours un identifiant numérique auto-incrémenté)
7. Code en anglais, pas en français, ça t'évitera des confusions (la différence entre « request » et « requested » ne peut pas se faire avec « requete » et « requete »)
8. As-tu imprimé la requête SQL, et tenté de l'appliquer manuellement ? Car elle contient une erreur de syntaxe (une virgule qui se balade).
9. Où est définie la variable $newmdp ?
10. L'API mysql_ est déconseillée, et sera supprimée prochainement. Tu devrais utiliser un autre module PHP pour le même travail (RTFM, c'est écrit en rouge dans le manuel).

Je réécrit rapidement ton code pour le rendre plus lisible:
<?php

//connection au serveur
$cnx = mysql_connect( "localhost", "root", "" ) ;

//sélection de la base de données:
$db = mysql_select_db( "lyberta" ) ;

//récupération des valeurs des champs:
//mot de passe
if(!isset($_POST['mdp'], $_POST['newmdp'], $_POST['confirmmdp']))
{
// message d'erreur
return;
}

if($_POST['confirmmdp'] != $_POST['newmdp'])
{
// message générique d'erreur
return;
}

$user = 'thomas'; // XXX Pull that from the session, BTW, where're the session checks?

$sql = "UPDATE utilisateur SET mdp = '%s' WHERE id = '%s' " ;
$sql = sprintf($sql
, mysql_real_escape_string($_POST['newmdp'])
, mysql_real_escape_string($user));

//exécution de la requête SQL:
$result = mysql_query($sql, $cnx);

if(false === $result)
{
// Find a better way to manage the error (mysql_error message printing could lead
// to sensitive security info leak
die(mysql_error());
}


if(/* there is no result, see mysql_affected_rows */ )
{
// error message for user
return;
}

echo("La modification à échouée") ;
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours