我从另一个人那里获得了一个php脚本,由于某种原因,登录函数无法工作,除非它在一个新窗口中打开。(?我不知道为什么,但事实就是这样)在我从PHP文件中执行打开窗口javascript时,它会打开很多窗口。我想这是某种程度上的循环,所以我将javascript函数放在一个只应该执行一次的for循环中。当我点击我的按钮时,它会不断地打开窗户,直到我狂热地关闭它们,然后它就停止了。
下面的代码似乎是问题所在:
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>";
}
}具体而言,本节:
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循环来阻止它,它仍然循环。
发布于 2013-12-21 22:50:11
如果这段代码存在于users.php上或从users.php中执行,那么这就是您的问题,因为您将有一个无限循环。
第一行只运行在users.php页面上运行这段代码(或者基于常量名称的方式)。该守则接着说:
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的新窗口),那么您将指示它再次打开该页面的另一个实例,如下所示:
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,则忽略整个代码块。像这样的事情应该有效:
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。这样,您的代码就不会在随后的新窗口空缺上运行。这将防止无限弹出窗口。
希望这能帮上忙。
发布于 2013-12-21 22:35:54
变化
echo "<script type='text/javascript'>window.open('http://www.thelegendmaker.net/users.php?susr=Register');</script>";至:
header('Location: users.php?susr=Register');https://stackoverflow.com/questions/20724220
复制相似问题