Autor Zpráva
ForestCZE
Profil
Zdravím,

mám odkazy:

neco.php?neco1=5&neco2=1
neco.php?neco1=10&neco2=2
neco.php?neco1=15&neco2=3

Chci zamezit, aby ty hodnoty někdo nezaměnil, tak jsem vymyslel:

$pole1 = array('5', '10', '15');
$pole2 = array('1', '2', '3');

if(!in_array($_GET["neco1"], $pole1)) echo "Hodnota není v poli 1";
if(!in_array($_GET["neco2"], $pole2)) echo "Hodnota není v poli 2";

Problém je, že uživatel to může nakombinovat tak, že třeba:

neco1=5&neco2=1

přepíše na:

neco1=15&neco2=1

A bude to fungovat taky. Poradil by mi prosím někdo, jak to udělat, aby to nešlo kombinovat? Díky :-)
JaySee
Profil
ForestCZE:
No jestli nechceš, aby ti uživatelé něco manipulovali, nemůžeš jim dát tu možnost. Takže zamezit přepsání parametrů v GET není možné.

1) Co by tě mohlo přiblížit k řešení je odesílat tyto informace skrytě jako POST (přes skrytá formulářová pole, případně jQuery v nějakém callbacku).
2) Další možnost (pokud existuje konečné množství kombinací) je posílat jen zástupný symbol pro kombinaci, takže třeba &komb=4 a to si na serveru spráruješ s neco1=5&neco2=1.
3) Zůstaneš u toho co popisuješ a všechny vstupy budeš kontrolovat na serveru pro přípustné kombinace a dále nějak komunikovat případné chyby, tedy manipulace.

4) Ideálně to nakombinovat.
ForestCZE
Profil
JaySee:
odesílat tyto informace skrytě jako POST (přes skrytá formulářová pole

To mě vůbec nenapadlo.

Mám to takto:

<select onchange="location.href=this.options[this.selectedIndex].value">
<option value="neco.php?neco1=5&neco2=1">5</option>
<option value="neco.php?neco1=10&neco2=2">10</option>
<option value="neco.php?neco1=15&neco2=3">15</option>

Takže nevím, jak to udělat na POST.



pokud existuje konečné množství kombinací

Ano, existuje konečné množství.

Které řešení tedy doporučuješ? Díky.
peta
Profil
$a = $_GET["neco1"];
$b = $_GET["neco2"];
$c = in_array($a, $pole1);
if ($c===false || $pole1[$c]!==$b) {...}
Pokud nemas nastaveno $strict, tak in_array vraci pozici. Pokud je pozice 0, odpovida to pro podminku jako false, takze by tvuj kod pro neco1=5&neco2=1 vubec nemel fungovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: