Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用短URL将用户重定向到自定义表单?_Php_Mysql_Redirect_Url Rewriting_Short Url - Fatal编程技术网

Php 如何使用短URL将用户重定向到自定义表单?

Php 如何使用短URL将用户重定向到自定义表单?,php,mysql,redirect,url-rewriting,short-url,Php,Mysql,Redirect,Url Rewriting,Short Url,我有一个项目,用户可以导航到提供的短URL,它可以将每个人重定向到具有不同业务名称的类似表单 目前我有一个MySQL数据库,如下所示: tbl_Codes - shortURL (string of 5 alphanumeric characters) - businessID (ID of business which matches the ID in the table below) tbl_Business - businessID - businessName - other fie

我有一个项目,用户可以导航到提供的短URL,它可以将每个人重定向到具有不同业务名称的类似表单

目前我有一个MySQL数据库,如下所示:

tbl_Codes
- shortURL (string of 5 alphanumeric characters)
- businessID (ID of business which matches the ID in the table below)

tbl_Business
- businessID
- businessName
- other fields....
因此,导航到example.com/12345的人会看到一个与businessID匹配的企业名称的表单,而导航到example.com/abcde的人会看到一个相同的表单,但名称不同的企业

这是最好的方法吗?如果没有,怎么做

链接脚本使用PHP regex获取短URL,匹配数据库中的字符串,然后执行301重定向。如果不匹配,它将重定向到404页面(尽管我可能不会执行404位)

提前谢谢

这是代码,以防你不想点击链接。它来自一个教程:

<?php
$expectedURL = trim($_SERVER['URL']);
$split = preg_split("{:80\/}",$expectedURL);
$shortURL = $split[1];
// security: strip all but alphanumerics & dashes
$shortURL = preg_replace("/[^a-z0-9-]+/i", "", $shortURL);

// Check this string to see if it matches a short URL in our database.

$isShortURL = false;
$result = getLongURL($shortURL);
if ($result) { $isShortURL = true; }
$longURL = $result['longURL'];

// Finally, we check to see if our $isShortURL flag is set.
// If a matching short URL was found, we’ll redirect to it.
// If not, we’ll display our standard 404.

if ($isShortURL)
{
    redirectTo($longURL, $shortURL);
} else {
    show404();  // no shortURL found, display standard 404 page
}

//The primary function:
// Get the long URL associated with the passed short URL, if it exists.

function getLongURL($s)
{
    // define these variables for your system
    $host = ""; $user = ""; $pass = ""; $db = "";
    $mysqli = new mysqli($host, $user, $pass, $db);
    // you may just want to fall thru to 404 here if connection error
    if (mysqli_connect_errno()) { die("Unable to connect !"); }
    $query = "SELECT * FROM urls WHERE shorturl = '$s';";
    if ($result = $mysqli->query($query)) {
        if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            return($row);
        }
        } else {
            return false;
        }
    } else {
        return false;
    }
    $mysqli->close();
}

//Perform the URL redirection.

function redirectTo($longURL)
{
    // change this to your domain
    header("Referer: http://www.your-domain-here.com");
    // use a 301 redirect to your destination
    header("Location: $longURL", TRUE, 301);
    exit;
}

//Finally, display your standard 404 page here.

function show404()
{
    // display/include your standard 404 page here
    echo "404 Page Not Found.";
    exit;
}
?>

您发布的链接是。。。。好吧伊什。不过,有更好的方法可以做到这一点。然而,在你的情况下,我不认为这是你需要的

如果不深入查看代码,就不要使用正则表达式。使用htaccess文件并进行mod_重写,以将“shorturl”作为查询参数传入。使用$\u GET super-global通过PHP脚本访问。看起来你根本不需要重定向?只需使用业务id取出必要的数据


此外,在继续之前,如果可能的话,开始使用PDO,并为其构建一个DB类(包装器)。从长远来看,更多面向对象的方法将更好地为您服务。

您发布的链接是。。。。好吧伊什。不过,有更好的方法可以做到这一点。然而,在你的情况下,我不认为这是你需要的

如果不深入查看代码,就不要使用正则表达式。使用htaccess文件并进行mod_重写,以将“shorturl”作为查询参数传入。使用$\u GET super-global通过PHP脚本访问。看起来你根本不需要重定向?只需使用业务id取出必要的数据


此外,在继续之前,如果可能的话,开始使用PDO,并为其构建一个DB类(包装器)。从长远来看,更多面向对象的方法将更好地为您服务。

也许我经常发布这条消息:行

$query = "SELECT * FROM urls WHERE shorturl = '$s';";
看起来是我的最佳人选


(也被称为)

也许我发布这条消息太频繁了:那条线

$query = "SELECT * FROM urls WHERE shorturl = '$s';";
看起来是我的最佳人选



(也称为)

当您在外部单击url链接时,拥有一个form.php页面并在顶部设置一个GET var不是更容易吗?例如,从page index.php>form.php?busName=someBussiness,在该页面上使用$_GET[“busName”];?我不这么认为。用户不是来自该站点,因此应该使用短URL直接重定向到预填充的表单。当您从外部单击URL链接时,是否更容易拥有form.php页面并在顶部设置GET var?例如,从page index.php>form.php?busName=someBussiness,在该页面上使用$_GET[“busName”];?我不这么认为。用户不是来自该网站,因此应该使用简短的URL直接重定向到预先填写的表单。感谢您的意图,但代码示例来自教程。我不认为它会被逐字逐句地用在生产站点上。@Joe,相信我,这是很多次了。感谢您的意图,但代码示例来自教程。我不认为它会被逐字逐句地用在生产网站上。@Joe,相信我,这是很多次了。谢谢你的输入。我不是一个很好的后端开发人员,所以我边做边学。我只是对gzip文件和删除“www”中的.htaccess略知一二。你有没有这样的例子?遗憾的是,PDO和DB类目前比我的水平高了一点。没问题,这应该是有帮助的:仔细阅读,这确实是一个很好的选择。我还不知道,但这肯定是一个很好的回答。我很清楚,你的建议是这样的吗?mod_rewrite采用“短url”并将其写为
example.com/form.php?businessID=12345
——在这一点上,我使用$\u get用
12345
查找数据库?是的!确切地最棒的是mod_rewrite不仅仅做重定向,你的url看起来仍然“漂亮”,而且businessID作为查询字符串传递到form.php脚本的事实将是透明的。谢谢你的输入。我不是一个很好的后端开发人员,所以我边做边学。我只是对gzip文件和删除“www”中的.htaccess略知一二。你有没有这样的例子?遗憾的是,PDO和DB类目前比我的水平高了一点。没问题,这应该是有帮助的:仔细阅读,这确实是一个很好的选择。我还不知道,但这肯定是一个很好的回答。我很清楚,你的建议是这样的吗?mod_rewrite采用“短url”并将其写为
example.com/form.php?businessID=12345
——在这一点上,我使用$\u get用
12345
查找数据库?是的!确切地最棒的是mod_rewrite不仅仅做重定向,您的url看起来仍然“漂亮”,而且businessID作为查询字符串传递到form.php脚本的事实将是透明的。