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 :

Requête préparée UPDATE


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut Requête préparée UPDATE
    Bonsoir,
    Toujours en phase d'apprentissage j'ai suivant un tuto réalisé une requête (INSERT INTO) avec ce code qui fonctionne parfaitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $requete = $connexion->prepare("INSERT INTO visdom(nom_cl,prenom_cl,localisation,typelog,statut,acces_1,acces_2,acces_3,acces_4) 
    VALUES (:nom_cl, :prenom_cl, :localisation, :typelog, :statut, :acces_1, :acces_2, :acces_3, :acces_4)");
    Pour maintenant faire une requête (UPDATE) j'ai gardé exactement le mème code en changeant seulement la requête préparée ce qui me paraissait pour ma part pertinent comme modification cela dit ça ne fonctionne pas hélas, pouvez vous me dire ce que j'ai mal fait svp ?

    Merci à vous.

    Mon script pour une requête UPDATE:
    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
     
    <?php>
     
    $serveur 	= "sql.free.fr";
    $login 		= "login";
    $pass 		= "mdp";
     
    $nom_cl   		= $_POST['nom_cl'];
    $prenom_cl   	    = $_POST['prenom_cl'];
    $localisation       = $_POST['localisation'];
    $typelog   		= $_POST['typelog'];
    $statut   		= $_POST['statut'];
    $acces_1  		= $_POST['acces_1'];
    $acces_2   		= $_POST['acces_2'];
    $acces_3   		= $_POST['acces_3'];
    $acces_4   		= $_POST['acces_4'];
     
     
    	try
     
    	{
    	$connexion = new PDO("mysql:host=$serveur;dbname=visdom;charset=UTF8", $login, $pass);
    	$connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
     
    	$requete = $connexion->prepare("UPDATE visdom SET (nom_cl,prenom_cl,localisation,typelog,statut,acces_1,acces_2,acces_3,acces_4) 
    						VALUES (:nom_cl,:prenom_cl,:localisation,:typelog,:statut,:acces_1,:acces_2,:acces_3,:acces_4)
    						WHERE nom_cl=':nom_cl' AND prenom_cl= ':prenom_cl");
     
    	$requete->bindParam(":nom_cl", $nom_cl);
    	$requete->bindParam(":prenom_cl", $prenom_cl);
    	$requete->bindParam(":localisation", $localisation);
    	$requete->bindParam(":typelog", $typelog);
    	$requete->bindParam(":statut", $statut);
    	$requete->bindParam(":acces_1", $acces_1);
    	$requete->bindParam(":acces_2", $acces_2);
    	$requete->bindParam(":acces_3", $acces_3);
    	$requete->bindParam(":acces_4", $acces_4);
     
     
    	$requete->execute();
     
    	}
     
    catch(PDOException $e)
    {
     
    echo 'Echec de la connexion : ' .$e->getMessage();
     
    }
     
     
    ?>

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    La syntaxe d'une requête update est:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Update nom_table set nom_colonne1='sd', nom_colonne2='sd' where id_table= 1234;
    Si tu n'utilises pas la clause where, la requête va mettre à jour toute la table avec les mêmes valeurs, soit aucune mise à jour n'est faite si sql_safe_updates est activé.

    A+.

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

    1-


    2- Pour mettre à jour un enregistrement, on utilise son id (auto-incrémenté, donc UNIQUE) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="id" value="<?php echo $id; ?>" />
    .
    on le récupère ensuite :
    Ensuite :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = "UPDATE nom_table SET 
       colonne1 = :colonne1, 
       colonne2 = :colonne2,
    ...
       colonnex = :colonnex,
       WHERE id = :id";
    N.B. Par convention, on met :
    • les instructions SQL en majuscules (SELECT, UPDATE, WHERE,.....)
    • les noms de tables et colonnes en minuscules

    C'est plus lisible.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut
    Bonsoir,
    Merci pour vos répopnses, j'ai corrigé et établi mon code de cette façon et ça à l'air d'être correct.

    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
    <?php>
     
    $serveur 	= "sql.free.fr";
    $login 		= "mon_login";
    $pass 		= "mon_mdp";
     
    $nom_cl   		= $_POST['nom_cl'];
    $prenom_cl   	= $_POST['prenom_cl'];
    $localisation   = $_POST['localisation'];
    $typelog   		= $_POST['typelog'];
    $statut   		= $_POST['statut'];
    $acces_1  		= $_POST['acces_1'];
    $acces_2   		= $_POST['acces_2'];
    $acces_3   		= $_POST['acces_3'];
    $acces_4   		= $_POST['acces_4'];
     
     
    try
     
    {
            $bdd = new PDO('mysql:host=localhost;dbname=visdom;charset=utf8', $login, $pass);
            $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    }
     
    catch(Exception $e)
     
    {
            die('Erreur : '.$e->getMessage());
    }
     
    $req = $bdd->prepare('UPDATE visdom SET nom_cl = :nom_cl, prenom_cl = :prenom_cl, localisation = :localisation, typelog = :typelog, statut = :statut, acces_1 = :acces_1, acces_2 = :acces_2, acces_3 = :acces_3, acces_4 = :acces_4  WHERE nom_cl = :nom_cl  AND prenom_cl = :prenom_cl');
     
     
     
        $req->bindValue('nom_cl',$_POST['nom_cl']);
        $req->bindValue('prenom_cl',$_POST['prenom_cl']);
        $req->bindValue('localisation',$_POST['localisation']);
    	$req->bindValue('typelog',$_POST['typelog']);
    	$req->bindValue('statut',$_POST['statut']);
    	$req->bindValue('acces_1',$_POST['acces_1']);
    	$req->bindValue('acces_2',$_POST['acces_2']);
    	$req->bindValue('acces_3',$_POST['acces_3']);
    	$req->bindValue('acces_4',$_POST['acces_4']);
     
     
    if (!$req->execute()) 
     
    {
        echo 'Erreur';
    } 
     
    else 
     
    {
    	echo "connexion_bdd=1";
    }
     
    ?>

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu n'as pas tenu compte de mes conseils.

    Si la personne modifie/corrige son nom ou prénom, ton code ne fonctionnera pas.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut
    Dans le principe l'utilisateur ne modifira pas le nom et premon car il s'agit de son fichier client en quelque sorte, de l'application il entre le nom et prénom de son client et charge les données de celui-ci, il modifie certaines de ses données et termine avec un update.

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Tu dois utiliser la clause where dans ton update sinon ça va modifier toute la table si sql_safe_updates n'est pas activé, si sql_safe_updates est activé, t'auras un erreur.

    A+.

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut
    Bonsoir andry.aime,

    La clause WHERE est en bout de ligne de ma requête tu à dû la rater vu sa longueur, peut-tu me dire si mon script tient la route ?

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Citation Envoyé par cortoh Voir le message
    La clause WHERE est en bout de ligne de ma requête tu à dû la rater vu sa longueur,
    Effectivement, je ne l'ai pas vu.
    Citation Envoyé par cortoh Voir le message
    peut-tu me dire si mon script tient la route ?
    Tu dois utiliser l'id de la table mais pas le nom et prénom pour la clause where.

    A+.

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut
    Citation Envoyé par andry.aime Voir le message

    Tu dois utiliser l'id de la table mais pas le nom et prénom pour la clause where.

    A+.
    Impossible l'utilisateur connait essentiellement le nom et prenom de son client ou de ses clients, il n'a aucune idée de l'id même de son existance, il possède seulement une appli dans les mains sans savoir ce qu'il ce passe derrière l'orsqu'il enregistre un client, son nom, prénom, age, adresse, etc..., il les retrouves plus tard en entrant le nom et prénom du client recherché.

  11. #11
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Tu ne stockes rien d'autre que nom et prénom comme identifiants ????
    Tu sais qu'il y a des tas de gens (probablement plus d'1 million) qui sont homonymes en France ?
    Tape ton nom et ton prénom sur Google, et tu seras peut etre surpris.
    Tu ne retiens pas la commune de naissance et le jour de naissance ?
    Tout cela est sur une carte d'identité que ton utilisateur doit demander à ton client, enfin si c'est le client d'une banque...
    Si c'est le client... d'un garage par exemple, tu peux rendre ton client unique en stockant
    id (autoincrement) + nom + prenom + inscription (datetime)

    que se passera-t-il quand ton utilisateur saisira MARTIN Jean et qu'il y aura 2 utilisateurs ?
    Et bien ton utilisateur en sera informé et pourra choisir... et cela enverra l'info par l'id, le seul identifiant UNIQUE...

    autre chose que tu n'as pas compris, la balise ouvrante PHP est la suivante :

    <?php

    et pas ce que tu as fait.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  12. #12
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Tu ne stockes rien d'autre que nom et prénom comme identifiants ????
    Non il y aura surement un critère supplémentaire mais pour le moment c'est juste une maquette cela dit ma table contient un id (autoincrement) comme c'est recommendé de le faire mais à quoi il sert par t-il dans cet exemple: si tu as une liste de 100 vidéos dans ta table et que tu recherche une vidéo particulière tu n'as pas mémorisé son id dans ta tête donc tu prends d'autres critères de sélections.

    Citation Envoyé par Dendrite Voir le message
    autre chose que tu n'as pas compris, la balise ouvrante PHP est la suivante :

    <?php

    et pas ce que tu as fait.
    Oui effectivement je n'avais pas vu cette erreur de frappe cela dit le script fonctionne malgrès tout ???

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Par défaut
    Tu peu faire des recherche d'information dans ta table en te basant sur un nom est un prénom, cela est courant est logique.

    MAIS, quand tu met à jours des informations d'une ligne dans une base de donnée comme tu le présente la, il est EST IMPÉRATIF, de te baser sur l'ID de la ligne en question.

  14. #14
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    L'identifiant auto-incrémenté sert à identifier de manière unique la ligne en base de données.

    Si on considère une liste de personnes, tu vas faire une recherche sur le nom et le prénom, ça va te renvoyer mettons 4 Jean Martin.
    Tu vas sélectionner le "Jean Martin" qui t'intéresse, qui se trouve avoir l'id 42666. A partir de ce moment, ton code doit travailler sur "Personne 42666" et non plus sur "Jean Martin", sinon tu risques de modifier le mauvais "Jean Martin" (ou tous )
    C'est le même principe que les codes barres sur les livres dans une bibliothèque : chaque livre a un numéro unique, ce qui permet de différencier entre les différents exemplaires d'un même ouvrage.

    [Mode HS]
    Pour information, il existe ce qu'on appelle des homonymes parfaits : même nom de famille, même prénom, même date et lieu de naissance. C'est rare, mais je me souviens d'avoir lu un article il y a quelques années sur une personne qui était dans ce cas (et pas mal en galère, parce que son homonyme était interdit bancaire et autres joyeusetés) et tous les problèmes dus à la non-gestion du cas.

    Et imaginez dans un pays comme l'Islande où le nom de famille est littéralement "Fils de Machin" ou "Fille de Machin"...

    En plus simple, j'ai entendu parler d'un système dans une école où l'identifiant était basé sur nom de famille + date de naissance. Dans ce cas, pas la peine d'aller chercher des coïncidences de nom, il suffit d'avoir des jumeaux
    [/Mode HS]
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Par défaut
    Bonjour,

    Ok, je réalise en fait que ce qu'il manque à mon appli c'est au cas ou il y aurait des homonymes, ce serait d'afficher une liste de ces homonymes pour en selectionner un et donc avoir ainsi son id pour bien le diffèrencier des autres et pour d'éventuelles modifications sql.

  16. #16
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Et pour que ton utilisateur puisse distinguer le Jean Martin qui l'intéresse parmi les 4, il faut que tu ajoutes ???
    La sécu fait ceci, qui rend les 10 premiers chiffres du numéro de sécu unique :

    sexe + naissance_annee + naissance_mois + naissance_commune_code + naissance_nombre (traduire numéro de naissance ce mois là de cette année là dans cette commune là, forcément unique)...

    Si naissance à l'étranger

    sexe + naissance_annee + naissance_mois + 99 + naissance_pays_code + naissance_nombre (traduire numéro d'arrivée en france ce mois-là de cette année là en provenance de ce pays là, forcément unique)...

    Seul problème ? le changement de sexe...
    S'ils devaient remodéliser aujourd'hui, ils laisseraient tomber cette première donnée... Le reste n'est pas censé bouger, et si tu viens d'un pays où tu ne connais pas ta date de naissance (ça existe bien sûr), ils mettent le 01/01... et une année probable. Ce qui te donne une "traçabilité" à partir de là mais pas antérieure.

    Ce n'est pas pour rien que les services de paie utilisent le numéro de sécu pour payer les gens sans se tromper...
    Mais bien sûr, la plupart des autres n'ont aucun droit de s'en servir. trop sensible.

    https://www.msa.fr/lfy/pratique/votr...curite-sociale

    Pour conclure, sur ta maquette, qui doit justement tout prévoir (c'est maintenant que tu dois tout prévoir et rester souple, pas plus tard, en production)... tu peux te contenter de MARTIN JEAN naissance_date et date_time d'inscription (pour différencier 2 frères jumeaux à la seconde près)...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

    Il faudrait quand même des parents vicieux pour donner le même prénom à leurs jumeaux...

    ...ou on peut imaginer qu'ils ont une fille et un garçon, qu'ils appellent... Dominique !

    (Et on ne parle pas des triplés, ou plus !)

  18. #18
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2016
    Messages : 32
    Par défaut
    salut je vois que ça tourne en rond et qu'on t'aide pas toi donc renseigne toi sur les sessions, le mec va se co sur ton site avec son id session pseudo session etc, toi dans ta requête tu recherchas juste l'id (qui est unique) de la session en cours, cordialement, stef

Discussions similaires

  1. [PHP 5.6] Requêtes préparées INSERT INTO ou UPDATE et variable
    Par modus57 dans le forum Langage
    Réponses: 7
    Dernier message: 27/03/2018, 12h14
  2. Requête préparée et UPDATE
    Par redoran dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/04/2012, 16h19
  3. pb requête delete/update avec opérateur like, connexion ADO
    Par jerome666 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/02/2006, 16h47
  4. Access - Requête SQL - UPDATE
    Par tchoo83 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 19/12/2005, 15h48
  5. Réponses: 4
    Dernier message: 05/04/2005, 18h28

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