Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1895 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Impossible de récupérer une variable avec $_GET['id']

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Impossible de récupérer une variable avec $_GET['id']

n°2170144
Benh_31
Posté le 07-01-2013 à 20:29:41  profilanswer
 

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 :(

Code :
  1. echo  '<td id=verifier>
  2.         <div id="bouton">
  3.          <a href="saisieunevisite.php?id='.$row["idbien"].'">Visiter</a>
  4.         </div>
  5.        </td></tr>';


voila comment je fais pour envoyer via mon lien, mon id, et je le récupère comme ça :  

Code :
  1. $sqlVis='insert into visiter
  2.       (idbien, iddemande, priorite)
  3.       values('.$_GET['id'].'",'.$idDem.',1);';


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.

mood
Publicité
Posté le 07-01-2013 à 20:29:41  profilanswer
 

n°2170146
CyberDenix
Posté le 07-01-2013 à 21:35:07  profilanswer
 

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')


---------------
Directeur Technique (CTO)
n°2170148
Benh_31
Posté le 07-01-2013 à 21:45:33  profilanswer
 

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

Message cité 1 fois
Message édité par Benh_31 le 07-01-2013 à 21:45:55
n°2170191
tsoko
Posté le 08-01-2013 à 11:47:27  profilanswer
 

Bonjour,
Votre façon de coder n'est vraiment pas propre...
Déjà pour la requête:

Code :
  1. <?php
  2.     //ancienne
  3. $sqlVis='insert into visiter
  4.           (idbien, iddemande, priorite)
  5.           values('.$_GET['id'].'",'.$idDem.',1);';
  6.   
  7. //nouvelle
  8.     $sqlVis="INSERT INTO `visiter`(`idbien`, `iddemande`, `priorite`) VALUES (".$_GET['id'].",".$idDem.",1)";
  9. ?>


Dans votre requête, il y avait un double quote qui se baladait.


---------------
Besoin d'aide pour votre projet? agence web
n°2170197
rufo
Pas me confondre avec Lycos!
Posté le 08-01-2013 à 12:09:01  profilanswer
 

Benh_31 a écrit :

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


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. :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2170198
Benh_31
Posté le 08-01-2013 à 13:09:15  profilanswer
 

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ééé)

n°2170199
rufo
Pas me confondre avec Lycos!
Posté le 08-01-2013 à 13:13:52  profilanswer
 

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.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2170205
Benh_31
Posté le 08-01-2013 à 13:41:47  profilanswer
 

hum.. c'est confus,
 
déjà, je n'utilise jamais POST (t'as perdu :p ^^).
 
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.

n°2170223
rufo
Pas me confondre avec Lycos!
Posté le 08-01-2013 à 15:08:25  profilanswer
 

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)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2170287
Benh_31
Posté le 08-01-2013 à 18:32:26  profilanswer
 

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 :)

mood
Publicité
Posté le 08-01-2013 à 18:32:26  profilanswer
 

n°2170298
Benh_31
Posté le 08-01-2013 à 19:40:50  profilanswer
 

