为了培训,我决定编写一个缩短链接的服务。我目前面临以下问题:
添加尚未在数据库中的链接时,行为不太正确。让我解释一下 - 在输入中我插入需要缩短的链接。我按下提交,就是这样:) 页面被重新加载,链接被缩短并添加到数据库中。
要查看生成的链接,您需要引发错误,即尝试再次缩短此链接。为了更直观的展示,上传到主机
目前,我对 3 个选项感兴趣,然后这个组件将适合我(我计划将来将它添加到另一个实现中)。
1.基于问题,我想实现从数据库加载ajax数据。 一个小插曲,我知道谁这样写:
foreach ($sth as $existLink) {
echo '<h1>...</h1>';
echo '<ul>';
echo '<li>...</li>';
echo '</ul>';
}
他们在赌注中燃烧 :),但这是一个草案,现在我正在处理功能的实现,我将把“美”带到终点线。所以我会原谅你))
负责处理和缩短链接的文件:
<?php
include_once(__DIR__ . '/libraries/database.php');
$externalLink = $_POST['external_link'] ?? null;
function prepareExternalLink($link)
{
$result = trim($link);
$result = htmlspecialchars($result);
return $result;
}
$preparedLink = prepareExternalLink($externalLink);
$sth = db_query("SELECT url, short_key FROM short WHERE url= '" . $preparedLink . "'");
if (empty($_POST['external_link'])) {
echo 'Введите в поле ссылку, которую требуется сократь:';
} elseif (isset(db_query("SELECT url FROM short WHERE url= '" . $preparedLink . "'")->fetch()['url'])) {
// Должна подгружаться ajax
foreach ($sth as $existLink) {
echo '<h1>Такая ссылка уже есть в БД</h1>';
echo '<ul>';
echo '<li><strong>Внешняя ссылка</strong>: <a href="' . $existLink['url'] . '" target="_blank">' . $existLink['url'] . '</a></li>';
echo '<li><strong>Сокращенная ссылка</strong>: <a href="//' . $_SERVER['HTTP_HOST'] . '/&' . $existLink['short_key'] . '" target="_blank">http://' . $_SERVER['HTTP_HOST'] . '/&' . $existLink['short_key'] . '</a></li>';
echo '</ul>';
}
} else {
/*---- Генерация уникального id----*/
$letters = 'qwertyuiopasdfghjklzxcvbnm1234567890';
$count = strlen($letters);
$intval = time();
$result = '';
for ($i = 0; $i < 4; $i++) {
$last = $intval % $count;
$intval = ($intval - $last) / $count;
$result .= $letters[$last];
}
/*---- INSERT link in db---*/
$sthInsert = db_query("INSERT INTO short (url,short_key) VALUE (:original_link, :short_key)", [
'original_link' => $preparedLink,
'short_key' => $result . $intval
]);
// Ajax – появляется информация о добавленной ссылке
}
?>
<form style="margin-top: 10px;" method="post">
<input type="text" name="external_link">
<input type="submit" name="submit">
</form>
我用谷歌搜索的所有内容都无法适应我的任务......也许有人知道你可以在哪里看到类似的例子。
数据库我不是经常碰到,但是这里我也需要通过ajax来做。原则上,我进行了查询(不是在本机 j 上,而是在 jquery - 表单验证上),但是这里的数据库和我有点迷失了。
- 关于重定向。生成的缩短链接如下所示:example.com/&8hde935。如何制作没有特殊字符的缩短链接(在我的例子中,一个&符号),即example.com/8hde935。
.htaccess
DirectoryIndex index.php
Options -Indexes
Options +FollowSymLinks
php_flag register_globals off
RewriteEngine on
RewriteRule ^&(.*) /redirect.php?key=$1 [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('Ошибка при переадресации');
}
我知道是这种情况RewriteRule ^&(.*) /redirect.php?key=$1 [L],但我无法重写规则:(。
- 计算链接的点击次数。这个问题仍然是理论上的,但由于我寻求帮助,他们可以定位(到目前为止,没有具体细节)。如何计算缩短链接的点击次数?有一个假设是通过 cookie,但我不确定,我以前没有遇到过。
目前我有 1 个表 3 个字段(id、url、short_key)。我将补充表格,将来我将制作一个管理面板,其中包含有关已保存链接的信息。
术语。ajax 在数据库中没有这样的概念加载。是:使用 Ajax 向服务器发送请求。他会将他想要的任何东西放入数据库中。这将帮助您从数据库层中抽象出来。您不需要通过表单中的直接 post 方法发送表单,而是通过拦截 JavaScript 中的提交事件。使用 jQuery。使用其方法向服务器发送请求。ajax 并在响应方法中,您可以获取缩短的字符串并将其插入到页面上所需的 dom 对象中。这是如果服务器不返回错误。并在 php.ini 中单独创建一个 post 处理程序。您可以在同一个文件中,也可以在另一个文件中。主要是在 Ajax 请求中正确指定该文件的地址。在处理程序中,您将收到一个 POST 数组,将其插入数据库并返回响应。这里需要考虑响应格式(文本、json)。因为它的类型需要记在jquery的acc中。field (google) 因为如果 jquery 正在等待 json 并且您从 post 处理程序执行以下操作: echo $shortString; 然后jquery会返回格式错误。