我应该使用$ _GET来动态加载html吗?

时间:2017-04-01 09:11:33

标签: php jquery html css mysql

我正在使用PHP,MySQL(PDO),JQuery和HTML(CSS)在社交网站上工作。我现在在个人资料页面上工作,我想确定用户是在他们自己的页面还是其他人,以确定他们将拥有什么输入。我想为个人资料页面保留一个框架并加载相应的选项,而不是有两个不同的页面(我的个人资料与其他个人资料)。

我正在学习JQuery和PHP,所以现在我想,在JQuery中,我可以获得$ _GET(?username =)并将其与用户ID进行比较。登录,然后根据它加载我需要的组件。

或者我在PHP中确定用户然后运行某个脚本来加载组件。

这些方式会起作用,还是有不同的/更好的方法来做到这一点?

5 个答案:

答案 0 :(得分:1)

我认为您不能在JavaScript中使用$_GET

相反,有一个URLSearchParams

const url = new URL('http://domain/path?username=someone');
const username = new URLSearchParams(url.search).get('username)'; // someone

答案 1 :(得分:0)

在jquery中,你可以使用数据类型为html的$ .get()

答案 2 :(得分:0)

您可以在JavaScript中回显PHP的GET值。但请确保在没有makeItSafe(您必须自己定义)的情况下,可以利用此代码执行跨站点脚本攻击:

<script>
var myGlobalUserID = "<?php echo makeItSafe($_GET['userID']); ?>";
</script>

答案 3 :(得分:0)

最好的安全措施是不要依赖浏览器中发生的任何事情。

这意味着你应该总是在服务器上找出权限(在PHP端)。

变体1(简单)

假设您已对用户进行了身份验证,并在PHP中将用户设为$currentUser,其ID为$currentUser->id

现在,此用户想要通过请求网址“个人资料?id = 555”

来查看某个资料

所以这里(基本上)你在PHP方面做了什么:

$requestedProfile = (int)$_GET['profile'];
if ($requestedProfile == $currentUser->id) {
    // they want own profile
    show_controls_for_own_profile();
} else {
    // they want someone else's profile
    show_controls_for_other_profile();
}

在这种情况下,jQuery在这里无关。

变式2(单独请求)

此外,我们假设您要缓存整个配置文件页面以快速将其加载到浏览器中,并且仅在此之后,ajax加载与用户权限相关联的其他控件。

然后你有两个控制器方法(php脚本,无论如何),每个都为它自己提供服务:

public function showProfile() {
    $requestedProfile = (int)$_GET['profile'];
    if (profile_exists($requestedProfile)) {
        show_the_profile($requestedProfile); // no check here
    }
}

上面的方法将返回通用配置文件页面的ID(带有空的“.controls”元素),在该页面上,一些 jquery 代码会要求服务器返回适当的用户变体 - 依赖部分。

$.ajax('/user-controls.php')
    .done(function(response) { $('.controls').html(response); });

请注意,它不告诉服务器任何用户ID - 服务器应该已经知道会话中当前经过身份验证的用户ID!

第二个函数与开头一样,只返回控件的HTML:

// Example of getting current profile from server's headers
function get_viewed_profile_id()
{
    // url of previous profile page, e.g. http://example.com/profile?id=555
    $referer = $_SERVER['HTTP_REFERER']; 
    $query = parse_url($referer, PHP_URL_QUERY); // id=555
    parse_str($query, $params); // ['id' => '555']
    return $params['id']; // 555
}

// we should store the authenticated user in session, 
// not rely on anything user sends from their browser
$currentUserId = $_SESSION['user']->id; 
$requestedProfileId = get_viewed_profile_id();

// now that we know both viewed profile and current user,
// we can compare them
if ($requestedProfileId == $currentUserId) {
    // they want own profile
    show_controls_for_own_profile();
} else {
    // they want someone else's profile
    show_controls_for_other_profile();
}

变体3(将PHP变量传递给javascript)

与上面相同,但您不依赖$_SERVER['HTTP_REFERER'],而是将一些逻辑转移到Javascript:

浏览器问:

// look up currently browsed profile from current window url
var q = new URLSearchParams(window.location.search);
var controlsURL = '/user-controls.php?viewedProfile=' + q.get('id');
// ask for controls, specifying the currently browsed profile
$.ajax(controlsURL)
    .done(function(response) { $('.controls').html(response); });

服务器响应:

function get_viewed_profile_id()
{
    return (int)$_GET['viewedProfile'];
}

// we should store the authenticated user in session, 
// not rely on anyhting user sends from their browser
$currentUserId = $_SESSION['user']->id; 
$requestedProfileId = get_viewed_profile_id();

// now that we know both viewed profile and current user,
// we can compare them
if ($requestedProfileId == $currentUserId) {
    // they want own profile
    show_controls_for_own_profile();
} else {
    // they want someone else's profile
    show_controls_for_other_profile();
}

答案 4 :(得分:0)

只需在页面上声明一个隐藏字段

<input type="hidden" id="username" value="<?php echo $_GET['username'];?>">

获取用户名值。 然后只需在jquery中获取该值

<script>
$(document).ready(function(){
var username = $("#username").val();
if(username == "abc"){
$("#div_one").show();
$("#div_two").hide();
}
});
</script>

使用您要向用户展示的if()条件和hide()show()方法加载组件。