Update table dans base mysql

Signaler
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010
-
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010
-
Bonjour à tous.

Je commence à me débrouiller en php et mysql, mais il me reste encore beaucoup de chose à apprendre. J'ai rédigé un ensemble de page html et php pour apprendre les différents langages. Ils ne verront jamais le jour, car le but et simplement d'apprendre pas de les utilisés sur le net. J'en est pas vraiment besoin. Donc voilà une base de donnée pour regrouper les membres, et deux tables membre et login. Une page de présentation du site, et une page de connexion et inscription pour les membres. Jusque là ok ! Le membre vient s'inscrit ou se log sans soucis. Maintenant je voudrais que le membre puisse grâce à un formulaire comme celui d'inscription modifier ses informations mais pas son ID membre pour ne pas tuer la base de donnés. Un petit coup de main !!!!

Voici le détails des différents morceaux :

Base : memberdirectory

CREATE TABLE Member (
loginName varchar(20) NOT NULL,
createDate date NOT NULL,
password char(255) NOT NULL,
lastName varchar(50),
firstName varchar(40),
email varchar(50),
PRIMARY KEY (loginName)
);

CREATE TABLE Login (
loginName varchar(20) NOT NULL,
loginTime datetime NOT NULL,
PRIMARY KEY (loginName,loginTime)
);

Voilà base est table ok !

Maintenant le fichier d'inscription et de log pour les membres et non membre : login.php

22 réponses

Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Attention je vais peut être dire une con.... mais bon si sa peux fonctionner

Je reprends le formulaire d'inscription sauf que le bouton inscrivez-vous devient modifier et donne l'action suivante :

<?php
session_start();

if (@$_SESSION['auth'] != "yes")
{
header("Location: login.php");
exit();
}
  //connection au serveur
  include("page.inc");
$cxn = mysqli_connect($host,$user,$password,$database)
       or die ("Connexion en échec.");
 
  //récupération des valeurs des champs:
  //nom:
  $lastName = $_POST["lastName"] ;
  //prenom:
  $firstName = $_POST["firstName"] ;
  //password:
  $password = $_POST["password"] ;
  //email:
  $email = $_POST["email"] ;
  //récupération de l'identifiant de la personne:
  $loginName = $_POST["loginName"] ;
  
  //création de la requête SQL:
  $sql ="UPDATE memberdirectory SET firstName= '$firstName',lastName= '$lastName',email= '$email',password= '$password', FROM member
             WHERE loginName='{$_SESSION['logname']}'";
  
  //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") ;
  }
?>
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

J'ai essayer sa et il me donne comme erreur :

Warning: mysql_query() expects parameter 2 to be resource, array given in C:\Wamp\www\dossier\racine\modification.php on line 15
La modification à échouée

Voici le code de modification.php que j'ai essayer de modifier et de travailler mais toujours impossible de trouver la solution.

<?php
session_start();

$loginName = $_POST["loginName"] ;
$password = $_POST["password"] ;
$firstName = $_POST["firstName"] ;
$lastName = $_POST["lastName"] ;
$email = $_POST["email"] ;

  //création de la requête SQL:
  $sql ="UPDATE member SET firstName= '$firstName',lastName= '$lastName',email= '$email',password= '$password', FROM member
             WHERE loginName='$loginName'";
  
  //exécution de la requête SQL:
  $resultat = mysql_query($sql, $_POST);

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


A force de travail je vais réussir !!!!!
Messages postés
392
Date d'inscription
mercredi 28 octobre 2009
Statut
Membre
Dernière intervention
23 mars 2012
47
Salut,

Bon j'ai pas lu ton code mais juste survoler les lignes:

En gros pour l'erreur, vire le deuxième paramètre car ce n'est pas une resource de type mysql soit:
<?php
$resultat = mysql_query($sql);
?>

et non,
$resultat = mysql_query($sql, $_POST);



______________________________________________________________________
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Merci, mais non rien ne bouge et je me retrouve avec une erreur supplémentaire, mais merci quand même pour ton aide.
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
1
Bonjour,

à la place de :
$sql ="UPDATE member SET firstName= '$firstName',lastName='$lastName',email= '$email',password= '$password', FROM member WHERE loginName='$loginName'";


remplace par :
$sql ="UPDATE member SET firstName= '$firstName',lastName='$lastName',email= '$email',password= '$password' WHERE loginName='$loginName'";


