Réécriture URL
Résoluyg_be Messages postés 23408 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 décembre 2024 - 2 juin 2024 à 20:41
10 réponses
30 mai 2024 à 16:49
Bonjour,
Si l'id est le passage de paramètre d'une formulaire de connexion, il serait préférable d'utiliser à la place de la méthode GET la méthode POST qui n’affiche pas le paramètre passé.
D'ailleurs le rewrite d'url, en supprimant l'id pourrait tout simplement supprimer ce paramètre, donc on ne pourrait plus l'utiliser.
31 mai 2024 à 10:31
Dans mon programme, j'ai une liste de 200 membres. j'accède à leur info par le lien
page_membre.php?id=1
page_membre.php?id=2
page_membre.php?id=3
etc....
Par un POST, je ne vois pas vraiment comment faire
Une aide et un exemple seront les bienvenues.
Merci
Modifié le 31 mai 2024 à 10:57
C'est dans la page qui lance l'url page_membre.php?id=x qu'il faut agir, si l'id du membre est bien récupérée via un formulaire. Voir les différences GET POST sur formulaire : https://www.maxicours.com/se/cours/la-transmission-d-un-formulaire-avec-get-ou-post/
Voici 2 exemples de création de connexion membre :
- https://phpsources.net/code/php/formulaires/3_formulaire-acces-espace-membre
- http://turrier.fr/articles/php-mysql-creer-un-espace-membre/php-mysql-creer-espace-membres.php
31 mai 2024 à 11:08
bonjour,
montre ton code ou explique comment ces url sont créés, et pourquoi tu veux masquer cette partie de l'url.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question31 mai 2024 à 11:37
C'est un site familial
Depuis mon espace membre, j'ai un
session_start();
Dans le formulaire de profil j'ai mes informations ainsi que ma filiation parents et enfants.
affichage enfants
if ($sexe == 1) {$var_req = 'pere';} else {$var_req = 'mere';} $sql_enf = 'SELECT fi.id_membre, mem.id_membre, mem.date_naissance FROM filiation fi INNER JOIN membre mem ON fi.id_membre = mem.id_membre WHERE '.$var_req.' = :id_membre ORDER BY mem.date_naissance'; $dataEnf = array(':id_membre'=>$id_membre); try{ $requetenf = $pdo->prepare($sql_enf); $requetenf->execute($dataEnf); }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datap); } $count_enf = $requetenf->rowCount(); if ($count_enf != O){ ?> <div class="card"> <div class="card-header"> Enfant(s) </div> <div class="card-body"> <p class="card-title"> <?php while($row_enf = $requetenf->fetch()){ echo '<a href="page_membre.phpid='.$row_enf['id_membre'].'">'.membre_prenom_nom($row_enf['id_membre']).'</a><br />'; }
Je souhaiterais que je puisse (ainsi que les autres membres) modifié le profil de mes ennfants sans passer id_membre dans l'URL pour "sécuriser" l'accès seulemet aux parents
J'espère avoir été clair
Merci d'avance pour votre aide
31 mai 2024 à 12:44
Qu'as-tu mis en place pour identifier si l'utilisateur est un parent?
31 mai 2024 à 15:55
Pour chaque membre, je rentre père et mère si il y a lieu quand ceux sont des descendant pas des pièces rapportées.
Je voudrais pouvoir modifier que mes enfants. je ne vois pas comment exactement est il possible de faire.
Merci de vous lumières.
31 mai 2024 à 18:36
Il y a de multiples façons de réaliser cela. Deux exemples:
- celui qui veut faire un changement demande qu'un mail lui soit envoyé (à une adresse mail encodée dans la base de données), et ce mail contient un lien avec un code secret, le lien permettant d'accéder à une page qui permet la modification des enfants concernés
- comme en un, mais le code secret est distribué autrement (par la poste, ...), et est valable pendant une période déterminée
- chaque parent est enregistré avec un mot de passe, et le site vérifie ce mot de passe avant de lui permettre de modifier ses enfants
1 juin 2024 à 17:10
Les membres (avec enfants ou pas), demande un accès (si ils sont enregistrés au préalable) et reçoivent un mot de passe ils peuvent accéder à à la partie membre avec toutes le pages avec session_start();
Il peuvent depuis cet endroit modifier leurs profils (infos, photo).
En bas de page s'affiche la filiation : parents enfants.
Sur chaque enfants il y a un lien (page_membre.php?id=45).
Je pense changer cet accès par un <form> et submit pour ne pas afficher l'id.
Avec cette méthode pas encore tester, j'aimerais savoir si un autre utilisateur n'aura la possibilité de ne modifier les infos que de ses enfants ?
merci d'avnace pour votre aide
1 juin 2024 à 17:59
Très bien d'utiliser session_start(), cela va faciliter le travail.
Je suppose que l'id du membre est mémorisé dans les variables de session.
Moi je laisserais l'id de l'enfant s'afficher dans le lien. De toutes façons, affiché ou pas, c'est facile à pirater. Le passage par un formulaire et l'utilisation de POST n'apportent pas de réelle sécurité.
Sur la page qui affiche les détails des enfants, et celle qui permet de modifier des infos des enfants, je vérifierais, avant de faire quoi que ce soit, si l'id du membre, obtenu via les variables de session, lui donne le droit de voir ou de modifier les infos de l'enfant.
1 juin 2024 à 18:05
Merci de ta réponse
.. lui donne le droit de voir ou de modifier les infos de l'enfant
C'est justement ce que je cherche à faire mais je ne vois pas comment. Pourtant je réfléchi mais n'arrive pas à trouver la bonne méthode.
Peux tu m'aider ?
Merci d'avance.
1 juin 2024 à 18:42
- je suppose que l'id du membre connecté est mémorisé dans une variable de session, que cela a été fait, au moment où le membre s'est authentifié, dans la page de login, via une instruction du genre
$_SESSION['id_membre'] = ... ;
- ensuite, dans les pages qui permettent de voir ou de modifier les infos d'un enfant, tu récupères l'id du membre, via une instruction du genre
$idmembre = $_SESSION['id_membre'] ;
- Une fois que tu as l'id du membre, et peux verifier, dans la base de données, si ce membre est bien un parent de l'enfant, et, donc, de lui donner accès, ou pas, aux données de l'enfant
Les variables de session permettent de mémoriser, de façon sécurisée, des données utilisables par plusieurs pages, tout au long de la session de l'utilisateur.
Il faut absolument éviter de mémoriser ces informations dans des url ou dans des formulaires, mêmes avec POST, car c'est facilement manipulable par l'utilisateur.
1 juin 2024 à 19:09
Dans la page de connexion, je récupère :
session_start(); $ligne_tab = $result->fetch(); $_SESSION['id_user'] = $ligne_tab[0]; $_SESSION['mail'] = $ligne_tab[1]; $_SESSION['motdepasse'] = $ligne_tab[2]; $_SESSION['nom'] = $ligne_tab[3]; $_SESSION['prenom'] = $ligne_tab[4]; $_SESSION['id_famille'] = $ligne_tab[5]; $_SESSION['id_membre'] = $ligne_tab[6];
Extrait de ma base table : filiation
C'est au niveau du 3 que j'ai du mal à trouver la bonne requête SQL.
Plus haut j'avais publier une requête qui rechercher les enfants d'un membre.
Je sèche un peu, ce doit être la fatigue.
Merci d'avance
1 juin 2024 à 21:56
C'est pourtant simple.
Tu as l'id d'un enfant, et l'id de quelqu'un qui prétend être un parent.
Tu vérifies dont si, dans la table filiation, il y a un enregistrement avec cet enfant et ce parent.
$id_parent=$_SESSION['id_membre'] $id_enfant=$_GET("id"); $sql_fil = 'SELECT id_membre FROM filiation WHERE id_membre = :id_enfant and ( pere = :id_parent or mere = :id_parent' ) ; $data_fil = array(':id_enfant'=>$id_enfant , ':id_parent'=>$id_parent); try{ $requetfil = $pdo->prepare($sql_fil); $requetfil->execute($data_fil); }catch(Exception $e){ echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($data_fil); } $count_fil = $requetfil->rowCount();
Si $count_fil est égal à 1, c'est bien un parent de cet enfant.
2 juin 2024 à 20:08
Hello
A noter que la fonction rowcount ne doit pas s'utiliser sur une requête de type SELECT ( voir la doc officielle de php )
A la place, on fera un COUNT sur le résultat d'un FETCHALL
2 juin 2024 à 20:41
merci, Jordane, j'ai, erronément, supposé que le code existant, qui faisait un rowcount() sur un SELECT, était correct.
2 juin 2024 à 18:44
Merci, excellent, ça marche nickel.
je corrige juste 2 trucs
$id_enfant=$_GET['id'];
et
$sql_fil = 'SELECT id_membre FROM filiation WHERE id_membre = :id_enfant and ( pere = :id_parent or mere = :id_parent)';
C'est exactement ce que je cherchais à faire sans trouver la bonne syntaxe.
yg_be, t'es un chef, encore merci