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 :

[SQL] insert into sql session


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 135
    Points
    135
    Par défaut [SQL] insert into sql session
    Bonjour à tous

    je suis en train de faire un ch'ti site , sécurisé par un password, donc,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    //début de la session
    session_start() ;
    //enregistrement d'une variable de session, ici le login de l'utilisateur
    $_SESSION["login"] = $login ;
    les utilisateurs peuvent faire differentes commandes, jusque là tout va bien, mais c'est lors de la finalisation de la commande que tout se corse...
    En effet, quand l'utilisateur entre ses coordonnées, les données rentrées remplacent toutes les données des utilisateurs précedents.
    Je n'arrive pas a trouver l'astuce pour limiter les entrées qui ne concernent que les utilisateurs en question.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if( isset($_SESSION['login']))
    {
     $sql= "UPDATE crea_tbl SET nom='$nom',prenom='$prenom',adresse='$adresse',cp='$cp',ville='$ville',tel='$tel',email='$mail' 
     WHERE qte>=1  " ;
     
     $req=mysql_query($sql)or exit ('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
      }
    voilà ce que j'ai mis et bien sur ca ne fonctionne pas, à ce stade l'utilisateur a déja choisi des articles.....je me perd totalement entre les commande "FOREACH" "WHILE"
    Si vous pouvez me donner deja un début de piste, ca serait super sympa
    Merci a vous
    Cordialement

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 194
    Points : 216
    Points
    216
    Par défaut
    Citation Envoyé par bernard26000 Voir le message
    Je n'arrive pas a trouver l'astuce pour limiter les entrées qui ne concernent que les utilisateurs en question.
    en utilisant une condition WHERE... et en indiquant la ou les données dans la base qui permettent d'identifier l'utilisateur? (au niveau sql c'est la traduction de ta phrase si tu sais exprimer précisément en français ce que tu veux et comment faire pour l'obtenir la traduction en sql ne pose pas de problème)

    sans condition where précise tu updates toute ta table....

    après ça dépend de comment tu as organisé ta table pour répérer l'utilisateur... (avec un champ qui prend de faire le lien...)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 135
    Points
    135
    Par défaut
    Merci Léortien

    En fait j'ai une table qui contient les variables utilisateurs, et une autre table qui contient les commandes de l'utilisateur..... mais je n'ai pas de relation de l'une a l'autre
    est ce que je devrai mettre qq chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE $_SESSION["login"] = $login
    merci encore a toi
    cordialement

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 194
    Points : 216
    Points
    216
    Par défaut
    si tu as un champ login dans ta table 'crea_tbl' ce serait mieux à mon avis
    et ce serait plus un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE login=$login
    ou 
    WHERE login=$_SESSION['login']
    et en faisant gaffe si il y a besoin de quotes autour des variables (en fonction de leur type)
    ex : $sql="......... WHERE login='".$_SESSION['login']."'...........";

    mais si comme tu dis il n'y a vraiment aucune relation entre les tables il faudra en rajouter une pour pouvoir faire le lien (du genre login comme tu le suggères)
    (sur tu regardes des petits trucs sur les bdd tu verras une histoire de clef externe)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Déjà le plus astucieux il me semble serait de créer une table de clients et une table de commandes.

    Quand un client finalise sa commande, tu vérifies si il existe déjà en comparant certains champs (prénom, nom, ville) en faisant attention à ne pas être sensible à la casse et aux accents.

    Si le client n'existe pas tu créé un nouvel enregistrement.
    Si le client existe tu récupère l'id.

    Après tu insère la commande dans ta table de commandes ou tu a un champ idx_client qui contient l'id du client.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO table (champ1, champ2, ..., idx_client) VALUES ('bla', 'blabla', ..., $idxClient)
    $idxClient qui est l'id que tu a récupéré lors de la création du client ou celui que tu a récupéré si le client existe déjà.

    Après si tu veux modifier une commande tu recupére l'id de la commande et après tu fais un UPDATE avec WHERE id_commande=$idCommande.

    Si tu veux afficher toutes les commandes d'un client, tu recupères tes clients et pour chaque client tu fais SELECT xxx FROM t_commandes WHERE idx_client=$idClient.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 135
    Points
    135
    Par défaut
    Merci a vous

    Je me sens deja moins seul....

    $idxClient qui est l'id que tu a récupéré lors de la création du client ou celui que tu a récupéré si le client existe déjà.
    ce qui veut dire que je dois identifier $idxclient de la maniere suivante?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $idxclient = $_SESSION['login'];
    et l'inserer dans la base de commande a mesure qu'il ajoute des produits?

    Cordialement

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Citation Envoyé par bernard26000 Voir le message
    Merci a vous


    ce qui veut dire que je dois identifier $idxclient de la maniere suivante?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $idxclient = $_SESSION['login'];
    et l'inserer dans la base de commande a mesure qu'il ajoute des produits?
    Tout dépend de ce que contient $_SESSION['login'].

    Je ne sais pas quelles sont tes connaissances en bases de données, mais sache qu'on ne peut avoir deux enregistrements identiques. C'est pour cela qu'on utilise un identifiant (id). Le plus simple est de prendre un int en auto incrément, comme ca il est vraiment unique.

    Ensuite, si j'ai bien compris, l'utilisateur peut s'authentifier ? Dans ce cas, au moment de l'identification, tu récupères ses informations, dont l'id, et les places dans des variables de session par exemple.

    Si l'utilisateur n'existe pas dans la base il faut qu'il se créé un compte. (j'imagine, je ne connais pas le contexte de l'outil)

    Une des variables de session vas contenir l'id et c'est celle-ci que tu dois utiliser pour indiquer à chaque commande à quel client elle appartient.

    Donc si tu place l'id dans $_SESSION['login'], alors ca te donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $intIdClient = $_SESSION['login'];
    $strRequete = "INSERT INTO t_commandes (champ1, champ2, ..., idx_client) VALUES ('bla', 'blabla', ..., $intIdClient)"
    // Note : on pourrait mettre directement $_SESSION['login'] dans la requête mais faut faire de la concaténation
    et l'inserer dans la base de commande a mesure qu'il ajoute des produits?
    A voir, soit tu ajoutes ses commandes à des variables de session et une fois qu'il a terminé il doit tout valider pour que ca ajoute à la BDD.
    - Rapidité d'exécution
    - Le client comprend peut être pas qu'il doit tout valider

    Soit tu ajoutes au fur et a mesure dans la BDD.
    - Peut-être plus facile à manipuler et plus sûr
    - Assez lourd

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 135
    Points
    135
    Par défaut
    ca avance....

    pour recapituler, voici mes modifications
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $intIdClient = $_SESSION['login'];
    j'ai bien créé ce champ dans la base de commande(crea_tbl) et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $sql= "UPDATE crea_tbl SET nom='$nom',prenom='$prenom',adresse='$adresse',cp='$cp',ville='$ville',tel='$tel',email='$mail' 
     WHERE id_client='".$intIdClient."' " ;
    a savoir qu'au debut, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION["login"] = $login ;
    contient bien le login de l'utilisateur qu'il inscrit en entrant dans le site.
    mais, meme comme ca, ca me change tout les entrées precedentes.
    L'ensemble du code donne ceci
    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
    <?php
    //début de la session
    session_start() ;
    //enregistrement d'une variable de session, ici le login de l'utilisateur
    $_SESSION["login"] = $login ;
    $intIdClient = $_SESSION['login'];
     
     
     
     
         if (isset ($_POST['nom'])) $nom = ($_POST['nom']); else $nom="";
         if (isset ($_POST['prenom'])) $prenom = ($_POST['prenom']); else $prenom="";
         if (isset ($_POST['adresse'])) $adresse = ($_POST['adresse']); else $adresse="";
    	 if (isset ($_POST['cp'])) $cp = ($_POST['cp']); else $cp="";
    	 if (isset ($_POST['ville'])) $ville = ($_POST['ville']); else $ville="";
    	 if (isset ($_POST['tel'])) $tel = ($_POST['tel']); else $tel="";
    	 if (isset ($_POST['mail'])) $mail = ($_POST['mail']); else $mail="";
     
     $connexion =  mysql_connect("#####","#####","#####")
    or exit("Erreur 101") ;
     mysql_select_db( "vmfloc123" , $connexion)
    or exit("Erreur 102") ; 
     
     $sql= "UPDATE crea_tbl SET nom='$nom',prenom='$prenom',adresse='$adresse',cp='$cp',ville='$ville',tel='$tel',email='$mail' 
     WHERE id_client='".$intIdClient."' " ;
     
     $req=mysql_query($sql)or exit ('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
     
    }
     
    ?>
    J'ai oublié de dire que quand je vais voir le champ id_client ( $intIdClient) dans la table crea_tbl, je n'ai pas le login de l'utilisateur, mais il est ecrit...Array

    merci encore à vous
    Cordialement

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2006
    Messages : 147
    Points : 120
    Points
    120
    Par défaut
    Tu utilises comme id le pseudo de l'utilisateur. Je prendrais plutôt un chiffre incrémenté automatiquement lorsque tu insère l'utilisateur dans la base.
    Avantages :
    - Un utilisateur peut changer de pseudo et la liaison entre les tables et conservées
    - On est à 100% sur de ne pas avoir de doublons qui pourraient poser de grands problèmes

    Pour ajouter le champ, voici la requête mysql à exécuter dans phpmyadmin, supprimer toutes les autres clés primaires avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `crea_tbl` ADD `id_client` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ;
    Lorsque tu insères un nouveau client, l'id sera automatiquement généré.

    Ensuite quand le client veut s'enregistrer, il met son login et son mot de passe. Tu cherche dans la base, tu compare les mots de passe. Si c'est ok, tu récupère l'id que tu met dans la variable $_SESSION['id_client'].

    C'est celle-ci que tu utilisera par la suite pour savoir quel utilisateur est enregistré.

    Ensuite la page que tu a copiée, c'est la page qui permettrais à l'utilisateur de modifier ses informations ?
    Dans tous les cas la première instruction est fausse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION["login"] = $login ;
    $login n'est pas défini, donc tu vide ta variable de session...

    La page d'ajout d'utilisateur fonctionne-t-elle ?
    T'a déjà fait les fonctions de login ?
    T'a déjà la page d'ajout de commandes ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 135
    Points
    135
    Par défaut
    Eh ben.... c'est pas simple....

    Je recapitule ... en ce moment j'en suis là, ici je pense que je déclare ma variable ....à la suite de l'enregistrement du visiteur
    Ca fonctionne, il est bien inscrit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $connexion=@mysql_connect('####','####','####') OR die('Erreur de connexion mysql'); 
    @mysql_select_db('vmfloc123'); // il faut changer les paramètres de connexion à la base mysql
    $requete=mysql_query("SELECT COUNT(*) FROM membre WHERE pseudo='".$_POST['pseudo']."' AND pass='".$_POST['pass']."'"); 
    $r=mysql_fetch_row($requete); 
    if($r[0]==1) 
    { 
     
    $_SESSION['login']=$_POST['pseudo']; 
    header('location:index3.php');
    et pour finir pour relier le visiteur a la table client...
    la page ajout, fonctionne, le panier se remplie bien, et, je mets ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $id_client=$_SESSION['login'];
     
    $sql = "INSERT INTO crea_tbl (id, id_client, modele, item, avatar, pren, taille, prix) VALUES ('','$id_client', '$mod', '$photo', '$nomFichier', '$pren',  '$taille', '$prix')";
    ensuite en haut de chaque page je mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php 
    session_start (); 
    $_SESSION['login'] = $pseudo ;
    Mais en faisant comme ca, j'ai ne variable $id_client qui vaut 0 donc je suppose que $_SESSION['login']=$_POST['pseudo']; est totalement vide
    merci a vous
    Cordialement et....Joyeux Noel

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 135
    Points
    135
    Par défaut
    Je crois que j'ai trouvé un début de solution, a savoir que j'ai mis ceci en haut des pages et je recupere bien ma variable que je peux inserrer dans ma base client....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(!isset($_SESSION['login'])) 
    { 
    exit; 
    }
    Je continue a chercher....

    JOYEUX NOEL A TOUS ET TOUTES

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

Discussions similaires

  1. [SQL]Insert into Values
    Par Pitou5464 dans le forum Access
    Réponses: 10
    Dernier message: 07/08/2006, 12h01
  2. Pb d'écriture intempestive dans table avec SQL insert into
    Par pete_shifter dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/11/2005, 11h51
  3. Réponses: 2
    Dernier message: 30/09/2005, 15h41
  4. Multiplier les And dans Sql Insert Into
    Par samlepiratepaddy dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 23/09/2005, 21h55
  5. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 11h38

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