pas de from dans un update, le nom de la table est déjà donné aprés l'instruction update, update <<table>> set <<valeur à changer>> (where condition optionnelle)

bonne journée
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Merci pour ton aide, je vais essayer sa et je vous tiens informés. Merci beaucoup
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Non toujours rien je me retrouve avec cette erreur !

Warning: mysql_query() expects parameter 2 to be resource, array given in C:\Wamp\www\dossier\modification.php on line 14
La modification à échouée.
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Je n'ai que parcouru, mais :
Warning: mysql_query() expects parameter 2 to be resource, array given in C:\Wamp\www\dossier\modification.php on line 14

=> la fonction mysql_query attend une ressource en second paramètre alors qu'un array a été donné dans ...

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

On remonte donc pour trouver :
$cxn = mysqli_connect($host,$user,$password,$database)
or die ("Connexion en échec.");

Il y a comme un pb, non ?


Cordialement,


Kohntark -
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Oups, je n'avais pas fait gaffe :
C'est normal le $cnx et $cxn ?

Si c'est le cas où, et comment est défini $cnx ?



Kohntark -
Messages postés
197
Date d'inscription
mardi 20 janvier 2004
Statut
Membre
Dernière intervention
20 février 2013
1
re,

si c'est défini par $cnx = mysqli_connect($host, $user, $password, $database);

ca doit être mysqli_query et non mysql_query pour executer la requete

bonne soirée
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Alors voilà, tout fonctionne trés bien, les modifications sont prisent en compte. Merci à tous pour votre aide. Mais j'ai remarqué un detail. Lors de l'inscription d'un membre, le mot de passe dans la table et codé. On ne peut pas le lire directement (md5) mais lorsque le membre effectue une modification sur son compte le mot de passe devient simple et non codé dans la base. Pourquoi la sécurité n'existe plus ?????


Merci à tous .....
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
ca doit être mysqli_query et non mysql_query pour executer la requete

c'est bien ce que je disais non ?

si c'est défini par $cnx = mysqli_connect($host, $user, $password, $database);


Euh, non, $cnx n'est défini nul part, c'est $cxn qui est défini, ... d'où ma question.

Cordialement,


Kohntark -
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Voici le code qui fonctionne au final :

<?php
session_start();

  //connection au serveur
  include("page.inc");
  $cxn = mysqli_connect($host,$user,$password,$database)
or die ("Connexion en échec.");


$loginName = $_POST["loginName"] ;
$password = $_POST["password"] ;
$firstName = $_POST["firstName"] ;
$lastName = $_POST["lastName"] ;
$email = $_POST["email"] ;

  //création de la requête SQL:
  $sql ="UPDATE member SET firstName= '$firstName',lastName='$lastName',email= '$email',password= '$password' WHERE loginName='$loginName'";
  
  //exécution de la requête SQL:
  $resultat = mysqli_query($cxn,$sql);

  //affichage des résultats, pour savoir si la modification a marchée:
  if($resultat)
  {
    header("Location: membre_page.php"); /***** *****/
  }
  else
  {
    echo("La modification à échouée.") ;
  }
?>
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Pourquoi la sécurité n'existe plus ?????

=> vraisemblablement parce que tu n'"encodes" pas en MD5 avant de faire l'update (ou mieux, directement dans la requête avec la fonction mySql MD5())

Je n'ai que parcouru le script mais il semble qu'il y ait de graves pb de sécurité au niveau des requêtes. Tu devrais jeter un oeil sur la fonction mysql_real_escape_string et mysql_real_escape_string.

Cordialement,


Kohntark -
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Merci pour ton aide, pour le moment tout fonctionne tres bien, le membre s'inscrit et les redirections sont bonnes, il peut modifier ses infos si il a besoin mais je debut à peine ce sont mes premières lignes de code, je ne connais pas vraiment bien. juste la base. donc la securité de se script est nul elle n'existe pas. Je suis là pour apprendre. Je pense que si quelqu'un entre du code php dans mon formulaire, je vais avoir de gros soucis !!!!!!!
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Bien j'ai modifier quelques petites choses pour rendre le tout plus fluide . Lorsque le membre accède à son compte sur la page compte.php, il tombe sur le haute de page avec ses infos qui s'affiche et le bas de page, est un formulaire avec les champs remplient des infos de l'utilisateur. Si il veut les modifier il change se qu'il y a inscrit sinon il laisse les infos. Le probleme est que le formulaire n'affiche pas le mot de passe meme crypter et lorsque l'utilisateur le modifier il ressort dans la base de donné non codé. Je n'arrive plus à le faire codé un seconde fois, et impossible aussi de le faire afficher dans le champs du formulaire.
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Ok j'avance mais il y à encore des erreurs que je ne trouve pas. L'utilisateur peux modifier sont mot de passe que j'ai réussi à codé de nouveau dans la base, j'ai rajouter une valeur dans la table avec la date de modification du profil, mais maintenant l'utilisateur ne peut plus modifier le reste des ses infos, les modifications ne sont pas prisent en compte à cause du md5 du mote de passe.


