我正在尝试使用后变量“action”从javascript调用php函数,但我似乎无法从服务器获得响应


I am trying to call php functions from javascript using a post variable "action", but i cant seem to get a response from the server

这是示例代码,因此从我的javascript中,我发送一个名为action = "login"的post变量

此操作将发送到包含此内容的控制器.php文件

<?php
require_once('config.php');
require_once('functions.php');
if(isset($_POST['action']) && !empty($_POST['action'])){
        $action = $_POST['action'];
        $con = db_connect(SERVER, USER, PASSWORD, DB_NAME);
        switch($action){
                /****************************
                *           MISC SCENARIOS
                            **************************/
                        case "login":
                        login($con);
                        break;
            }
        mysqli_close($con); 
    }
?>

然后调用在 Functions.php 文件中如下所示的登录函数

function login($con){
        $email = trim($_POST['email']);
        $password = trim($_POST['password']);
        if(isset($email) && !empty($email) && isset($password) && !empty($password)){
            $connector = db_connect(SERVER, USER, PASSWORD, DB_NAME);
            $query = "SELECT * FROM edwaze_quiz.USERS WHERE EMAIL = '".$email."' AND PASSWORD = '".$password."' AND RIGHTS < 4;";
            $result = mysqli_query($con, $query);
            $count = mysqli_num_rows($result);
            if($count == 1){
                $result = mysqli_fetch_assoc($result);
                $name = $result['FIRST_NAME']." ".$result['SURNAME'];
                $path = '/quizz/profile images/';
                $picture = "unknown.jpeg";
                if($result['IMAGE'])
                    $picture = $result['IMAGE'];
                $picture = $path.$picture;
                echo json_encode(array($name, $picture));
            }else
                echo false;
            }
    }

现在,我的问题是,这在本地主机中完美运行。但是当我把它放在远程服务器上时,我什么也得不到。没有回应。我试图在控制器.php中"require_once"代码段之后放置一堆"echo",仍然什么都没有。

config.php包含所有需要的数据库变量,例如用户名,密码

我不知道为什么它不起作用,请帮忙?

我将我的问题追踪到包含此函数中的一行

if(!empty(trim($fileName)))
    unlink($root."/".str_replace("../", "", trim($fileName)));

结果是通过从"empty()"中删除"trim"函数来解决这个问题

if(!empty($fileName))
    unlink($root."/".str_replace("../", "", trim($fileName)));

解决了问题。

从 php 手册中为空,这是引用的

注意: 在 PHP 5.5 之前,empty() 只支持变量;其他任何内容都会导致解析错误。换句话说,以下内容将不起作用:empty(trim($name))。相反,使用 trim($name) == false。 如果变量不存在,则不会生成警告。这意味着 empty() 本质上等价于 !isset($var) ||$var == 假。

我希望这对某人有所帮助。干杯。

这是一个

简单的例子:

<?php 

function login(){
        $email = trim($_POST['email']);
        $password = trim($_POST['password']);
        echo json_encode(array($email,$password));
}

if(empty($_GET["page"])) header("location:34975890.php?page=start");

if($_GET['page']=='start'){?>
    <!-- Latest compiled and minified JS -->
    <script src="//code.jquery.com/jquery.js"></script>
    <script type="text/javascript">
        function getLogin(){
            $.ajax({
                url: '34975890.php?page=send',
                type: 'POST',
                dataType: 'json',
                data: {email: 'myemail@mail.com',password:'1234'},
                success:function(result){
                    console.log(result);
                    alert("complete");
                }
            });
        }
    </script>
    <form action="javascript:getLogin()">
        <button type="submit">Launch</button>
    </form>
<?php }else if($_GET['page']=='send'){
    login();
}
?>

试试告诉我,我只在一个小例子中嵌入了带有php的html,但数据可以读取。您可以温和地聚合部分代码以登录 php 函数。