uniqid()
$db_check = db_query("select count(*) from short where short_key = '$key'")->fetchColumn();
if ($db_check) {
exit('Повтор ID'); //на самом деле надо перегенерить
}
function generateId($string = '', $len = 8)
{
$letters = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9));
$x = 0;
while ($x < $len) {
$string .= $letters[array_rand($letters)];
$x++;
}
$db_check = db_query("SELECT short_key FROM short WHERE 1")->fetchAll();
foreach ($db_check as $value) {
if ($value['short_key'] === $string){
exit('Повтор ID');
}
}
return $string;
}
еще такая штука есть в стандартном наборе https://www.php.net/manual/ru/function.uniqid.php
$_GET['key']
до ветвления. Значения нет, вот он и валится в ошибку.DirectoryIndex index.php
Options All -Indexes
php_flag register_globals off
RewriteEngine on
RewriteRule ^(.*)$ /redirect.php?key=$1 [QSA,L]
<?php
include_once(__DIR__ . '/libraries/database.php');
$key = htmlspecialchars($_GET['key']) ?? null;
if (isset(db_query("SELECT url, short_key FROM short WHERE short_key= '" . $key . "'")->fetch()['url'])) {
$sthSelectSingle = db_query("SELECT url, short_key FROM short WHERE short_key= '" . $key . "'");
header('HTTP/1.1 301 Moved Permanently');
header('Location:' . $sthSelectSingle->fetch(PDO::FETCH_OBJ)->url);
} else {
exit('Ошибка при переадресации');
}
<code>array(1) { ["key"]=> string(0) "" }</code>
Не пишите так. Никогда!
echo '<li><strong>Сокращенная ссылка</strong>: <a href="//' . $_SERVER['HTTP_HOST'] . '/&' . $existLink['short_key'] . '" target="_blank">http://' . $_SERVER['HTTP_HOST'] . '/&' . $existLink['short_key'] . '</a></li>';
RewriteRule ^&(.*) /redirect.php?key=$1 [L]
echo '<li><strong>Сокращенная ссылка</strong>: <a href="//' . $_SERVER['HTTP_HOST'] . '/&' . $existLink['short_key'] . '" target="_blank">http://' . $_SERVER['HTTP_HOST'] . '/&' . $existLink['short_key'] . '</a></li>';
RewriteRule ^(.*)/redirect.php?key= [L]