SELECTION DU N° DE L'ID EN CLIQUANT SUR UN LIEN

[Résolu]
Signaler
Messages postés
7
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
18 juin 2010
-
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
-
Bonsoir,

Je cherche desespérement la bonne syntaxe qui permettrait de sélectionner les coordonnées (stockées dans la bdd phpmyadmin) correspondant à un membre adhérant au site en cliquant sur un lien.
Le but est :
- en cliquant sur le lien "membre 1" on appelle les coordonnées du premier membre de la table "table_membres" dont le champs "memb_id" est incrémenté : 1
- en cliquant sur le lien "membre 2" on appelle les coordonnées du second membre de la table "table_membres" dont le champs "memb_id" est incrémenté : 2
- en cliquant sur le lien "membre 3" on appelle les coordonnées du troisième membre de la table "table_membres" dont le champs "memb_id" est incrémenté : 3

Voici ci-dessous mon script; je sais qu'il manque quelquechose pour que ça fonctionne mais je n'arrive pas à trouver.
Merci d'avance pour votre aide.

<?php
// INCLUDE BASIC FILES : Envoi des codes Admin pour accéder à la bdd phpmyadmin + Connection à la bdd phpmyadmin
include_once './includes/bdd-dial.php';
?>

<html>
<head>
</head>

membre 1,

membre 2,

membre 3.

<?php // Selection de la table "table_membres" et appel de tous des champs de la bdd mysql

// on prépare une requête permettant de sélectionner l'id du membre
$sql = 'SELECT * FROM table_membres WHERE memb_id="'.$data['id'].'"';

// on lance la requête
$select_memb = mysql_query($sql) ;

$ent = mysql_fetch_array($select_memb);

$nom = $ent['memb_name'];
$adresse = $ent['memb_address'];

?>
<!-- LES COORDONNEES MEMBRE S'AFFICHENT CI-DESSOUS EN DYNAMIQUE -->
Nom du membre : <?php echo stripslashes($nom); ?>

Adresse : <?php echo stripslashes($adresse); ?>


</html>

10 réponses

Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
De rien tu peux accèpter le message qui t'as aidé avec le bouton face au message






<= ICI

Et n'oublie pas le mysql_real_escape_string, c'est très important pour éviter les failles de sécurité.
_________________________________
Min iPomme
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Alors par rapport au SELECT *.
Ton serveur SQL ne renvois que les infos nécessaires si tu indique les colonnes. Si tu fais un *, il renvois toutes les colonnes.

Du coup ca va beaucoup plus vite si tu fais un select en précisant le nom des colonnes. Le traffic de ton serveur SQL est aussi amoindris.
Si dans ta page tu n'as besoin que du nom du membre il faut mettre que :
SELECT memb_name, memb_address FROM table_membres

Pour le intval et ctype_digit dans un premier temps je te conseil de lire la doc php.

Comme tu es sur que ton ID seras un nombre, tu peux utiliser intval :
<?php
$sql = 'SELECT * FROM table_membres WHERE memb_id="'.intval($_GET['id']).'"';
?>

Comme ça si au pire tu as du texte qui passe, il seras convertis en chiffre.

Ensuite encore une fois comme tu es sur que ton ID seras un nombre, tu peux avant de faire ta requête SQL vérifier si ta variable $_GET['id'] est bien un nombre.

<?php
if(!ctype_digit($_GET['id']))
{
   die("Erreur de type de param...");
   // OU
   // redirection ou autre
}
$sql = 'SELECT * FROM table_membres WHERE memb_id="'.intval($_GET['id']).'"';
?>



_________________________________
Min iPomme
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
Bonjour,

Tu peux te servir des variables d'url comme ceci :
[tapage.php?id=1 membre 1]
[tapage.php?id=2 membre 2]


<?php
// on prépare une requête permettant de sélectionner l'id du membre
$sql = 'SELECT * FROM table_membres WHERE memb_id="'.mysql_real_escape_string($_GET['id']).'"';
?>


_________________________________
Min iPomme
Messages postés
7
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
18 juin 2010

Bonjour Tonio_35,
Merci pour ta réponse.
Je vais l'essayer ce matin et pour donner mon impression : "I'll be back" !
Messages postés
7
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
18 juin 2010

Ca marche !
Je savais qu'il ne manquait pas grand chose, mais sans toi, je chercherais encore...
Merci encore Tonio_35.
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

<?php
// on prépare une requête permettant de sélectionner l'id du membre
$sql = 'SELECT * FROM table_membres WHERE memb_id="'.mysql_real_escape_string($_GET['id']).'"';
?>

