Aller au contenu

Probleme de variable dans URL


LispMan

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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']);
}

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Que Php ne fasse pas de différence, c'est une chose.

Que j'en fasse une en est une autre :D

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

( et si l'on ne sait pas, on demande au Hub :D )

Lien vers le commentaire
Partager sur d’autres sites

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é par hcplayer
Lien vers le commentaire
Partager sur d’autres sites

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é par LiSpMaN
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Que Php ne fasse pas de différence, c'est une chose.

Que j'en fasse une en est une autre :D

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

( et si l'on ne sait pas, on demande au Hub :D )

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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é par LiSpMaN
Lien vers le commentaire
Partager sur d’autres sites

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

Mêmes mots, mêmes remèdes :

if( ! in_array($_GET['variable_passe_par_URL'],@$array_all_vars))
Lien vers le commentaire
Partager sur d’autres sites

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é par LiSpMaN
Lien vers le commentaire
Partager sur d’autres sites

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

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

Lien vers le commentaire
Partager sur d’autres sites

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

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...