Impossible de récupérer une variable avec $_GET['id'] - PHP - Programmation
Marsh Posté le 07-01-2013 à 21:35:07
Bon déjà, ton code pas échappé, c'est vraiment crado.
Mais au dela de ça, essaye avec un id fixe dans le premier fichier, et dans le second fichier fais un print_r($_GET); : soit tu as une erreur et ça veut dire que le tableau $_GET n'existe pas, soit le tableau ne contient pas ta variable id.
Affiche-nous aussi le résultat de echo ini_get('magic_quote_gpc')
Marsh Posté le 07-01-2013 à 21:45:33
alors après modification ça me met :
"Array ( [nom] => nom [adr] => adresse [tel] => 0561071167 [mail] => test@test.fr [dispo] => dispo )"
on dirait que mon id est écrasé par mes autres variables non ?
edit : désolé pour mon code :s
Marsh Posté le 08-01-2013 à 11:47:27
Bonjour,
Votre façon de coder n'est vraiment pas propre...
Déjà pour la requête:
Code :
|
Dans votre requête, il y avait un double quote qui se baladait.
Marsh Posté le 08-01-2013 à 12:09:01
Benh_31 a écrit : alors après modification ça me met : |
Je dirais surtout que le array que tu mentionnes montre que tu viens pas du même "formulaire". Si tu venais de ta page saisieunevisite.php?id=NNN
En faisant un print_r($_GET), t'aurais juste "id" dans le array.
Marsh Posté le 08-01-2013 à 13:09:15
Par rapport à ce que vous me dites tsoko, aucun changement observé
par rapport à rufo, j'ai également un formulaire dans ma page saisievisite.php.
Du coup, si j'ai bien compris, le $_GET ne sais pas à quoi se rapporter entre ma variable passé d'une page à l'autre et mon formulaire c'est ça ?
(je sens que je dis n'importe quoi excusez moi pitiééé)
Marsh Posté le 08-01-2013 à 13:13:52
Je pense que tu te trompes de formulaire : si tu cliques sur le lien saisieunevisite.php?id=NNN alors tu vas avoir dans $_GET le bon id mais pas l'autre formulaire qui se situait sur la page de départ (au moment du clic sur le lien).
Si tu cliques sur le bouton "envoyer" qui poste le formulaire (via la méthode POST, je parie), aucun chance d'avoir le contenu de $_GET["id"] sauf si dans le formulaire, tu ajoutes un champ caché input type hidden avec comme valeur le contenu de l'id.
Marsh Posté le 08-01-2013 à 13:41:47
hum.. c'est confus,
déjà, je n'utilise jamais POST (t'as perdu ^^).
Mis à part ça, je vous explique le déroulement de mon code :
1 : j'ai un formulaire pour rechercher des biens (des maisons plus précisément) à partir de mots clés.
2 : sur chaque résultat, via une requète MySQL, je récupère l'id de mon bien (idbien).
Jusque là, tout marche, si j'essaie d'afficher chaque idbien, ça m'affiche correctement mes ids.
3 : sur chaque résultat, je fais un lien (visiter) qui envoie ce fameux idbien.
4 : je le récupère sur une autre page (saisievisite.php) qui permet grâce à un formulaire, d'ajouter dans ma bdd, le nom, adresse, etc.. de mon client (saisie dans mon formulaire) et aussi la visite avec l'id du nouveau client et l'id du bien. et ça, ça ne marche pas
J'ai essayé d'expliquer simplement, par pour toi (^^), mais pour moi ^^ parce que je n'arrive pas à comprendre où se situe mon problème de formulaire.
Comme ça tu pourras me l'expliquer plus facilement si ça te dérange pas trop
merci d'avance.
Marsh Posté le 08-01-2013 à 15:08:25
Ben une fois sur ta page saisievisite.php, comme je te le disais, faut mettre dans un champ input type hidden le contenu de $_GET['id']. Comme ça, quand tu vas poster ton formulaire, t'auras pas de pb, tu retrouveras ton idbien.
A noter que POST est mieux je pense pour les formulaire. Tu sembles oublier que poster un formulaire en GET, c'est être contraint par les 2 ko de données postable via un formulaire puisque qu'en fait, tu envoies le contenu du formulaire dans l'url de la page traitant le formulaire. Or GET est limité en général (dépend des navigateurs) à 2 ko. Donc, si un formulaire prévoit l'upload d'un fichier joint, t'es mal
Par ailleurs, c'est un peu plus dure de modifier le contenu d'un formulaire envoyé via POST que via GET.
Dans ton cas, je peux très bien appeler ta page saisievisite.php?id=1000&nom=Toto&adr=test....
sans être passé par ton site (les écrans qui précède saisievisite.php). Et en version plus méchante, je peux faire du sql injection ou exploiter une faille xss (cela dit, je peux le faire avec un formulaire post)...
Marsh Posté le 08-01-2013 à 18:32:26
Je débute le php, c'est pour ça que tout ces problèmes ne me viennent pas à l'esprit ^^.
Je vais tester tout ça, je vous tiens au courant
Merci pour les explications
Marsh Posté le 08-01-2013 à 19:40:50
ça marche toujours pas
j'ai fais ça dans ma première page :
Code :
|
ça dans ma deuxième pour le formulaire :
Code :
|
ça pour ma requête :
Code :
|
et il me dit ça dans le code source de ma page :
Code :
|
la ligne 88 correspond à celle ci :
Code :
|
qu'est ce qui ne va pas ?
Marsh Posté le 08-01-2013 à 21:01:57
Benh_31 a écrit :
|
La requête après un clic sur le lien est fait en GET, il faut utiliser $_GET['id'] ou $_REQUEST['id'] pour récupérer la variable id.
Après validation du formulaire, la variable $_GET['id'] / $_REQUEST['id'] / $_POST['id'] n'existe plus/pas, et $_POST['idb'] ou $_REQUEST['idb'] contient la valeur précédente de la variable id.
Marsh Posté le 09-01-2013 à 00:24:11
J'apporte quelques précisions
Comme dit maintes fois, l'id n'existe plus après validation du formulaire car tu changes le contexte de la page.
Deux solutions : tu mets ton id dans un champ hidden et donc le passe en même temps que les autres variables, ou bien tu souhaites le péréniser sur plusieurs pages et dans ce cas-là tu le passe en session.
Pour le versus GET/POST.
Ca dépend de l'usage.
POST est utile pour les gros formulaires, genre textarea ou beaucoup de champs input.
GET passe via l'url donc limitation à 2048 caractères sur les anciens navigateurs. Le nouvel IE et les autres sont quasi illimités, j'ai testé avec d'énormes urls et ça passe.
GET requiert moins de ressources réseau que POST, et Google recommande de passer autant de formulaires que possible en GET, surtout quand tu fais de l'AJAX.
GET rend ton formulaire crawlable par Google. Attention donc à ce que tu mets dedans, sauf si ton but est d'indexer des pages (genre : formulaire de recherche).
Marsh Posté le 09-01-2013 à 10:06:33
Benh_31 a écrit : ça marche toujours pas
|
Gros malin, tu fais appel à une variable id dans $_POST qui n'existe. Normal, puisque id est passée à ta page via la méthode get (donc dans $_GET) et non la méthode post
Faut donc mettre :
Code :
|
Mais attention, comme tu sembles utiliser la même page php pour afficher le formulaire et son traitement (pas top comme méthode), je te suggère de faire un truc du genre :
Code :
|
Et dans ton processus de traitement du formulaire, tu t'assures que !empty($_POST['idb']) == true et $_POST['idb'] > 0
Marsh Posté le 09-01-2013 à 10:07:38
CyberDenix a écrit : J'apporte quelques précisions |
Quel est l'intérêt qu'un formulaire soit crawlable?
Marsh Posté le 09-01-2013 à 11:20:54
CyberDenix a écrit : Pour le versus GET/POST. |
+1
Il faut aussi savoir que :
- GET est à privilégier pour des requêtes dite de "consultation" qui n'introduise pas de nouvelles données
- POST est à privilégier pour la création de données
- GET ne doit jamais être utiliser pour la création de données car il y a un risque de doublon involontaire accru par rapport à POST
Au niveau de l'historique :
- la requête GET et ses paramètres sont stockés dans l'historique du navigateur, donc il faut éviter d'y transmettre des données sensibles.
- les POST émettent des alertes au niveau du navigateur lorsque l'on essaie de faire des retours-arrières.
Pour éviter d'historiser une requête POST, il faut faire une redirection HTTP vers une page de type "consultation" après le traitement d'une requête POST.
Au niveau du cache :
- les pages en GET peuvent être "cachée" par la navigateur
- les requêtes POST ne sont jamais "cachées" sauf sur Safari Mobile dernière version où Apple a décidé que Cache-Control aurait le dernier mot.
Marsh Posté le 09-01-2013 à 14:29:28
czh, je partage ton avis. Juste un point de détail, on peut tout à fait créer des doublons via POST, mais c'est plus dur qu'avec GET.
Marsh Posté le 09-01-2013 à 14:47:20
En tout ça mon problème est résolue, il venait en partie de mes requêtes MySQL
merci à tous
Marsh Posté le 10-01-2013 à 22:29:54
rufo a écrit : |
La réponse est dans la question :
Pour que les pages soient explorées par Google.
Exemple :
Tu fais un comparateur de prix.
Tu as un search.
Tu veux que tous tes produits soient découverts.
Tu rends ton search crawlable en le passant en GET.
Marsh Posté le 07-01-2013 à 20:29:41
Bonsoir à tous,
c'est désespéré que je vous expose mon problème qui me bloque depuis 3 jours :
je veux simplement faire passer un id d'une page à l'autre, l'id est bien envoyé, mais je suis incapable de le récupérer avec $_GET['id']
regardez mon code : y a aucune erreur ! en tout cas je n'en vois pas
voila comment je fais pour envoyer via mon lien, mon id, et je le récupère comme ça :
et ça me trouve toujours un problème à la ligne du $_GET['id'] où il ne reconnait pas ma variable id et me dit :
"Notice: Undefined index: id in /home/public_html/saisieunevisite.php on line 103"
mon code est bien évidement dans une balise php aidez moi s'il vous plait j'en peut plus
merci d'avance.