Quelques petites remarques :
- Si memb_id est un entier (ce qui serait logique), alors on ne devrai pas mettre de quotes.
- Si on ne met pas de quotes, alors on utilisera intval() au lieux de mysql_real_escape_string().
- Le top serait en fait de tester le contenu de $_GET['id'] avec ctype_digit() et de langer une exception/générer une erreur en cas de donnée non conforme.
- Les "SELECT *" c'est un peu moche (malheureusement on en vois partout).

D'une manière plus générale, séparer le HTML du PHP est préférable.

Voilà, quelques remarques qui ne changeront pas le fonctionnement mais qui permettent de faire un peu mieux.
Messages postés
7
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
18 juin 2010

Salut TychoBrahe,

Merci pour tes suggestions mais j'avoue ne pas être suffisamment calé en PHP pour comprendre la subtilité de ta syntaxe.
Autant j'ai déjà utilisé mysql_real_escape_string($_GET['id'])/color(bien que trop de nuits passées à manipuler du code m'ont fait passé à côté...jusqu'à ce que Tonio_35 me sorte de mon Somnambulisme ), autant ton code ne m'est pas si familier. C'est pour ça qu'il m'interpelle mon côté "perfectionniste" (c'est lui qui me "bouffe" certaines nuits!)
Bien que " $sql = 'SELECT * FROM table_membres WHERE memb_id="'.mysql_real_escape_string($_GET['id']).'"'; " fonctionne très bien, j'apprécierais que tu m'écrives la syntaxe de cette ligne, intégrant intval() et ctype_digit() afin d'éviter toute erreur.

Par ailleurs, je ne vois pas en quoi les "SELECT *" c'est un peu moche : veux-tu dire que j'aurais pu écrire à la place : $sql = 'SELECT memb_name, memb_address FROM table_membres (...) ou est-ce une remarque plus fondamentale ?

Enfin, concernant le fait de séparer le HTML du PHP, tu prêches un convaincu : comme tu peux le voir, j'utilise une "include" pour l'envoi des codes "Admin" pour accéder à la bdd phpmyadmin et pour établir la connexion à la bdd phpmyadmin (cf. INCLUDE BASIC FILES). Mais afin de faciliter la lecture de ma recherche, j'ai jugé important de "décomposer" le code PHP en illustrant l'endroit où je l'inclue dans le HTML, afin d'éviter les vas et viens entre les 2 codes pendant la lecture de ma requête...
Messages postés
7
Date d'inscription
samedi 19 décembre 2009
Statut
Membre
Dernière intervention
18 juin 2010

Bonjour Tonio_35
Je tiens à te remercier pour la spontanéité de tes réponses pertinentes.
Voila un mois que j'ai posé ma question à TychoBrahe à laquelle je n'ai toujours pas de réponse de sa part.
Malgré que tu es tenté de répondre à sa place, je reste sur ma faim quant aux explications que je lui ai demandé sur ses raisonnements : qui de mieux placé que TychoBrahe pour expliquer ce qu'il a voulu dire !?
Cela dit, ta réponse me satisfait amplement.
Peut-être a-t-il trouvé ta réponse suffisamment complète pour n'avoir rien à y ajouter : dans ce cas, en plus de ton talent de programmeur, tu as un don de télépathe !
merci encore.
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Voila un mois que j'ai posé ma question à TychoBrahe

Tonio à donné la réponse environ 22 minutes après que tu ai posté donc bon...

Peut-être a-t-il trouvé ta réponse suffisamment complète pour n'avoir rien à y ajouter

C'est le cas.

tu as un don de télépathe

Il n'y a aucune magie là dessous, n'importe qui connaissant un peu le PHP aurai pu te répondre.
Messages postés
567
Date d'inscription
mercredi 4 octobre 2006
Statut
Membre
Dernière intervention
30 août 2011
10
C'est l'avantage du forum, le premier qui passe réponds ce qui vous permet d'avoir des solutions rapidement...

Quand il n'y a rien à ajouter on ajoute rien et on va aider un autre voila pourquoi TychoBrahe n'as rien dit

tu as un don de télépathe

En faite j'ai mon secret que je suis heureux de te confier (en fait que je t'avais déjà confier)... Dans ce grimoire tu trouveras donc les recettes magiques de l'intval et du ctype_digit mais aussi de bien d'autres ingrédients du PHP.

En te souhaitant une bonne continuation,

_________________________________
Min iPomme