IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Encore un souci avec UPDATE [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut Encore un souci avec UPDATE
    bonjour,
    Comme je l'ai dit j'ai téléchargé Php 5.6 et j'essaie d'adapter mes requêtes faites avec php 5.3 .
    la première chose que je viens de voir sur le site https://www.developpez.net/forums/d1...eparee-update/ c'est qu'il faut éviter les doublons des noms et prénoms. Pour faire cela je demande donc d'ajouter un second prénom si le nom et le prénom existent déjà. Ce qui me semble peu probable pour un comité de jumelage qui compte une centaine de membres. mais bon !!

    Donc la personne qui va insérer les membres ne saisira que le nom, le prénom et la nationalité.
    Ensuite lorsqu'un membre veut se connecter pour la première fois il doit indiquer son nom et son prénom.
    Je vérifie si les nom et prénom sont dans la bdd.
    - Je récupère l'id, le prénom pour la SESSION
    - Si oui j'insère son adresse mail et son mot de passe.
    - Si non je lui demande de recommencer ou de contacter l'administrateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    <?php
    //include('connect.php');
    include('fonctionsphp.php');
    $message = "";
    $message1 = "";
     
    $nom = isset($_POST['nom']) ? $_POST['nom'] : "";
    $prenom = isset($_POST['prenom']) ? $_POST['prenom'] : "";
    $telephone = isset($_POST['telephone']) ? $_POST['telephone'] : "";
    $mailFC = isset($_POST['mailFC']) ? $_POST['mailFC'] : "";
    $mailbis = isset($_POST['mailbis']) ? $_POST['mailbis'] : "";
    $passwordFC = isset($_POST['passwordFC']) ? $_POST['passwordFC'] : "";
    $passwordbis = isset($_POST['passwordbis']) ? $_POST['passwordbis'] : "";
    //vérifie l'adresse mail
    if (!empty($_POST['mailFC'])){
    	$adresse_mail = htmlentities($_POST['mailFC']);
    	if(!VerifierAdresseMail($adresse_mail)){
      		$message = "L'adresse internet n'est pas valide";
    	}
    }
    if (!empty($_POST['mailbis'])){
    	$adresse_mail = htmlentities($_POST['mailbis']);
    	if(!VerifierAdresseMail($adresse_mail)){
      		$message = "L'adresse internet n'est pas valide";
    	}
    }
    if ((!empty($_POST['mailFC'])) && (!empty($_POST['mailbis']))) {
    	if ($mailFC != $mailbis) {
    		$message = "Les adresses mail sont différentes!";
    	}
    }
     
    if ((!empty($_POST['passwordFC'])) && (!empty($_POST['passwordbis']))) {
    	if ($passwordFC != $passwordbis) {
    		$message = "Les mots de passe sont différents!";
    	}
    }
     
    if (isset($_POST['Enregistrer'])){
    	if ($message == ''){
    		// connexion à la ba base de données
    		$cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');
    		$nom = $_POST['nom'];
    		$nom = mb_strtoupper($nom,'UTF-8'); // met toutes les lettres en majuscule
    		$prenom = $_POST['prenom'];
    		$trouve = '-'; 
    		$position = strpos($prenom, $trouve);//donne la position de la lettre suivant $trouve
    		if ($position === false) { // si $trouve n'existe pas 
    			$prenom = ucwords($prenom); // on met une majuscule à tous les noms
    		}
    		else {
    			$split = explode("-", $prenom);
    			$prenom1 = ucfirst($split[0]); 
    			$prenom2 = ucfirst($split[1]); 
    			$prenom = $prenom1."-".$prenom2;
    		}
    		// on cherche le nom et prenom dans la bdd
    		$cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');
    		// teste si les nom et le prénom sont déjà dans la base de données
    		$sql = $cnx->prepare("SELECT * FROM membres WHERE nom = ? AND prenom = ? ");
    		$sql->execute(array($nom, $prenom));
    		$result = $sql->rowCount();
    		if ($result == 1){
    			$user_id = $result['id'];
    			$_SESSION['utilisateur'] = $prenom;
    			$_SESSION['id_utilisateur'] = $result['id'];
    			$pass_hache = password_hash($passwordFC, PASSWORD_DEFAULT);
    			$passwordFC = $pass_hache;
     
    			//enregistre l'adresse mail et le mot de passe 
    			$sql = new PDO("UPDATE membres SET telephone = :$telephone, mail = :$mailFC, password = :$passwordFC WHERE id = :$user_id");
    			$sql->execute(array(
    				'id' => $user_id,
    				'telephone' => $telephone,
    				'mail' => $mailFC,
    				'password' => $passwordFC
    				));
    			$message1 = "Vos données sont bien enregistrés.";
    		}
    		else {
    			$message = "Oups! Nous ne vous avons pas trouvé dans notre base!!<br />
    			Merci de vérifier votre saisie ou contacter l'administrateur";
    		}
     
    	}
    }
     
    ?>
     
     
    <!------------------------------------------- PARTIE HTML---------------------------------->
    <div id="divFirstConnect">
    	<p class="pagereservee"> Espace réservé aux membres du jumelage </p><br />
    	<p class="spanchoix">
    		<a href='index.php?page=passoublie'style='margin-left:3em;' >Mot de passe oublié </a> 
    		<a href='index.php?page=changemail' style='margin-left:2.2em;' >Changer mon adresse mail </a> 
    		<a href='index.php?page=changepassw' style='margin-left:1.8em;' >Changer mon mot de passe </a><br /><br /> 
    	</p>
    	<p class="ptext">En tant que membre du jumelage votre nom et votre prénom ont été enregistrés. 
    	Pour accéder aux pages vous devez saisir votre adresse mail et un mot de passe.</p>
    	<FORM NAME="log" ACTION="index.php?page=firstconnect" METHOD="POST">
    	    <table style="margin: 0 auto;">
    		<tr class="trHeight"><td class="tdAlignRight">Nom &nbsp;</td><td class="tdAlignLeft">&nbsp;<input type="text" value="<?php echo $nom;?>" name="nom" id="nom" ></td></tr>
    		<tr class="trHeight"><td class="tdAlignRight">Prénom &nbsp;</td><td class="tdAlignLeft">&nbsp;<input type="text" value="<?php echo $prenom;?>" name="prenom" id="prenom" ></td></tr>
    		<tr class="trHeight"><td class="tdAlignRight">Téléphone &nbsp;</td><td class="tdAlignLeft">&nbsp;<input type="text" value="<?php echo $telephone;?>" name="telephone" id="telephone" ></td></tr>
    		<tr class="trHeight"><td class="tdAlignRight">Adresse mail &nbsp;</td><td class="tdAlignLeft">&nbsp;<input type="text" value="<?php echo $mailFC;?>" name="mailFC" id="mail1" style="width:17em;"></td></tr>		
    		<tr class="trHeight"><td class="tdAlignRight">Confirmez l'adresse mail &nbsp;</td> <td class="tdAlignLeft">&nbsp;<input type="text" value="<?php echo $mailbis;?>" name="mailbis" id="mail2" style="width:17em;"></td></tr>
    		<tr class="trHeight"><td class="tdAlignRight">Mot de passe &nbsp;</td><td class="tdAlignLeft">&nbsp;<input type="password" value="<?php echo $passwordFC;?>" name="passwordFC" id="password1" ></td></tr>
    		<tr class="trHeight"><td class="tdAlignRight">Confirmez le mot de passe &nbsp;</td><td class="tdAlignLeft">&nbsp;<input type="password" value="<?php echo $passwordbis;?>" name="passwordbis" id="password2" ></td></tr>
    		<tr class="trHeight"><td colspan="2" style="text-align:center";><input type="submit" name="Enregistrer" value="Enregistrer" style="width:7em; cursor:pointer;" /> </td></tr>
    	    </table>
    		<p class="pcommunred"> <?php echo $message;?> </p>
    		<p class="pcommunblue"> <?php echo $message1;?> </p>
     
    	</FORM>
    </div>
    la partie SELECT semble fonctionner car je n'ai pas message d'erreur

    Mais la requête UPDATE me génère ça

    Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in
    C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php:72 Stack trace: #0
    C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php(72): PDO->__construct('UPDATE membres ...') #1
    C:\Weblocal\Sites\Jumelage\index.php(170): include('C:\\Weblocal\\Sit...') #2 {main} thrown in
    C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php on line 72

    en cherchant sur internet il semble que cela provienne du fichier php.ini !!!

    ok le tableau c'est pas très beau mais pour le moment je veux avancer !!

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Salut,

    1-Pourquoi à chaque fois tu crées un nouveau objet PDO ? un seul est largement suffisant.

    Il faut initialiser la variable $cnx dans connect.php, puis tu l'utilises dans le script.

    connect.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');

    Après tu utilises cette variable $cnx dans le script

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    include('connect.php');//dé-commentes cette ligne et utilises l'objet connexion renvoyé par ce fichier.
    $prepared=$cnx->prepare('ta requête insert,update ou delete');
    $prepared->execute(...);

    2-C'est quoi ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = new PDO("UPDATE membres SET telephone = :$telephone, mail = :$mailFC, password = :$passwordFC WHERE id = :$user_id");
    ce serait plutôt :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $prepared=$cnx->prepare("UPDATE membres SET telephone = :telephone, mail = :mailFC, password = :passwordFC WHERE id = :user_id");
    $prepared->execute([":telephone"=>$telephone ,":mailFC"=>$mailFC ,":passwordFC "=>$passwordFC ,":user_id"=>$user_id]);

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu ne t'es jamais de mandé pourquoi de (très) nombreux sites utilises l'email comme identifiant ?


    OK, nom et prénom peuvent suffire, pour un groupe d'une centaine de personnes.
    Mais ton script ne sera plus transposable/utilisable sans risque, dans le cas général (où les chances que 2 personnes aient les même nom/prénom n'est pas négligeable *).

    * cherche "Louis MARTIN" sur Google ou Facebook...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    @Toufik83
    1/ Pour le fichier de connexion.php je dois le refaire
    2/ pour la 2 è création de $cnx new PDO ... c'est une faute d'inattention

    @jreaux62
    Si bien sûr et d'ailleurs dans ma page de connexion classique je demande l'adresse mail et le mot de passe
    La personne qui va renseigner la table des membres ne complète que le nom, le prénom et la nationalité. Au cas (je pense très peux probable) ou le nom et le prénom existent déjà je demande un 2 è prénom. Même avec une centaine de personnes c'est toujours difficile d'obtenir des renseignements !!

    Toutes mes requêtes fonctionnaient en php5.3 mais là je galère et pardon pour le temps que je vous prends !!

    je viens de relire tout et j'ai toujours un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    if (isset($_POST['Enregistrer'])){
    	if ($message == ''){
    		// connexion à la ba base de données
    		$cnx = new PDO('mysql:host=127.0.0.1;dbname=jumelage;charset=utf8', 'root', '');
    		$nom = $_POST['nom'];
    		$nom = mb_strtoupper($nom,'UTF-8'); // met toutes les lettres en majuscule
    		$prenom = $_POST['prenom'];
    		$trouve = '-'; 
    		$position = strpos($prenom, $trouve);//donne la position de la lettre suivant $trouve
    		if ($position === false) { // si $trouve n'existe pas 
    			$prenom = ucwords($prenom); // on met une majuscule à tous les noms
    		}
    		else {
    			$split = explode("-", $prenom);
    			$prenom1 = ucfirst($split[0]); 
    			$prenom2 = ucfirst($split[1]); 
    			$prenom = $prenom1."-".$prenom2;
    		}
    		// on cherche le nom et prenom dans la bdd
     
    		// teste si les nom et le prénom sont déjà dans la base de données
    		$sql = $cnx->prepare("SELECT * FROM membres WHERE nom = ? AND prenom = ? ");
    		$sql->execute(array($nom, $prenom));
    		$result = $sql->rowCount();
    		if ($result == 1){
    			$user_id = $result['id'];
    			$_SESSION['utilisateur'] = $prenom;
    			$_SESSION['id_utilisateur'] = $result['id'];
    			$pass_hache = password_hash($passwordFC, PASSWORD_DEFAULT);
    			$passwordFC = $pass_hache;
     
    			//enregistre l'adresse mail et le mot de passe 
    			$prepared=$cnx->prepare("UPDATE membres SET telephone = :telephone, mail = :mailFC, password = :passwordFC WHERE id = :user_id");
    			$prepared->execute([":telephone"=>$telephone ,":mailFC"=>$mailFC ,":passwordFC "=>$passwordFC ,":user_id"=>$user_id]);
    			$message1 = "Vos données sont bien enregistrées.";
    		}
    		else {
    			$message = "Oups! Nous ne vous avons pas trouvé dans notre base!!<br />
    			Merci de vérifier votre saisie ou contacter l'administrateur";
    		}
     
    	}
    }
    le code erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php on line 73
    Je dois avoir les yeux qui se croisent je ne vois pas l'erreur

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    L'erreur dit que tu essaies d'exécuter une requête avec une variable qui n'a pas été déclarée, vérifies les valeurs de $telephone et $mailFC avec un var_dump()...

    C'est quoi le code qui correspond à la ligne 73 dans firstconnect.php ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ligne 35 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ........,":passwordFC "=>$passwordFC,........
    Un espace en trop.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    le code la ligne 73
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $prepared->execute([":telephone"=>$telephone ,":mailFC"=>$mailFC ,":passwordFC "=>$passwordFC ,":user_id"=>$user_id]);
    j'ai fait un var_dump sur toutes les variables $user_id, $telephone, $mailFC et $password et tout est normal

    quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump($prepared->execute([":telephone"=>$telephone ,":mailFC"=>$mailFC ,":passwordFC "=>$passwordFC ,":user_id"=>$user_id]));
    j'ai ce message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\Weblocal\Sites\Jumelage\fr\connexion\firstconnect.php on line 74
    bool(false)
    ce var_dump() je l'ai placé juste après la requête !!

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Tu as vu ce que jreaux62 t'a suggéré ?

    Supprime l'espace après FC ":passwordFC "

  9. #9
    Membre éprouvé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Par défaut
    désolé je n'étais pas devant mon pc et je n'avais pas vu ce que disait jreaux62.

    tout est ok. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CognosScript] Encore des soucis avec une connexion ODBC
    Par ben_harper dans le forum Cognos
    Réponses: 1
    Dernier message: 23/06/2009, 19h08
  2. Encore un souci avec strpbrk
    Par shazad dans le forum Débuter
    Réponses: 2
    Dernier message: 29/11/2008, 15h48
  3. Encore un souci avec l'arrière-plan Word !
    Par spyto dans le forum Word
    Réponses: 5
    Dernier message: 28/05/2008, 15h24
  4. Souci avec Update
    Par frandis dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/07/2007, 14h13
  5. Encore un soucis avec IServerProvider
    Par r0d dans le forum C++/CLI
    Réponses: 3
    Dernier message: 18/01/2007, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo