Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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脚本仅在Safari中不工作(仅在线-在本地进行测试)_Php_Debugging_Safari - Fatal编程技术网

Php脚本仅在Safari中不工作(仅在线-在本地进行测试)

Php脚本仅在Safari中不工作(仅在线-在本地进行测试),php,debugging,safari,Php,Debugging,Safari,此脚本适用于所有浏览器,但不适用于Apple Mac或Windows Safari。它在镀铬的相同机器上工作。它适用于其他浏览器。没问题。它在localhost和Safari中也能工作-只是不在线Mac Safari:登录发生,用户在index.php上短暂停留(毫秒),但立即被发送回登录页面 在下面登录\u do.php <?php if ($_SERVER['REQUEST_METHOD']=='POST') { require ('includes/conne

此脚本适用于所有浏览器,但不适用于Apple Mac或Windows Safari。它在镀铬的相同机器上工作。它适用于其他浏览器。没问题。它在localhost和Safari中也能工作-只是不在线Mac Safari:登录发生,用户在index.php上短暂停留(毫秒),但立即被发送回登录页面

在下面登录\u do.php

<?php
if ($_SERVER['REQUEST_METHOD']=='POST')
    {
        require ('includes/connect_db.php');
        require ('login_tools.php');
        list ($check,$data)=validate($con,$_POST['username'],$_POST['pass']);
        if ($check)
            {session_start();
                $_SESSION['user_id']=$data['user_id'];
                $_SESSION['username']=$data['username'];
                $_SESSION['admin']=$data['admin'];
                load ('index.php');
            }
        else {$errors=$data;}
        mysqli_close($con);
    }
include ('login.php');
?>

为什么?

这是发布到上述脚本的login.php

<?php
$page_title='Login';
include ('includes/header.html');?>
<link rel="stylesheet" type="text/css" href="handover.css">
<?php 
if (isset($errors) && !empty($errors))
{
echo'<p id="err_msg">Oops! There was a problem:<br>';
foreach ($errors as $msg)
{
echo "- $msg<br>";
}
echo 'Please try again or <a href="help.php">Ask for help</a></p>';
}
?>
<div id="middler">
<h2>
<form action="login_do.php" method="POST">
<p>
User name: <input type="text" name="username"></p>
<p>
Password: <input type="password" name="pass"></p>
<p>
<input type="submit" name="Login"value="Login"></p>
</form>

</div>
<?php 
include ('includes/logoutfooter.html')?>


用户名:

密码:

登录名短暂登录的index.php

<?php 
session_start();
if (isset($_SESSION['username']))
{
    $screenname=$_SESSION['username'];
}
if (isset($_SESSION['admin']))
{
    $admincheck=$_SESSION['admin'];
}

else {$url = 'login.php';
    echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';}
?>

最后是:login_tools.php

<?php
function load ($page = 'login.php')
{
$url = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url=rtrim($url,'/\\');
$url.='/'.$page;
header("Location: $url");
exit();
}
function validate($con,$email='' , $pwd = '')
{
$errors=array();
if (empty($email))
{$errors[]='Enter your user name.';}
else
{$e=mysqli_real_escape_string($con,trim($email));}
if (empty($pwd))
{$errors[]='Enter your password.';}
else
{$p = mysqli_real_escape_string($con,trim($pwd));}

if (empty($errors))
{
$q="SELECT user_id, username, admin
FROM DPLA.users
WHERE username='$e'
AND password='$p'";
$r=mysqli_query($con, $q);
if (@mysqli_num_rows($r)==1)
{$row=mysqli_fetch_array($r,MYSQLI_ASSOC);
return array(true,$row);
}
else
{$errors[]='username and password not found.';}
}
return array(false, $errors);
}

Your
else
子句发出元刷新,重定向到
login.php
仅附加到
$\u会话['admin']
检查。因此,即使设置了
$\u会话['username']
,任何非管理员都将被重定向回。将其更改为:

<?php 
session_start();
if (isset($_SESSION['username']))
{
    $screenname=$_SESSION['username'];
    if (isset($_SESSION['admin']))
    {
        $admincheck=$_SESSION['admin'];
    }
} else {
    $url = 'login.php';
    echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
}
?>


PHP在服务器上运行,因此其输出不会受到浏览器的影响。浏览器发布用户名和密码的方式一定有问题。你做了什么来调试它?您是否尝试过将
echo
语句放在脚本中的不同位置,以查看哪些
语句失败?如何调用此脚本?是普通表单提交还是AJAX?请显示客户端代码。
var\u dump($\u POST)
在脚本中显示了什么?@Barmar我编辑了这个问题…@kittykittybangbang我就是这么想的!但是,唯一的变量是浏览器!我被难住了,伙计!我愿意工作。。。但是没有好处,还是一样。