[php] Insérer un ID dans une url

Insérer un ID dans une url [php] - PHP - Programmation

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

bonjour à tous,
 
J'ai un petit problème que je n'arrive pas à résoudre j'ai beau chercher je ne trouve pas. :euh:
Je vous explique :
 
J'ai un mini formulaire qui permet de créer un nouvel objet.
 
Quand je clique sur 'créer une voiture' une requête SQL inscrit le nom de l'objet dans une table et donc lui crée automatiquement un ID.
 
Je souhaite ensuite récupérer l'ID qui a été crée pour l'insérer dans l'url courante. En fait je souhaite tout simplement savoir comment inscrire dans une url un ID qui est stocké dans une base de donnée.
 
Je suis débutante, je ne sais pas si je suis très claire...
merci par avance :)


Message édité par honeykent le 17-11-2008 à 20:22:46
Reply

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

Reply

Marsh Posté le 17-11-2008 à 20:35:04    

Pour récupérer l'id, tu peux regarder du côté de mysql_insert_id : http://fr.php.net/mysql_insert_id si bien sûr tu utilises MySQL, il doit exister des équivalents pour les autres SGBD. Si tu utilises PDO: http://www.manuelphp.com/php/funct [...] sertid.php
 
 
 

Reply

Marsh Posté le 17-11-2008 à 20:54:05    

merci beaucoup pour le lien, oui en effet en PDO :)  

Reply

Marsh Posté le 18-11-2008 à 10:05:59    

Bonjour,
 
exemple :  
 

http://forum.hardware.fr/hfr/Programmation/PHP/inserer-id-sujet_119284_1.htm&id=[valeur de l'ID que tu récupère ].


 
Quand tu récupère cette valeur, fait un traitement pour voir s'il est "correct", qu'elle ne possède pas de caractères invalides, afin d'éviter les injections SQL,ect. C'est une régle importante quand on récupère des valeurs avec GET_ ... !  
 
Dans ton cas, suffit de tester si c'est un entier...!  :o  
 
 
 
 :jap:  :jap:


Message édité par cvb le 18-11-2008 à 12:20:02
Reply

Marsh Posté le 18-11-2008 à 12:15:29    

Suffit de tester si c'est un entier  [:_jbm]

Reply

Marsh Posté le 18-11-2008 à 18:16:27    

ou bien de forcer le type  

Code :
  1. $id = (int) $_GET['id'];

Reply

Marsh Posté le 18-11-2008 à 19:05:21    

Il vaut mieux tester le contenu d'une variable et agir en conséquence que de forcer le type de ne pas savoir si la valeur correspond à ce qui est saisie.
 
En utilisant un "(int)" sans tester au préalable, tu ne sais rien de ce qui se passe. Tu ne sais pas si quelque chose a été saisie (il vaut souvent mieux dire "vous avez oubliez d'indiquer le nombre d'enfant" que considérer qu'il n'en a pas) si la saisie est un nombre tronqué par le "(int)" (5e2 = 500 en notation mathématique mais vaut 5 quand c'est un texte transformé avec (int) ), si le nombre était dans une autre base ( "(int) 012" = 12 alors que dans pleins de domaine, c'est un nombre en base 8 qui vaut 10 en décimal, idem avec "(int) 0xb3" qui vaut 0 alors que d'habitude ce nombre vaut 179 en base 10)
 
En fait, utiliser du typage comme (int) sur une valeur saisie par l'utilisateur sans contrôler au préalable le contenu, c'est comme utiliser l'arobase devant une fonction : c'est se dire "c'est sensé marcher, mais même si ça marche pas, je m'en fous, je le cache et ne dit rien à personne".

Reply

Marsh Posté le 19-11-2008 à 13:35:33    

oui et non !
moi je fais presque toujours (pour mes requête de récup de données seuleùent ) :
 

Code :
  1. if(!empty($_GET['id'])) {
  2.    $id = (int); $_GET['id'];
  3. } else {
  4.    // Traitement si GET id incorrect...
  5. }


 
Si l'id devient zéro car la valeur était d'un format complètement incorrect, alors la requete échoue comme si la donnée recherchée n'existait pas.
 
Attention : j'utilise (int) pour une requete qui ne dépend pas tout à fait du client : un lien que je lui fourni par exemple.
Si il devait entrer lui même un entier je ferais des vérifications ;)

Reply

Marsh Posté le 19-11-2008 à 13:53:12    

khakha.


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

Marsh Posté le 19-11-2008 à 15:06:04    

:'(

Reply

Marsh Posté le 19-11-2008 à 15:06:04   

Reply

Marsh Posté le 19-11-2008 à 15:14:16    

C'est aussi propre que de faire un extract($_POST);  :whistle:


Message édité par Alisteroid le 19-11-2008 à 15:14:41
Reply

Marsh Posté le 19-11-2008 à 15:19:26    

edited :o

Reply

Marsh Posté le 19-11-2008 à 18:22:37    

je ne vois pas en quoi c'est censé être "khakha" tout le temps ... Pour ma part, j'utilise à peu près le même type de solution que luc@s, lorsque je mets un ID dans l'URL (puisque ce topic en parle et semble borné sur ça) et que l'ID correspond à une entrée numérique dans une DB, par exemple (ou un numéro de page si affichage multipages) alors je caste volontairement en intval et j'en prends la valeur absolue, ceci me permettant de savoir par la suite que mon $id récupéré du $_GET est forcément un entier positif ou nul.
 
Bien entendu, dans le cas d'un nombre plus complexe (et dans un autre contexte) je comprends ce que tu dis, omega2, et évidemment il y a d'autres tests un peu plus softs à faire. Mais je ne vois pas en quoi le fait de forcer par abs + intval un $_GET de qqch qu'on attend numérique serait une solution douteuse ... Après tout, ce n'est pas le gerne de donnée que l'utilisateur entre à la main, donc forcément je sais à quoi je m'attends, même si une modif de l'URL est faisable. Justement le transtypage permet de s'affranchir de certains soucis de la modif par le hacker du dimanche de l'URL ...
 
pour le extract($_POST), par contre, je n'utilise pas  :)


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

Marsh Posté le 19-11-2008 à 18:30:56    

moi non plus, heureusement :)

Reply

Sujets relatifs:

Leave a Replay

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