Merci à tous pour votre aide et un peu de votre temps de geek !!!

Voici le code du fichier modification.php

<?php
session_start();

  //connection au serveur
  include("page.inc");
  $cxn = mysqli_connect($host,$user,$password,$database)
or die ("Connexion en échec.");
  $sql = "SELECT loginName FROM member
           WHERE loginName='$_POST[fusername]'";
  $result = mysqli_query($cxn,$sql)
             or die("Requête en échec 1.");

$loginName = $_POST["loginName"] ;
$password = $_POST["password"] ;
$firstName = $_POST["firstName"] ;
$lastName = $_POST["lastName"] ;
$email = $_POST["email"] ;

  //création de la requête SQL:
  $sql ="UPDATE member SET firstName= '$firstName',lastName='$lastName',email= '$email',password= '$password' WHERE loginName='$loginName'";
  
  //date de modification:
  $modification = date("Y-m-d h:i:s");
  $sql = "UPDATE member SET modification= '$modification' WHERE loginName='$loginName'";
 
  //modification password:
  $sql = "UPDATE member SET password=md5('$_POST[password]') WHERE loginName='$loginName'";
  
  //exécution de la requête SQL:
  $resultat = mysqli_query($cxn,$sql);
  
  //recherche de champs vides:
   foreach($_POST as $field => $value)
   {
      if ($field != "password")
  {
     if ($value == "")
 {
    $blanks[] = $field;
 }
  }
}
if(isset($blanks))
{
   $message_new = "Champs non saisis. Veuillez les renseigner.";
   foreach($blanks as $value)
   extract($_POST);
   include("login_form.inc");
   exit();
}

  //affichage des résultats, pour savoir si la modification a marchée:
  if($resultat)
  {
    header("Location: membre_page.php"); /***** *****/
  }
  else
  {
    header("Location: compte.php"); /***** *****/
  }
?>
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Je pense que si quelqu'un entre du code php dans mon formulaire, je vais avoir de gros soucis !!!!!!!

Tout à fait, d'où ma suggestion que tu utilises mysqli_real_escape_string() :
Tu devrais jeter un oeil sur la fonction mysql_real_escape_string et mysql_real_escape_string.


T'es tu renseigné sur ces fonctions ??
Quel en est le code résultant ?
Quels problèmes rencontres tu avec ?

Le probleme est que le formulaire n'affiche pas le mot de passe meme crypter

Je ne suis pas sur de comprendre, tu veux afficher le mot de passe dans le formulaire ?
Quel intérêt ?
Que tu ré affiches le nom, pseudo, etc ... pour modification est logique, mais pas le mot de passe. Il doit rester haché md5 dans la DB et ne plus en sortir.
S'il doit y avoir modification c'est un champ type password vide que l'on propose à l'utilisateur. Il entre un nouveau mot de passe > submit() > remplacement du pass existant dans la DB en passant pas MD5.

Je n'arrive plus à le faire codé un seconde fois

Comme je le disais dans mon précédent message il suffit d'utiliser la fonction MD5, comme tu l'as fait dans tes autres requêtes, dans l'update.
Où est le soucis ??


Kohntark -
Messages postés
31
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
6 février 2010

Kohntark - Merci pour ton aide. En effet j'ai suivis tes conseils pour le codage md5 et pour ce qui est d'afficher le mot de passe. J'ai donc modifier ma page modification.php pour que le membre puisse modifier son passe mais sans qu'il ne soit écrit sur la page. Pour ce qui est de la fonction mysql_real_escape_string, comme je dis, le php est nouveau pour moi je découvre petit à petit. Une bonne partie du script que j'ai écrit est issue d'un livre sur le php, mais plus de la moitier vient de moi et des conseils que j'ai pu lire sur le net.

