LispMan Posté 6 Décembre 2005 Posté 6 Décembre 2005 Bonsoir, voici mon probleme: j'ai un site ou je passerais d'une page a une page en passant la variable dans l'URL avec un POST, jusque la rien de grave sauf que cette meme variable peut etre changee par n'importe qui et la ca me donne des erreurs et en plus quelqu'un de mal intentionne pourrait connaitre le chemin exact de ma base de donnee, mon code je l'ai cree ainsi: <?php session_start(); include("_essaiconnexion.php"); if (isset($_REQUEST['variable_passee_par_URL'])) { $ma_variable = $_REQUEST['variable_passe_par_URL']; $query="SELECT * FROM prodotti WHERE id='$ma_variable'"; $results = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_array($results); extract($row); } else { recharger la meme page } ?> donc j'ai mis un if-else, ce que je voudrais faire c'est si la variable n'est pas la bonne dans l'url (par exemple quelqu'un la change manuellement dans la barre d'adresses du navigateur), ca recharge la page qui etait avant, j'ai essaye de mettre ca dans la partie else: $url="alimentatori.php"; header("Location: ".$url); mais ca marche pas. quelqu'un aurait une idee? Merci beaucoup
Anonymus Posté 6 Décembre 2005 Posté 6 Décembre 2005 en passant la variable dans l'URL avec un POST C'est en GET, non en POST. if (isset($_REQUEST['variable_passee_par_URL'])) { Teste si la variable existe. Or, si quelqu'un la change, elle existe toujours. Ce n'est pas pour cela qu'il faut l'accepter. Ce qu'il te faudrait, c'est comparer la valeur entrée dans l'url avec une liste de valeurs prédéfinies. On fait ceci avec un tableau. Si la variable est dans le tableau, alors on l'accepte. Sinon, on retourne d'où l'on vient. $array_all_vars = array("valeur1","valeur2","valeur3","valeur4")if(in_array($_GET[''variable_passee_par_URL''],$array_all_vars)){// code ok}else{header("Location: ".$_SERVER['HTTP_REFERER']);}
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 Ok merci je teste, au fait pour le GET/POST, je croyais qu'en mettant REQUEST php ne faisait pas de difference entre les deux (mais j'aurais aussi mal compris puisqu'un passage par URL equivaut a un GET si j'ai bien ompris ce que tu m'as dit?)
Anonymus Posté 6 Décembre 2005 Posté 6 Décembre 2005 Que Php ne fasse pas de différence, c'est une chose. Que j'en fasse une en est une autre Je déconseille l'utilisation de REQUEST (dans ce cas de figure, en tout ca), car tu sais précisément d'où vient ta variable. Elle vient de l'url. Dans ce cas précis, c'est du GET (effectivement), et non du POST. Accepter toutes les variables est assez risqué. Un script qui 't'attaque' en POST, et tu acceptes, sans raisons En conclusion : Si l'on sait si c'est du POST ou du GET, alors autant se servir des bonnes variables globales ( et si l'on ne sait pas, on demande au Hub )
hcplayer Posté 6 Décembre 2005 Posté 6 Décembre 2005 (modifié) Bonjour, $query="SELECT * FROM prodotti WHERE id='$ma_variable'"; tu cherches un id apparrement, tu peux d'une part tester, si ta variable est un nombre via la fonction "is_numeric()", si elle est dans ta liste d'id de ta base, après ca devrait suffire quand même Modifié 6 Décembre 2005 par hcplayer
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 (modifié) j'ai essaye, ca me donne toujours les 2 memes erreurs a savoir: 1/ Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\monsite\_essaiconnexion.php:9) in c:\program files\easyphp1-8\www\monsite\getid.php on line 15 (dans mon _essaiconnexion.php il ya juste les parametres de connexion a ma bdd, rien de plus) 2/ Notice: Undefined variable: id in c:\program files\easyphp1-8\www\monsite\getcomponente.php on line 244 (id c'est un champs a sortir de ma bdd) le code que j'ai mis: <?php session_start(); include("_essaiconnexion.php"); $array_all_vars = array("Valeur_passe_par_URL"); if(in_array($_GET['variable_passe_par_URL'],$array_all_vars)){ // code ok $mavariable = $_GET['variable_passe_par_URL']; $query="SELECT * FROM prodotti WHERE id='$mavariable'"; $results = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_array($results); extract($row); } else{ header("Location: ".$_SERVER['HTTP_REFERER']);//probleme headers already sent a ce niveau } ?> Modifié 6 Décembre 2005 par LiSpMaN
Anonymus Posté 6 Décembre 2005 Posté 6 Décembre 2005 Pour le header, c'est parce que tu renvoies une information au navigateur. Ca peut être une ligne blanche, un simple caractère, ou n'importe quoi. Pour ton erreur, tu la résoud avec un arobase devant le nom de la variable, ainsi : if(@$id =="1") au lieu de : if($id =="1") Cela t'évites d'avoir à vérifier si cette dernière existe
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 Que Php ne fasse pas de différence, c'est une chose. Que j'en fasse une en est une autre Je déconseille l'utilisation de REQUEST (dans ce cas de figure, en tout ca), car tu sais précisément d'où vient ta variable. Elle vient de l'url. Dans ce cas précis, c'est du GET (effectivement), et non du POST. Accepter toutes les variables est assez risqué. Un script qui 't'attaque' en POST, et tu acceptes, sans raisons En conclusion : Si l'on sait si c'est du POST ou du GET, alors autant se servir des bonnes variables globales ( et si l'on ne sait pas, on demande au Hub ) <{POST_SNAPBACK}> je prend note, merci pour le conseil. Bonjour, $query="SELECT * FROM prodotti WHERE id='$ma_variable'"; tu cherches un id apparrement, tu peux d'une part tester, si ta variable est un nombre via la fonction "is_numeric()", si elle est dans ta liste d'id de ta base, après ca devrait suffire quand même <{POST_SNAPBACK}> je sais pas si ca afficherais un message d'erreur dans la page au cas ou l'id ne serait pas dans la liste (c'est ce que je cherche d'eviter)
Anonymus Posté 6 Décembre 2005 Posté 6 Décembre 2005 En fait, je te conseille de changer ton programme : testes d'abord si la variable est ok, et vois ensuite les actions : <?php $array_all_vars = array("Valeur_passe_par_URL"); if( ! in_array($_GET['variable_passe_par_URL'],$array_all_vars)){ header("Location: ".$_SERVER['HTTP_REFERER']);//probleme headers already sent a ce niveau }session_start(); include("_essaiconnexion.php"); $mavariable = $_GET['variable_passe_par_URL']; $query="SELECT * FROM prodotti WHERE id='$mavariable'"; $results = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_array($results); extract($row); ?> Ca devrait mieux marcher
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 Pour le header, c'est parce que tu renvoies une information au navigateur. Ca peut être une ligne blanche, un simple caractère, ou n'importe quoi.Pour ton erreur, tu la résoud avec un arobase devant le nom de la variable, ainsi : if(@$id =="1") au lieu de : if($id =="1") Cela t'évites d'avoir à vérifier si cette dernière existe <{POST_SNAPBACK}> la 2eme erreur a ete resolu avec le _AT_ merci. Mais reste toujours le probleme des headers, j'ai enleve tous les espaces rien a faire, j'ai mis mon include apres l' if(in_array...) et la quand je click sur mon lien la meme page se recharge, je l'ai donc renvoye en haut et je retrouve mon probleme...
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 En fait, je te conseille de changer ton programme : testes d'abord si la variable est ok, et vois ensuite les actions : <?php $array_all_vars = array("Valeur_passe_par_URL"); if( ! in_array($_GET['variable_passe_par_URL'],$array_all_vars)){ header("Location: ".$_SERVER['HTTP_REFERER']);//probleme headers already sent a ce niveau }session_start(); include("_essaiconnexion.php"); $mavariable = $_GET['variable_passe_par_URL']; $query="SELECT * FROM prodotti WHERE id='$mavariable'"; $results = mysql_query($query) or die(mysql_error()); $row = mysql_fetch_array($results); extract($row); ?> Ca devrait mieux marcher <{POST_SNAPBACK}> j'ai essaye, il arrive exactement ce qui s'est passe quand j'ai descendu mon _essaiconnexion.php apres mon if, a savoir il recharge la page qui contient le lienvers la page dynamique.
Anonymus Posté 6 Décembre 2005 Posté 6 Décembre 2005 a savoir il recharge la page qui contient le lienvers la page dynamique. C'est à dire ?? Sinon, revient à la structure précédente, et regarde juste avant la balise <?php tu as probablement une ligne, ou un espace. C'est ce qui gène les headers, et renvoie une erreur. Sauf que... Si tu reviens à la structure précédente, tu risques d'avoir le problème dû aux sessions_start, que tu as envoyé avant le header("Location...
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 (modifié) a savoir il recharge la page qui contient le lienvers la page dynamique. C'est à dire ?? Sinon, revient à la structure précédente, et regarde juste avant la balise <?php tu as probablement une ligne, ou un espace. C'est ce qui gène les headers, et renvoie une erreur. Sauf que... Si tu reviens à la structure précédente, tu risques d'avoir le problème dû aux sessions_start, que tu as envoyé avant le header("Location... <{POST_SNAPBACK}> ca veut dire que par exemple, j'ai ma page d'acceuil www.monsite.som avec mon lien vers "page1.php?id=variable_passe_par_URL", a la place d'aller vers cette page il me re-actualise la page d'acceuil. pour enlever le probleme des headers, j'ai mis un ob_start() au debut et un ob_end_flush() a la fin, ca marche pour l'erreur headers mais ca me re'actualise toujours la page sans aller vers le veritable page en clicquant sur le lien une autre erreur que j'ai est Notice: Undefined index: variable_passe_par_URL in c:\program files\easyphp1-8\www\monsite\page1.php on line 4 et ceci au niveau de: if( ! in_array($_GET['variable_passe_par_URL'],$array_all_vars)) Modifié 6 Décembre 2005 par LiSpMaN
Anonymus Posté 6 Décembre 2005 Posté 6 Décembre 2005 Notice: Undefined index: variable_passe_par_URL in c:\program files\easyphp1-8\www\monsite\page1.php on line 4et ceci au niveau de: if( ! in_array($_GET['variable_passe_par_URL'],$array_all_vars)) Mêmes mots, mêmes remèdes : if( ! in_array($_GET['variable_passe_par_URL'],@$array_all_vars))
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 Mêmes mots, mêmes remèdes : <{POST_SNAPBACK}> cette fois ca n'a pas marche, toujours meme erreur
Anonymus Posté 6 Décembre 2005 Posté 6 Décembre 2005 Il fallait lire :: if( ! in_array(@$_GET['variable_passe_par_URL'],$array_all_vars)) Désolé
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 Il fallait lire :: Désolé <{POST_SNAPBACK}> En fait je l'avais essaye aussi, mais ca m'a donne le probleme ou y'a re-actualisation de ma premiere page (celle contenant le lien)
LispMan Posté 6 Décembre 2005 Auteur Posté 6 Décembre 2005 (modifié) J'ai revu mes liens, et j'ai trouve un probleme a ce niveau, j'ai donc corriger et la c'est bon quand je click sur le lien il va sur mapage1.php?id=variable_passe_par_URL. Mais la y'a d'autres probleme quand je change la variable directement dans la barre d'adresse, ca me donne: Undefined index: HTTP_REFERER in c:\program files\easyphp1-8\www\monsite\page1.php on line 6 en plus du headers apres...si je met un @ devant l'HTTP_REFERER ca va directement sous http://localhost/monsite avec tous mes dossiers qui apparaissent dans le navigateur!!! Modifié 6 Décembre 2005 par LiSpMaN
Anonymus Posté 7 Décembre 2005 Posté 7 Décembre 2005 Un problème après l'autre... Pour les images, dans ton dossier, il faut que tu créées un fichier index.php vide, que tu places à l'index de ce dossier. Ca regle le problème. Pour la modification de l'url directement, qui te donne une url, l'explication est simple. On teste la page précédente. S'il n'y en a pas, il prend l'index. Pour palier à ce problème, tu peux envoyer ce cher monsieur sur une page de ton choix, ainsi : if (empty($_SERVER['HTTP_REFERER'])) $_SERVER['HTTP_REFERER']="http://localhost/lapage_de_mon_choix.php"; Ca doit suffire.
LispMan Posté 7 Décembre 2005 Auteur Posté 7 Décembre 2005 Un problème après l'autre... Pour les images, dans ton dossier, il faut que tu créées un fichier index.php vide, que tu places à l'index de ce dossier. Ca regle le problème. Pour la modification de l'url directement, qui te donne une url, l'explication est simple. On teste la page précédente. S'il n'y en a pas, il prend l'index. Pour palier à ce problème, tu peux envoyer ce cher monsieur sur une page de ton choix, ainsi : if (empty($_SERVER['HTTP_REFERER'])) $_SERVER['HTTP_REFERER']="http://localhost/lapage_de_mon_choix.php"; Ca doit suffire. <{POST_SNAPBACK}> j'ai mis cette portion de code, mtn quand je change l'adresse manuellement dans la barre du navigateur, il commence a charger ma http://localhost/la_page_de_mon_choix.php infiniment sans arriver a la ouvrir.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant