Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 动态更改页面 $.get('go',函数(更改){ $('#center').load('page/.html'); });_Php_Jquery_Html - Fatal编程技术网

Php 动态更改页面 $.get('go',函数(更改){ $('#center').load('page/.html'); });

Php 动态更改页面 $.get('go',函数(更改){ $('#center').load('page/.html'); });,php,jquery,html,Php,Jquery,Html,我有一些像这样的东西,但它不起作用。我只希望加载的页面(?go=name)不会刷新整个页面。首先,它容易受到LFI漏洞(本地文件包含)的攻击。考虑某人进入时发生了什么: 此外,您不能只回显您的文件名并期望它将其打印出来……如果您希望将页面内容包含在$go中并打印出$go,请使用: <?php $go = $_GET['go']; if(!empty($go)) { if(is_file("page/$go.html")) include "page/$go.html

我有一些像这样的东西,但它不起作用。我只希望加载的页面(?go=name)不会刷新整个页面。首先,它容易受到LFI漏洞(本地文件包含)的攻击。考虑某人进入时发生了什么:

此外,您不能只回显您的文件名并期望它将其打印出来……如果您希望将页面内容包含在$go中并打印出$go,请使用:

<?php

  $go = $_GET['go'];


  if(!empty($go)) {

    if(is_file("page/$go.html")) include "page/$go.html";

    else echo "<h1>Error 404</h1><p>Strona nie odnaleziona</p><p>Warunek ?go jest niepoprawny</p>";
  }

  else include "page/start.html";

  ?>
<script>
$.get('go', function(change) {
  $('#center').load('page/<?php echo $go ?>.html');
});
</script>
编辑:实际上,如果您使用我上面的代码,他们仍然可以访问本地目录中的文件,例如.htpasswd和.htaccess,所以不要让您的用户包含任何本地文件。有更好的方法来解决你的问题


至于AJAX,请遵循jeroen的建议。

您混合了两个AJAX函数,
$.get
.load
,并且缺少一个事件处理程序

您将需要以下内容:

$go = urldecode([$_GET['go']);
$go = str_replace("/", "", $go);
$go = "page/$go.html";
如果
go
按钮位于页面的刷新部分,我使用了
live
而不是
change


注意我猜您想根据选择刷新页面的某个部分,但问题/代码并不完全清楚…

这是您想要实现的吗

$('#go').live('change', function() {
  $('#center').load('page/' + $(this).val() + '.html');
});

$(文档).ready(函数(){
var getgo='';
if(getgo.length){
$('#center').load('page/'+getgo+'.html');
}
});

它将把page/[your go param].html的内容加载到#center。

关于安全性的好消息(尽管他在末尾添加了
.html
),但是使用
basename()
应该足够了。谢谢,我不知道PHP有这个功能。在任何情况下,如果使用basename(),仍然可以在当前目录中包含如下文件:@malfy,出于安全考虑总是更好:-)@jeroen:00 ESPCape使用了他额外的.html扩展名,因为PHP使用了类似C的字符串。如果您只是想在初始页面加载时加载数据,您不需要任何
javascript
,只需使用
PHP
即可。除非你想延迟加载,但这里似乎不是这样。是的,我也不知道你为什么要这样做,这只是我对问题的解释。但是,在客户端这样做可以避免在服务器端的url参数中包含一个名为的页面的安全问题!尽管OP似乎并不担心安全性:-)
<script type="text/javascript">
    $(document).ready(function() {
        var getgo = '<?php echo $_GET['go']; ?>';
        if(getgo.length) {
            $('#center').load('page/'+getgo+'.html');
        }
    });
</script>
<div id="center"></div>