通过从URL获取user_name来使用PHP和MYSQL创建用户页面:user / username

时间:2015-05-26 15:36:52

标签: php mysql

我正在使用PHP标头重定向将用户从account/?id=$id重定向到user/$username

只要用户存在,成功就需要account/?id=1user/samuel。现在,此页面user/samuel非常空(404)。

如何使用user/samuel手册之类的内容返回isset($_GET[])中的用户数据?此外,当然还要添加MYSQL查询来检索具有从URL中提取的用户名的用户的数据,并从数据库表中获取他们的数据。我将把所有代码放在user/index.php

只要我能让account/?id=$id从URL(参数)获取$id并执行其他数据库操作,我认为也可以从URL获取$ username ..即使{{ 1}}可以做到,但我不想在网址中加入user/?username ..

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是一个相当广泛的主题,您需要做的是解析网址 - IE将其分成几部分,然后将网址与一组操作相匹配。这通常称为路由。

一个天真的实现将是:

$parts = explode($_SERVER['REQUEST_URI'], '/');

if ( $parts[-2] === 'user' && $parts[-1] ) {
   $stmt = $pdo->prepare("SELECT * FROM 'users' WHERE username = ? OR id = ?");
   $result = $stmt->execute(array($parts[-1], array($parts[-1]));
   // ... do something if the user is found or not.
}

但如果网址包含查询参数(?foo=bar)或哈希值(#foo),则会失败。

相反,您可以使用parse_url来确保只使用路径。

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$parts = null;

// Match the url with a regular expression.
preg_match(/^\/user\/(\w*)$/, $path, $parts);

if ( count($parts) == 2 ) {
   $stmt = $pdo->prepare("SELECT * FROM 'users' WHERE username = ? OR id = ?");
   $result = $stmt->execute(array($parts[-1], array($parts[-1]));
   // ... do something if the user is found or not.
}

但最后您可能需要考虑使用SilexSlim等微框架或使用Routing component from Symfony2,以便您可以专注于构建应用程序而不是重新发明轮子

答案 1 :(得分:1)

如果您使用Url Rewriting(又名友好网址)

,可能会更好

你可以看到这个链接回答了同样的问题,尽管你的情况有点不同。 Apache friendly urls

由于您无法将$ id转换为$ username(两者都是不同的值),我建议您将链接更改为' user / ID'而不是' user / USERNAME'。