首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php打开了很多窗口

问Php打开了很多窗口
EN

Stack Overflow用户
提问于 2013-12-21 22:31:07
回答 2查看 96关注 0票数 0

我从另一个人那里获得了一个php脚本,由于某种原因,登录函数无法工作,除非它在一个新窗口中打开。(?我不知道为什么,但事实就是这样)在我从PHP文件中执行打开窗口javascript时,它会打开很多窗口。我想这是某种程度上的循环,所以我将javascript函数放在一个只应该执行一次的for循环中。当我点击我的按钮时,它会不断地打开窗户,直到我狂热地关闭它们,然后它就停止了。

下面的代码似乎是问题所在:

代码语言:javascript
复制
    if(basename($_SERVER['PHP_SELF'])==USRFILE && (isset($_REQUEST['usr']) || isset($_REQUEST['susr']) || isset($_GET['mp']) || isset($_REQUEST['rc']))) 
  {
      if(ISAJAX === 0) include(USRTEMPL.'head.php');        // if not Ajax request, include head.php (from USRTEMPL)
      include(USRINCLS.'class.UsersReg.php');        // include the class for Register (used also for Recovery data)

      ob_start();           // start storing output in buffer

      // if 'susr'=Register, create objet of UsersReg (for Register)
      // if 'rc' or 'mp' (for Recover-Confirma), uses UsersRecov class
      // if 'usr', create object of UserPage class (for user page data)
      if(isset($_REQUEST['susr']) && $_REQUEST['susr']==$lsite['users_logform']['register']) {
        $objRe = new UsersReg($mysql);
        echo $objRe->result;
        for($x = 0; $x < 1; $x=2) 
        {
        echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?susr=Register');</script>";
        }
      }
      else if(isset($_REQUEST['rc']) || isset($_GET['mp'])) {
        include(USRINCLS.'class.UsersRecov.php'); //account recovery
        $objRe = new UsersRecov($mysql);
            for($x = 0; $x < 1; $x=2) 
            {
        echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?rc=Recover');</script>";
        }
      }

具体而言,本节:

代码语言:javascript
复制
  if(isset($_REQUEST['susr']) && $_REQUEST['susr']==$lsite['users_logform']['register']) {
    $objRe = new UsersReg($mysql);
    echo $objRe->result;
    for($x = 0; $x < 1; $x=2) 
    {
    echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?susr=Register');</script>";
    }

我试着查找javascript,打开了许多窗口,但没有发现任何值得注意的地方。当我看到php打开一大堆窗口时,情况也是一样。这真的是没有意义的,为什么它是看,因为它是循环之前,我放入for循环。我加入了for循环来阻止它,它仍然循环。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-21 22:50:11

如果这段代码存在于users.php上或从users.php中执行,那么这就是您的问题,因为您将有一个无限循环。

第一行只运行在users.php页面上运行这段代码(或者基于常量名称的方式)。该守则接着说:

代码语言:javascript
复制
if(isset($_REQUEST['susr']) && $_REQUEST['susr']==$lsite['users_logform']['register']) {

我假设是$lsite['users_logform']['register'] == 'Register'。因此,当您访问users.php时,将运行此代码。如果$_REQUEST['susr'] == 'Register' (因为第一个页面加载打开了一个与users.php?susr=Regsiter匹配的url的新窗口),那么您将指示它再次打开该页面的另一个实例,如下所示:

代码语言:javascript
复制
if(isset($_REQUEST['susr']) && $_REQUEST['susr']==$lsite['users_logform']['register']) {
  $objRe = new UsersReg($mysql);
  echo $objRe->result;
  for($x = 0; $x < 1; $x=2) 
  {
    echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?susr=Register');</script>";
  }
}

IMO,您需要告诉users.php的第二个请求(由您的javascript位生成),它来自javascript。如果代码块来自javascript,则忽略整个代码块。像这样的事情应该有效:

代码语言:javascript
复制
if ( !isset($_GET['from_js']) && basename($_SERVER['PHP_SELF'])==USRFILE && ( isset($_REQUEST['usr']) || isset($_REQUEST['susr']) || isset($_GET['mp']) || isset($_REQUEST['rc']) ) ) 
{
  if(ISAJAX === 0) include(USRTEMPL.'head.php');        // if not Ajax request, include head.php (from USRTEMPL)
  include(USRINCLS.'class.UsersReg.php');        // include the class for Register (used also for Recovery data)

  ob_start();           // start storing output in buffer

  // if 'susr'=Register, create objet of UsersReg (for Register)
  // if 'rc' or 'mp' (for Recover-Confirma), uses UsersRecov class
  // if 'usr', create object of UserPage class (for user page data)
  if(isset($_REQUEST['susr']) && $_REQUEST['susr']==$lsite['users_logform']['register']) {
    $objRe = new UsersReg($mysql);
    echo $objRe->result;
    // there is no reason for the for loop. totally pointless
    echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?susr=Register&from_js=1');</script>";
  }
  else if(isset($_REQUEST['rc']) || isset($_GET['mp'])) {
    include(USRINCLS.'class.UsersRecov.php'); //account recovery
    $objRe = new UsersRecov($mysql);
    // there is no reason for the for loop. totally pointless
    echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?rc=Recover&from_js=1');</script>";
  }
}

好的。我更改了第一行,以包含对$_GET['from_js']变量的检查。我删除了for循环,因为它们完全没有意义,因为它们只运行一次。在新窗口中打开的urls中,我添加了&from_js=1。这样,您的代码就不会在随后的新窗口空缺上运行。这将防止无限弹出窗口。

希望这能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2013-12-21 22:35:54

变化

代码语言:javascript
复制
 echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?susr=Register');</script>";

至:

代码语言:javascript
复制
 header('Location: users.php?susr=Register');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20724220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档