Aujourd'hui le seul soucis que j'ai en dehors de l'apprentissage, est que mon fichier modification.php offre à l'utilisateur de modifier son passe, son non, prénon et email. Mais seul le changement du passe fonctionne, le script ne tiens pas compte des autres changements et je ne comprends pas !

J'ai poster ma source juste au dessus .....

Merci. Ps je suis à montréal donc il y a six heures de moin que vous, d'ou les heures de post un peu space en plein milieu de la nuit
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Désolé, je n'avais pas vu ton post de 9:03 avant de poster le mien.

C'est un peu fouillis tout ça, et j'ai peur moi même de ne plus bien comprendre (en plus j'ai eu la flemme de relire les codes précédents, mais faut pas l'dire)

Quelques remarques :
<?php
// quand tu rencontres des problèmes n'oublies pas d'activer les erreurs
// (qui ne le sont peut être pas par défaut) avec ces lignes :

ini_set('display_errors', 1);
error_reporting(-1);


session_start();

//connection au serveur
include("page.inc");
$cxn = mysqli_connect($host,$user,$password,$database) or die ("Connexion en échec.");

// a quoi cette requête sert elle ?? $result n'est utilisé nul part dans le fichier
$sql = "SELECT loginName FROM member WHERE loginName='$_POST[fusername]'";
$result = mysqli_query($cxn,$sql) or die("Requête en échec 1.");

/*
 * il est impératif de traiter les données provenant de l'utilisateur comme je te l'ai
 * préalablement indiqué
 * => mysqli_real_escape_string()
 * en plus des exemples de la doc le voici appliqué à la prochaine ligne (à effectuer pour toutes les données POST
 * 
 * Il faut aussi contrôler qu'elles ont été postées et ne sont pas vides : voir isset() et empty()
 * 
 * Afin de contrôler le contenu des variables du formulaire tu pourrais faire un :
 * print_r($_POST);
 * 
 */
$loginName = mysqli_real_escape_string($cxn, $_POST["loginName"]);
$password = $_POST["password"] ;
$firstName = $_POST["firstName"] ;
$lastName = $_POST["lastName"] ;
$email = $_POST["email"] ;

/*
 * Cette requête ne sera jamais exécutée puisqu'elle est redéfinie juste après
 */
//création de la requête SQL:
$sql ="UPDATE member SET firstName= '$firstName',lastName='$lastName',email= '$email',password= '$password' WHERE loginName='$loginName'";

//date de modification:
$modification = date("Y-m-d h:i:s");
/*
 * ici tu redéfinie la variable $sql précédente sans avoir exécuté cette dernière
 */
$sql = "UPDATE member SET modification= '$modification' WHERE loginName='$loginName'";

/*
 * ici tu redéfinie la variable $sql précédente sans avoir exécuté cette dernière
 */
//modification password:
$sql = "UPDATE member SET password=md5('$_POST[password]') WHERE loginName='$loginName'";

//exécution de la requête SQL:
$resultat = mysqli_query($cxn,$sql); // tu n'exécutes que la dernière requête $sql ci dessus


/*
 * ce code n'a pas sa place ici et il ne sert à rien
 */
//recherche de champs vides:
foreach($_POST as $field => $value) {
    if ($field != "password") {
        if ($value == "") {
            $blanks[] = $field;
        }
    }
}
if(isset($blanks)) {
    $message_new = "Champs non saisis. Veuillez les renseigner.";
    foreach($blanks as $value)
        extract($_POST);
    include("login_form.inc");
    exit();
}
/*////////*/



//affichage des résultats, pour savoir si la modification a marchée:
if($resultat) {
    header("Location: membre_page.php"); /***** *****/
}
else {
    header("Location: compte.php"); /***** *****/
}
?>


Il y a certainement des parties de code que tu utilises mais que tu ne comprends pas.
Il faut savoir quelques fois prendre son temps pour lire la doc, pour faire des tests à l'aide de scripts simples, pour suivre des tutos, plutôt que de vouloir aller vite pour obtenir au final un script bancal.
Par exemple, lorsque je t'incite à utiliser mysqli_real_escape_string(), la bonne démarche n'est pas de dire "je suis débutant", mais celle de s'attarder sur la doc, de lire et comprendre les exemples qui y sont donnés, de poser les éventuelles interrogations ici, de faire des recherches, mais en aucun cas de recopier sans en avoir saisi le sens.


Cordialement,



Kohntark -