ça marche toujours pas :(
 
j'ai fais ça dans ma première page :  

Code :
  1. echo  '<td id=verifier>
  2.         <div id="bouton">
  3.          <a href="saisieunevisite.php?id='.$row["idbien"].'">Visiter</a>
  4.         </div>
  5.        </td></tr>';


ça dans ma deuxième pour le formulaire :

Code :
  1. echo
  2.    '<form method="post">
  3.     <table border=10>
  4.      <tr>
  5.       <td>Nom</td>   <td><input type="text" name="nom"';
  6.       if(isset($_POST["nom"])){ echo 'value="'.$_POST["nom"].'"';}
  7.       echo "/>";
  8.   echo  '</tr>
  9.      <tr>
  10.       <td>Adresse</td>  <td><input type="text" name="adr"';
  11.       if(isset($_POST["adr"])){ echo 'value="'.$_POST["adr"].'"';}
  12.       echo "/>";
  13.   echo  '</tr>
  14.      <tr>
  15.       <td>Téléphone</td>  <td><input type="text" name="tel"';
  16.       if(isset($_POST["tel"])){ echo 'value="'.$_POST["tel"].'"';}
  17.       echo "/>";
  18.   echo  '</tr>
  19.      <tr>
  20.       <td>Mail</td>   <td><input type="text" name="mail"';
  21.       if(isset($_POST["mail"])){ echo 'value="'.$_POST["mail"].'"';}
  22.       echo "/>";
  23.   echo  '</tr>
  24.      <tr>
  25.       <td>Disponibilité</td> <td><input type="text" name="dispo"';
  26.       if(isset($_POST["adr"])){ echo 'value="'.$_POST["dispo"].'"';}
  27.   echo   '/>
  28.      </tr>
  29.     </table>
  30.     <br/>
  31.     <input type="submit" value="Valider" />
  32.     <input type="hidden" name="idb" value="'.$_POST['id'].'">
  33.    </form>';


ça pour ma requête :

Code :
  1. $sqlVis='insert into visiter
  2.       (idBien, idDemande, priorite)
  3.       values('.$_POST['idb'].'",'.$idDem.',1);';
  4.     mysql_query($sqlVis);


et il me dit ça dans le code source de ma page :

Code :
  1. Notice: Undefined index: id in /home/public_html/saisieunevisite.php on line 88


la ligne 88 correspond à celle ci :

Code :
  1. <input type="hidden" name="idb" value="'.$_POST['id'].'">


 
qu'est ce qui ne va pas ? :(

n°2170308
czh
Posté le 08-01-2013 à 21:01:57  profilanswer
 

Benh_31 a écrit :


Code :
  1. Notice: Undefined index: id in /home/public_html/saisieunevisite.php on line 88


la ligne 88 correspond à celle ci :

Code :
  1. <input type="hidden" name="idb" value="'.$_POST['id'].'">


 
qu'est ce qui ne va pas ? :(


 
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.

n°2170324
CyberDenix
Posté le 09-01-2013 à 00:24:11  profilanswer
 

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).

Message cité 2 fois
Message édité par CyberDenix le 09-01-2013 à 00:24:42

---------------
Directeur Technique (CTO)
n°2170354
rufo
Pas me confondre avec Lycos!
Posté le 09-01-2013 à 10:06:33  profilanswer
 

Benh_31 a écrit :

ça marche toujours pas :(
 
[...]
et il me dit ça dans le code source de ma page :

Code :
  1. Notice: Undefined index: id in /home/public_html/saisieunevisite.php on line 88


la ligne 88 correspond à celle ci :

Code :
  1. <input type="hidden" name="idb" value="'.$_POST['id'].'">


 
qu'est ce qui ne va 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  :pt1cable:  
 
Faut donc mettre :

Code :
  1. <input type="hidden" name="idb" value="'.$_GET['id'].'">


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 :
  1. if (isset($_GET['id'])) {
  2.    $idBien = $_GET['id'];
  3. } else if (isset($_POST[idb'])) {
  4.    $idBien = $_POST['idb'];
  5. } else {
  6.    $idBien = 0;
  7. }
  8. echo "<input type=\"hidden\" name=\"idb\" value=\"$idBien\">";


Et dans ton processus de traitement du formulaire, tu t'assures que !empty($_POST['idb']) == true et $_POST['idb'] > 0


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2170355
rufo
Pas me confondre avec Lycos!
Posté le 09-01-2013 à 10:07:38  profilanswer
 

CyberDenix a écrit :

J'apporte quelques précisions
 
[...]
 
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).


Quel est l'intérêt qu'un formulaire soit crawlable?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2170395
czh
Posté le 09-01-2013 à 11:20:54  profilanswer
 

CyberDenix a écrit :

Pour le versus GET/POST.
 
Ca dépend de l'usage.
 


 
+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.


Message édité par czh le 09-01-2013 à 11:38:38
n°2170448
rufo
Pas me confondre avec Lycos!
Posté le 09-01-2013 à 14:29:28  profilanswer
 

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.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2170451
Benh_31
Posté le 09-01-2013 à 14:47:20  profilanswer
 

En tout ça mon problème est résolue, il venait en partie de mes requêtes MySQL :)
 
merci à tous :)

n°2170654
CyberDenix
Posté le 10-01-2013 à 22:29:54  profilanswer
 

rufo a écrit :


Quel est l'intérêt qu'un formulaire soit crawlable?


 
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.


---------------
Directeur Technique (CTO)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Impossible de récupérer une variable avec $_GET['id']

 

Sujets relatifs
Récupérer des variables d'un fichier INIComment récuperer les IP visiteurs
Récupérer des fichiers via wget et SFTPTransfert d'une variable d'une page à l'autre
Recuperer et formatter un resultat sql dans un scriptPython utilisation variable globale
Utilisation .formula "=" & variablerécuperer un caractère dans un fichier avec read
lecture d'un istringstream , recuperer l'erreurRécupérer une URL en PHP contenue dans une page
Plus de sujets relatifs à : Impossible de récupérer une variable avec $_GET['id']


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR