Из того, что я понял, на самом деле здесь не происходит никакого en / decoding. Похоже, вы просто хотите получить флаг для полного URL-адреса, сохранить его в БД и позволить пользователю позже ввести этот флаг в форму для извлечения (и предположительно перехода) сохраненного URL-адреса.
Учитывая это, сначала давайте сгенерируем строку. Есть несколько способов сделать это, но вот простой пример:
function derive_flag() {
$flag_len = 6;
$chars = 'abcdefghijklmnopqrstuvwxyz1234567890';
$ret = '';
//iteratively build the flag, with a random character from $chars
for($f=0; $f<$flag_len; $f++) $ret .= substr($chars, rand(0, strlen($chars)-1), 1);
return $ret;
}
echo derive_flag(); //e.g. "ax9sb9"
Затем вы сохраняете это в своей БД для текущего URL. Таким образом, ваша таблица поиска может называться urls
и выглядеть следующим образом:
-------------------
| id | flag | url |
-------------------
и быть заполненным как
---------------------------------
| id | flag | url |
---------------------------------
| 1 | ah69vm | https://foo.bar |
---------------------------------
Тогда, когда пользователю нужно извлечь URL из флага, у вас просто есть форма, которая ищет в этой БД. Для этого примера я предполагаю, что flag
отправляется в поле POST из формы. Очевидно, что вам нужно выполнить проверку формы, чтобы убедиться, что флаг был отправлен.
//$db is your DB connection via new mysqli()
if ($stmt = $db->prepare('SELECT url FROM urls WHERE flag = ?')) {
$stmt->bind_param('s', $_POST['flag']);
$stmt->execute();
$stmt->bind_result($url);
$stmt->fetch();
//URL now lives in $url - print it out, go to it, whatever
$stmt->close();
}
(К вашему сведению, если этот код БД выглядит странно, это пример использования подготовленных операторов . Это хороший метод для безопасных транзакций БД, например, чтобы избежать внедрения SQL.)