我正在尝试创建一些用户可以选择各种选项并根据所选选项转到页面的内容。但是,用户必须能够在将来使用短URL访问唯一页面。
我想要做的例子:
[ ] 1st val
[x] 2nd val
[x] 3rd val
[x] 4th val
[ ] 5th val
在数据库中存储为:ID = 123DF3 VAL = 2,3,4
用户访问:http://website.com/123DF3/
获取页面:您已选择2,3和& 4。
有没有办法在不必将选项值的所有可能组合存储在数据库中(浪费和低效)?
示例:
ID = 123DF3 VAL = 2,3,4
ID = 223FR5 VAL = 2,4,3
ID = 323FG4 VAL = 4,3,2
ID = 253FR7 VAL = 4,2,3
ID = 623GR6 VAL = 3,4,2
ID = 724FR8 VAL = 3,2,4
等......随着价值量的增加,可能性越来越大。
另一种方法是在URL中包含每个变量,但如果有很多if值(例如http://website.com?v=1,2,3,4,5,6..),它会使URL非常长。)。
如果可能的话,我想尽量避免使用这种方法,但如果我无法想出一种创造性的方法来克服上述问题,我将不得不诉诸它。
示例输入:
array(40){[0] =>字符串(1)" 1" [1] =>字符串(1)" 2" [2] =>串(2) " 40" [3] =>字符串(1)" 3" [4] =>字符串(1)" 4" [5] =>字符串(1)" 5" [6] => 字符串(1)" 6" [7] =>字符串(1)" 7" [8] =>字符串(2)" 36" [9] =>串(1) " 8" [10] =>字符串(1)" 9" [11] =>字符串(2)" 10" [12] =>字符串(2)" 11" [13] =>字符串(2)" 38" [14] =>字符串(2)" 12" [15] =>字符串(2)" 13" [16] =>字符串(2)" 14" [17] =>字符串(2)" 15" [18] =>字符串(2)" 37" [19] =>字符串(2)" 39" [20] =>字符串(2)" 16" [21] =>字符串(2)" 17" [22] =>字符串(2)" 18" [23] =>字符串(2)" 19" [24] =>字符串(2)" 20" [25] =>字符串(2)" 32" [26] =>字符串(2)" 21" [27] =>字符串(2)" 22" [28] =>字符串(2)" 23" [29] =>字符串(2)" 24" [30] =>字符串(2)" 25" [31] =>字符串(2)" 26" [32] =>字符串(2)" 27" [33] =>字符串(2)" 28" [34] =>字符串(2)" 29" [35] =>字符串(2)" 30" [36] =>字符串(2)" 31" [37] =>字符串(2)" 33" [38] =>字符串(2)" 34" [39] =>字符串(2)" 35" }
**注意:可能无法订购这些值
答案 0 :(得分:1)
这是一个想法:
然后,当您的用户输入... / E时,您将E转换为1110,并且您知道选择了值2,3,4。这是快速,干净的,不需要在数据库中放置任何东西
这是一个实现:
D:\Java\jdk1.8.0_25\jre\bin>keytool.exe -import -alias kish -keystore "C:/Program Files/Java/jre1.8.0_25/lib/security/cacerts" -file D:/{my_server}/mycertificate.cer
Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
下一个可以采用任意数量值的实现:
function getID($selectedValues) {
$bits = 0;
foreach ($selectedValues as $v)
$bits += 1<<($v-1);
return dechex($bits);
}
function getSelectedValues($id) {
$bits = hexdec($id);
for ($i = 0; $i < 32; $i++)
if ( ($bits & (1<<$i)) != 0 )
$selectedValues[] = $i + 1;
return $selectedValues;
}
答案 1 :(得分:1)
最短且最容易解析的可能是base64_encode()
/ base64_decode()
:
<强> ENCODE:强>
$values = array(2,3,4);
$key = base64_encode(implode('|',$values);
<强>输出:强>
MnwzfDQ=
解码:(http://example.com/MnwzfDQ=)
$url = $_SERVER['REQUEST_URL'];
$key = basename($url);
$values = explode('|',base64_decode($key));