Update table dans base mysql

morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010 - 29 déc. 2009 à 20:01
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010 - 31 déc. 2009 à 18:28
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

morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
29 déc. 2009 à 20:06
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") ;
  }
?>
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
29 déc. 2009 à 20:47
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 !!!!!
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
30 déc. 2009 à 03:16
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);



______________________________________________________________________
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
30 déc. 2009 à 06:53
Merci, mais non rien ne bouge et je me retrouve avec une erreur supplémentaire, mais merci quand même pour ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_47 Messages postés 197 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 20 février 2013 1
30 déc. 2009 à 09:38
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
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
30 déc. 2009 à 18:10
Merci pour ton aide, je vais essayer sa et je vous tiens informés. Merci beaucoup
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
30 déc. 2009 à 19:21
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.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
30 déc. 2009 à 20:14
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 -
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
30 déc. 2009 à 20:18
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 -
0
cs_47 Messages postés 197 Date d'inscription mardi 20 janvier 2004 Statut Membre Dernière intervention 20 février 2013 1
30 déc. 2009 à 20:37
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
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
30 déc. 2009 à 21:27
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 .....
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
30 déc. 2009 à 21:41
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 -
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
30 déc. 2009 à 21:44
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.") ;
  }
?>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
30 déc. 2009 à 21:49
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 -
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
30 déc. 2009 à 21:53
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 !!!!!!!
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
31 déc. 2009 à 07:38
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.
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
31 déc. 2009 à 09:03
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"); /***** *****/
  }
?>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
31 déc. 2009 à 09:13
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 -
0
morganb12 Messages postés 31 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 6 février 2010
31 déc. 2009 à 10:13
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
31 déc. 2009 à 12:31
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 -
0
Rejoignez-nous