Affichage de variables

Affichage de variables - PHP - Programmation

Marsh Posté le 17-11-2008 à 15:51:30    

Bonjour,
 
Voila j'ai crée une table "affilies" dans MySQL en rajoutant des champs sur le nom d'utilisateur, l'e-mail et l'id de chaque affilié, et je voudrais savoir comment mettre un lien du style www.site.fr/12000 (12000 correspondant à l'id de l'affilié) avec à l'intérieur de la page les données de l'affilié tels que son email, son prénom et son lien.
 
 
J'ai testé un code :
(ex : le lien de ma page est www.site.fr/presentation.php?id-affilie=12000)
 
Code : PHP
 

Code :
  1. <?php
  2. mysql_connect("localhost", "root", "" );
  3. mysql_select_db("affiliation" );
  4. $id = $_GET['id-affilie'];
  5. $retour = mysql_query("SELECT * FROM affilies WHERE id-affilie=$id" ); // selectionner les infos par rapport à l'id passé en GET
  6. $donnees = mysql_fetch_array($retour);
  7. ?>
  8. <center><a href="https://www.monsite.fr?sponsor=<?php echo $donnees['username-affilie']; ?>>lien</a></center>


 
Remarque : le "username-affilie" représente le nom d'utilisateur pour lequel "id-affilie=12000".
 
 
Malheureusement, j'obtient toujours le même 'username-affilie' quelque soit la valeur de l'id-affilie que je met dans le lien de ma page.
 
L'erreur devrait se situer dans mysql_query.
Quelqu'un peut-il m'aider à corriger ce problème ?


Message édité par Generation-Web le 26-11-2008 à 00:06:44

---------------
Site web d'informations sur internet
Reply

Marsh Posté le 17-11-2008 à 15:51:30   

Reply

Marsh Posté le 17-11-2008 à 15:54:46    

alors déjà, il faut penser à sécuriser tes requêtes ... ici tu fais une belle injection SQL.
Si ID n'est qu'un nombre, alors tu peux faire ça :

Code :
  1. $id = (isset($_GET['id-affilie'])) ? abs(intval($_GET['id-affilie'])) : 0;
  2. $req = "SELECT * FROM affilies WHERE id-affilie='".$id."';";
  3. $retour = mysql_query($req) or die ($req.'<br>'.mysql_error());
  4. if (mysql_num_rows($retour) == 1)
  5.    $donnees = mysql_fetch_array($retour);
  6. else
  7.    $donnees = array();


D'autre part, peut-on mettre le trait d'union dans un nom de variable ?
 
Enfin, juste après ton fetch_array, mets ceci :
print_r($donnees);
et tu verras ce que tu as récolté.
 
Dernière remarque : le SELECT * est-il nécessaire ? (si tu n'as besopin que du nom et de l'email, un  SELECT nom, email FROM ... me parait plus approprié.
 
EDIT : dans ce que j'ai mis, si ton ID vaut zéro, $donnees sera un tableau vide.

Message cité 1 fois
Message édité par NewsletTux le 17-11-2008 à 15:57:43

---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 17-11-2008 à 17:01:22    

Merci pour ta réponse,
 
malheureusement je suis débutant en php, et j'ai essayé avec le code que tu as mis, mais le lien n'affiche pas le "usernameaffilie".
 
 
Voici le code:
 

Code :
  1. <?php
  2. mysql_connect("localhost", "root", "" );
  3. mysql_select_db("affiliation" );
  4.     $id = (isset($_GET['idaffilie'])) ? abs(intval($_GET['idaffilie'])) : 0;
  5.     $req = "SELECT * FROM affilies WHERE idaffilie='".$id."';";
  6.     $retour = mysql_query($req) or die ($req.'<br>'.mysql_error());
  7.  
  8.     if (mysql_num_rows($retour) == 1)
  9.          {
  10.   $donnees = mysql_fetch_array($retour);
  11. ?>
  12. <center><a href="https://www.monsite.fr?sponsor=<?php echo $donnees['usernameaffilie']; ?>>lien</a></center>
  13.    
  14. <?php
  15. }
  16. else 
  17. {
  18. $donnees = array();
  19. ?>
  20. <center><a href="https://www.monsite.fr?sponsor=<?php echo $donnees['usernameaffilie']; ?>>lien</a></center>
  21. <?php
  22. }
  23. ?>


 
 
Excusez-moi, en fait tout marche, merci !!!
 
 
 
Simplement, lorsqu'il n'y a pas d' "idaffilie" dans le lien de ma page, en reprenant l'exemple si mon lien est : "www.site.fr/presentation.php", que dois-je ajouter pour avoir un "usernameaffilie" par défaut??
 
Merci de m'aider  :)


Message édité par Generation-Web le 26-11-2008 à 00:06:56

---------------
Site web d'informations sur internet
Reply

Marsh Posté le 17-11-2008 à 23:20:57    

Hello,
dans ce cas, soit tu as un compte lambda qui vaut pour tout le monde, soit pas de compte, auquel cas tu ne prends pas en compte cette donnée ...
 
Concrètement :
 
1. Si tu as un compte lambda d'ID 1 :

Code :
  1. $id = (isset($_GET['idaffilie'])) ? abs(intval($_GET['idaffilie'])) : 1;


(il y a juste le 1 qui remplace le 0 à la fin de ligne, c'est la valeur par défaut qui sera initialisée dans $id si $_GET['...'] n'existe pas)
 
2. Si tu n'as pas de compte lambda (donc pas de système d'affiliation si pas de sponsor)

Code :
  1. <?php
  2.   mysql_connect("localhost", "root", "" );
  3.   mysql_select_db("affiliation" );
  4.   $id = (isset($_GET['idaffilie'])) ? abs(intval($_GET['idaffilie'])) : 0;
  5.   $req = "SELECT * FROM affilies WHERE idaffilie='".$id."';";
  6.   $retour = mysql_query($req) or die ($req.'<br>'.mysql_error());
  7.   if (mysql_num_rows($retour) == 1)
  8.   {
  9.     $donnees = mysql_fetch_array($retour);
  10.     echo '<center><a href="https://www.monsite.fr?sponsor='.$donnees['usernameaffilie'].'">lien</a></center>';
  11.   }
  12.   else
  13.   {
  14.     echo '<center><a href="https://www.monsite.fr">lien</a></center>';
  15.   };
  16. ?>


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 18-11-2008 à 22:30:26    

Merci encore !!
 
Tout fonctionne!


Message édité par Generation-Web le 26-11-2008 à 00:07:08

---------------
Site web d'informations sur internet
Reply

Marsh Posté le 19-11-2008 à 18:27:28    

D'ailleurs on pourrait même optimiser ça ...
 
au lieu de :

Code :
  1. if (mysql_num_rows($retour) == 1)
  2. {
  3.   $donnees = mysql_fetch_array($retour);
  4.   echo '<center><a href="https://www.monsite.fr?sponsor='.$donnees['usernameaffilie'].'">lien</a></center>';
  5. }
  6. else
  7. {
  8.   echo '<center><a href="https://www.monsite.fr">lien</a></center>';
  9. };


 
tu pourrais utiliser ça :

Code :
  1. echo '<center><a href="https://www.monsite.fr';
  2. if (mysql_num_rows($retour) == 1)
  3. {
  4.   $donnees = mysql_fetch_array($retour);
  5.   echo '?sponsor='.$donnees['usernameaffilie'];
  6. }
  7. echo '">lien</a></center>';



---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 19-11-2008 à 23:07:52    

Excellent !
 
Je te remercie pour ton aide, c'est nikel !  :)


Message édité par Generation-Web le 26-11-2008 à 00:07:18

---------------
Site web d'informations sur internet
Reply

Marsh Posté le 20-11-2008 à 10:15:37    

NewsletTux a écrit :

alors déjà, il faut penser à sécuriser tes requêtes ... ici tu fais une belle injection SQL.
Si ID n'est qu'un nombre, alors tu peux faire ça :

Code :
  1. $id = (isset($_GET['id-affilie'])) ? abs(intval($_GET['id-affilie'])) : 0;
  2. $req = "SELECT * FROM affilies WHERE id-affilie='".$id."';";



 

c'est une blague?[:pingouino]
Si oui, elle est particulièrement mauvaise.[:moule_bite]


Message édité par skeye le 20-11-2008 à 10:15:50

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-11-2008 à 10:22:53    

NewsletTux a écrit :

D'ailleurs on pourrait même optimiser ça ...

 

au lieu de :

Code :
  1. if (mysql_num_rows($retour) == 1)
  2. {
  3.   $donnees = mysql_fetch_array($retour);
  4.   echo '<center><a href="https://www.monsite.fr?sponsor='.$donnees['usernameaffilie'].'">lien</a></center>';
  5. }
  6. else
  7. {
  8.   echo '<center><a href="https://www.monsite.fr">lien</a></center>';
  9. };
 

tu pourrais utiliser ça :

Code :
  1. echo '<center><a href="https://www.monsite.fr';
  2. if (mysql_num_rows($retour) == 1)
  3. {
  4.   $donnees = mysql_fetch_array($retour);
  5.   echo '?sponsor='.$donnees['usernameaffilie'];
  6. }
  7. echo '">lien</a></center>';




...ou alors utiliser un semblant de séparation de la présentation et de la logique au lieu de rendre ça encore plus mélangé et moins lisible pour le plaisir d'écrire 3 caractères de moins.[:moule_bite]


Message édité par skeye le 20-11-2008 à 10:23:15

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-11-2008 à 19:18:50    

Vraiment ?
 
Mais alors qu'est ce que tu proposes pour simplifier et sécuriser tout ça ?

Message cité 1 fois
Message édité par Generation-Web le 26-11-2008 à 00:07:31

---------------
Site web d'informations sur internet
Reply

Marsh Posté le 20-11-2008 à 19:18:50   

Reply

Marsh Posté le 20-11-2008 à 19:30:43    

Bah déjà pour simplifier, tout séparer :
 

Code :
  1. <?php
  2. if (mysql_num_rows($retour) == 1) :
  3.     $donnees = mysql_fetch_assoc($retour);
  4.     ?>
  5.    <center><a href="https://www.monsite.fr?sponsor='.$donnees['usernameaffilie'].'">lien</a></center>
  6. <?php else : ?>
  7.  <center><a href="https://www.monsite.fr">lien</a></center>
  8. <?php endif; ?>

Reply

Marsh Posté le 20-11-2008 à 19:38:51    

Generation-Web a écrit :

Vraiment ?
 
Mais alors qu'est ce que tu proposes pour simplifier et sécuriser tout ça ?


Sécuriser l'input vers la base de données, c'est le boulot...de la librairrie d'accès à la base de données. Dans ton cas, soit tu peux utiliser les fonctions mysqli() ou PDOet donc il faut te diriger vers les requêtes préparées, soit ce n'est pas le cas, et il faut utiliser mysql_real_escape_string.
 
Concernant son "optimisation", elle est juste ridicule. Aucun gain en performance, ni en lisibilité, le seul gain est en termes de caractères à taper, ce qui n'a aucun intérêt.
Si tu veux partir dans l'esprit "séparation des couches", renseigne-toi sur MVC, par exemple.
 
...et Luc@s, dire "tout séparer" et mettre de l'affichage et une fonction d'accès à la base dans le même script de 10 lignes c'est vraiment très très très mauvais. :D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 20-11-2008 à 20:13:43    

oui mais je fais pas lui faire 3 fichiers différents avec des templates quand même :o :D

Reply

Marsh Posté le 20-11-2008 à 20:15:11    


en attendant ton truc est moins lisible que l'original, alors autant garder le premier :o


---------------
Can't buy what I want because it's free -
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed