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

MkFramework Discussion :

Comment envoyer des données par les liens?


Sujet :

MkFramework

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut Comment envoyer des données par les liens?
    Bonjour imikado,

    j'ai un petit souci ce matin. J'ai dans la vue 'list.php' tous les enregistrements de ma table 'articles', pour chaque enregistrement on la la possibilité de 'show','edit', et 'delete'.
    je veux 'edit' un enregistrement en prenant soin d'envoyer l'id de celui ci, non pas par l'url:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="<?php echo $this->getLink('articles::edit',array(
    					'id'=>$oArticles->getId()
    					))?>">Edit</a>
    Mais par la session ($_SESSION['id'])

    Comment le faire?

  2. #2
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Pas d'idée?

  3. #3
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Si vous voulez faire ceci, meme si je ne comprends pas l'idée

    Pour faire simple: il faut le faire en deux phases
    1. un lien vers une page qui va "enregistrer" l'id en session,
    2. une redirection vers la page cible

    Ne pas oublier sur la page cible de changer le mode de récupération de l'id ( on passe de _root::getParam('id') $_SESSION )

    Attention également: il n'y a plus de sécurisation du paramètre passé (xss,sql injection..)

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    1. un lien vers une page qui va "enregistrer" l'id en session,
    2. une redirection vers la page cible
    Je n'ai pas bien compris ce que ça veut dire. le lien va toujours envoyer l'id via l'url je crois!Et c'est ce que je veux éviter!
    Y a t-il un moyen d'envoyer des données d'une page vers une autre sans passer par '_root::getParam()' et sans qu'on ait à utiliser un formulaire?

  5. #5
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Techniquement non:
    Le web c'est des échanges entre un client (navigateur) et un serveur

    Pour envoyer des informations entre ces deux cotés, on utilise
    - GET (variables de l'url)
    - POST (via formulaire)
    - COOKIE (pour conserver entre les pages un id de session par exemple)

    Mais $_SESSION est une sorte de cookie coté serveur, c'est un fichier enregistré coté serveur, il faut donc si l'on veut y écrire quelquechose de lui "passer" cette variable

    Quel est votre besoin ? pourquoi souhaitez vous l'enlever des liens ?

    Pour information, vous pouvez toujours l'encoder avec base64_encode, puis la dechiffrer avec base64_decode

    Vous pouvez également avoir une formule mathématique pour la "masquer" (id + 300)*3, puis en réception (variable id/3) - 300)

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Quel est votre besoin ? pourquoi souhaitez vous l'enlever des liens ?
    En fait j'ai pris le cas du module 'articles' pour faire simple.
    Je suis sur une table 'candidatures' dont l'id est la concaténation de deux clés étrangères 'candidat_id' et 'poste_id'.
    A la génération du CRUD(comme prévu) il n'y a pas possibilité de choisir 2 champs comme id. donc je me suis soumise et j'ai pris 'poste_id'.
    Le problème c'est que dans candidatures/view/list.php j'ai la liste des enregistrements de la table, et lorsque je clique sur 'edit' j'aimerais être dirigé vers la page de modification avec les valeurs du poste et du candidat associés à cette candidature.
    J'espère m'être bien exprimée pour que tu comprenne.
    Je ne veux pas que les identifiants soient visibles en clair dans l'URL.

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par imikado Voir le message
    Techniquement non:
    Le web c'est des échanges entre un client (navigateur) et un serveur

    Pour envoyer des informations entre ces deux cotés, on utilise
    - GET (variables de l'url)
    - POST (via formulaire)
    - COOKIE (pour conserver entre les pages un id de session par exemple)

    Mais $_SESSION est une sorte de cookie coté serveur, c'est un fichier enregistré coté serveur, il faut donc si l'on veut y écrire quelquechose de lui "passer" cette variable

    Quel est votre besoin ? pourquoi souhaitez vous l'enlever des liens ?

    Pour information, vous pouvez toujours l'encoder avec base64_encode, puis la dechiffrer avec base64_decode

    Vous pouvez également avoir une formule mathématique pour la "masquer" (id + 300)*3, puis en réception (variable id/3) - 300)

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    D'accord, donc le but n'est pas de "caché" l'id en url

    Vous pouvez passer plusieurs variables dans le lien, vous pouvez éditer la vue view/list.php
    Pour mettre dans le lien
    à la place de:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <a  href="<?php echo $this->getLink('MONMODULE::edit',array(
    										'id'=>$oMembre->getId()
    									) 
    							)?>">Edit</a>

    on met les deux variables:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <a  href="<?php echo $this->getLink('MONMODULE::edit',array(
    										'poste_id'=>$oMembre->poste_id,
    										'candidat_id'=>$oMembre->candidat_id,
     
    									) 
    							)?>">Edit</a>

    Et dans l'action en question, remplacez le code:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $oMembre=model_MEMBRE::getInstance()->findById( _root::getParam('id') );
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $oMembre=model_MEMBRE::getInstance()->findByPosteAndCandidat( _root::getParam('poste_id'), _root::getParam('candidat_id') );

    ET bien sur dans votre modèle il faut ajouter une méthode findByPosteAndCandidat
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function findByPosteAndCandidat($poste_id,$candidat_id){
      return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE poste_id=? AND candidat_id=?',$poste_id,$candidat_id);
    }

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    D'accord, donc le but n'est pas de "caché" l'id en url
    Si au contraire. J'avais bien penser faire ce que tu viens de m'indiquer et j'ai même écrit la methode dans le modèl, mais les éléments passés dans le lien sont visibles dans mon URL.(dans la barre d'adresse). Je veux justement que l'internaute ne voit pas les valeurs qui transitent de page en page.

  10. #10
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Ce que vous demandez n'est pas "possible", sauf mon premier post, d'avoir un "pont" entre chaque page
    Ou de "masquer" ces id, voir d'envoyer les id en "post", ainsi on ne les voit pas dans l'url

  11. #11
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    D'accord. merci pour tes réponses. je vais explorer la piste du POST

  12. #12
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    De rien

    POur info, une piste pour le POST

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <script>function urledit(id){
      var a=getById('urledit');
      if(a){
        var b=getById('id');
        if(b){
          b.value=id;
          a.submit();
        }
      }
    }
    </script>
    <form id="urledit" method="POST" action="<?php echo _root::getLink('MONMODULE::edit')?>"><input type="hidden" name="id" value=""/></form>
    ET le lien change forcément
    On remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="<?php echo _root::getLink('MONMODULE::edit',array('id'=>$oOBJET->id))?>" > EDIT </a>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="#" onclick="urledit(<?php echo $oOBJET->id?>);return false;" > EDIT </a>

  13. #13
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    cool,a bientot, je vais tester ça dans quelques instants

  14. #14
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bémol, rien ne se passe. je crois qu'il faut avant tout que j’éclaircisse un point:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class model_candidatures extends abstract_model{
    	
    	protected $sClassRow='row_candidatures';
    	
    	protected $sTable='candidatures';
    	protected $sConfig='candidature';
    	
    	protected $tId=array('poste_id','candidat_id');
    
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
    }
    Quand j'écrit ceci, MKF suppose bien que ma clé primaire est constituée des deux champs poste_id et candidat_id?

  15. #15
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Pour répondre a ma propre question je crois que oui car si j'utilise l'instruction:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $oCandidatures->getId();
    il me renvoie un couple d'entier (exemple: 2::12)
    Est ce bien cela ou mon interprétation est tordue?

  16. #16
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Oui, mais il y a peut etre des endroit ou cette multi clé peut poser soucis
    VOtre table n'a pas de pkey du tout ?

  17. #17
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    non, dans phpmyadmin j'ai pu déclarer ces deux champs comme clé primaire. Mais dans MKF je n'ai pas eu cette possibilité.

  18. #18
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    J'ai essayé plusieurs choses notamment:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="<?php echo $this->getLink('candidatures::editAvis')?>" onClick="<?php $_SESSION['poste_id'] = $oCandidatures->poste_id; $_SESSION['candidat_id'] = $oCandidatures->candidat_id; ?>">Avis</a>
    Ca marche mais à certains endroit cela me pose un problème car les variables en sessions sont présentes sur d'autres pages et faussent mes résultats.
    Si je décide de revenir à l'utilisation du '_root::getParam()', aurais-je la possibilité grâce à l'URL rewriting de masquer les données transitant par l'URL?
    Personelement, pense tu que ce soit bien que dans une application de production, il y ait des données qui soient envoyées par l'URL?

    Merci

  19. #19
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    L'url rewriting ne sert pas à "masquer" les ids, il sert à faciliter le referencement et rendre les urls plus "joli"
    au lieu d'avoir

    monsite.com/index.php?:nav=article::show&id=24

    on peut avoir

    monsite.com/article_24.html

    mais on verra bien 24

    En production vous pouvez avoir l'id de "visible" oui vous pouvez la masquer via une simple formule mathématique comme expliqué plus haut, cela permet d'eviter qu'elle soit "devinable"
    Mais dans l'idée il faut déjà reflechir à l'isolation des données: qui a accès à quoi, et cela suffit généralement à la sécurisation des données: on verifie sur chaque page que la personne identifiée a le droit ou non de voir/modifier cette donnée

  20. #20
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    J'oubliais:

    Vous ne pouvez pas écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="<?php echo $this->getLink('candidatures::editAvis')?>" onClick="<?php $_SESSION['poste_id'] = $oCandidatures->poste_id; $_SESSION['candidat_id'] = $oCandidatures->candidat_id; ?>">Avis</a>
    Onclick c'est une action coté navigateur (client) (javascript) et l'initialisation de $_SESSION c'est fait coté serveur (php)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Envoyer des données par TCP/IP
    Par slimdre dans le forum C++
    Réponses: 4
    Dernier message: 18/03/2007, 18h28
  2. Réponses: 17
    Dernier message: 22/09/2006, 17h34
  3. Réponses: 16
    Dernier message: 20/03/2006, 23h21
  4. envoyer des données par mail
    Par zorba49 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/12/2005, 11h00
  5. envoyer des données par l'intermédiaire d'un bouton
    Par mathilde50 dans le forum Access
    Réponses: 26
    Dernier message: 28/10/2004, 16h49

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