0

我正在开发一个 REST api,人们可以下载并扔到他们的服务器上,并在几乎没有编程知识的情况下使用它。 https://github.com/evanstoddard/REST-Easy

我在设置页面使用 ajax,php 返回一个字符串供 ajax 查看并决定是继续下一步还是告诉用户修复错误。它似乎工作正常,然后突然之间它不会超过第一步。

在我的 javascript 中,我的日志中打印了来自 php 的返回值。第一步是让用户输入mysql服务器信息,如服务器url、用户名和密码。如果创建连接,则返回“成功”。我似乎正在获得“成功”。里面有空格或缩进。

在发生此错误之前,我注释掉了我正在处理的许多代码,并且错误仍然存​​在。我还在 if 块中添加了一个额外的缩进来检查返回,并且脚本成功了,所以在某处添加了额外的位。

我真的不想在这里发布我的代码,因为它有很多,而且有一堆移动部件可能不是最好的方法。

以下是其工作原理的简要说明:

用户输入(html 表单)->ajax-> 数据处理 php 脚本->class_database.php(打印success->ajax->html

适用代码:

html:

    <form onsubmit="stepTwo('#stepOneForm'); return false;" id="stepOneForm">
        <input type="hidden" name="task" value="1" />
        <input type="text" class="inputText" id="serverURL" name="serverURL" placeholder="MySQL Server:" /><br />
        <input type="text" class="inputText" id="serverUsername" name="serverUsername" placeholder="Username:" /><br />
        <input type="text" class="inputText" id="serverPassword" name="serverPassword" placeholder="Password:" /><br />
        <input type="submit" class="blueButton" value="Connect" />
    </form>

Javascript(AJAX):

function setupForm(form){
    //console.log('Form function called.');
    var formData = $(form).serialize();

    $.ajax({
        type: "POST",
        url: "data/data_setup.php",
        data: formData,

        success: function(result) { 

        console.log(result)

        function showAndTell(hide, show){

            $(show).slideDown(600);
            $(hide).delay(300).slideUp(600);

        }

        function showMessage(message, type, holdMessage){

            var messageContainer = "#messageContainer";
            var messageText = "#messageText";
            var messageImage = "#messageImage";

            var errorImage = "<img src='images/error.png' alt='Error' height='60px' width='60px' />";
            var successImage = "<img src='images/success.png' alt='Error' height='60px' width='60px' />";

            if (type === 'error'){

                $(messageText).empty()
                $(messageImage).empty()
                $(messageText).append(message)
                $(messageImage).append(errorImage)
                $(messageContainer).slideDown(500)
                if (!holdMessage) {
                    $(messageContainer).delay(7000).slideUp(500)
                }


            }

            else if(type === 'success'){

                $(messageText).empty()
                $(messageImage).empty()
                $(messageText).append(message)
                $(messageImage).append(successImage)
                $(messageContainer).slideDown(500)
                if (!holdMessage) {
                    $(messageContainer).delay(7000).slideUp(500)
                }               



            }
        }   


        if(result === 'success'){

            showAndTell('#stepOne', '#stepTwo');
            showMessage('Successfully connected to MySQL database.', 'success');

        }

        else if (result === 'badaccess') {

            showMessage('Unsuccessful.  Please recheck information.', 'error');

        }
        else if (result === 'nserver') {
            showMessage('Please enter a server URL.', 'error');
            $('#serverURL').css('background', '#ffdadb');
        }
        else if (result === 'nserverusername') {
            showMessage('Please enter a server username.', 'error');
            $('#serverUsername').css('background', '#ffdadb');
        }
        else if (result === 'ndatabase') {
            showMessage('No database with that name.  Create it?  <a href="#" onclick="createDatabase();">Yes</a> | <a href="#" onclick="cancelLink();">No</a>', 'error', true);
        }
        else if (result === 'database') {

            showMessage('Successfully connected to that database.');
            showAndTell('#stepTwo', '#stepThree');
        }


        else {

            showMessage('Unknown error.  Please try again later.', 'error');

        }


    }
    }); 

}

PHP数据处理脚本:

<?php

//Include rest class
require_once('../../classes/class_rest.php');

//Get variables
$task = $_POST['task'];

$database_server = $_POST['serverURL'];
$database_username = $_POST['serverUsername'];
$database_password = $_POST['serverPassword'];

$rest_name = $_POST['restName'];

$username = $_POST['username'];
$password = $_POST['password'];
$confPassword = $_POST['confirm'];
$emailAddress = $_POST['emailAddress'];

$api_name = $_POST['apiName'];

$database_name = $_POST['databaseName'];
$table_prefix = $_POST['tablePrefix'];

if ($task == 1){


    if($database_server == ''){
        print('nserver');
    }
    else if($database_username == ''){
        print('nserverusername');
    }
    else{
        connectSQL($database_server, $database_username, $database_password);
    }
}

else if ($task == 2){

    if($rest_name == ''){

        print('nrest');

    }
    else{

        databaseDoesExist($rest_name);

    }

}

else if ($task == 3){

    if($username == ''){

        print('nuser');
        die();

    }

    if($emailAddress == ''){

        print('nemail');
        die();

    }

    if(!$confPassword == $password){

        print('nconf');
        die();  
    }

    insertUser($username, $emailAddress, $password);

}

else if ($task == 4){

}

else if ($task == 5){

}

else if ($task == 6){

}


else if($task == 9){

    createInitialDatabase();

}

else if($task == 10){

    createConfigFile();

}
?>

功能class_database.php

//Validates sql information
function connectSQL($server, $username, $password){

    //Create sql connection
    $con = mysqli_connect($server, $username, $password);

    //Checks if connection was successful
    if (mysqli_connect_errno($con)){

        //Print 'badaccess' for ajax
        print('badaccess');

    }

    //Run if connection successful
    else{

        //Print 'success' for ajax
        print('success');

        //Adds session variables for other sql commands later on
        $_SESSION['server'] = $server;
        $_SESSION['username'] = $username;
        $_SESSION['password'] = $password;
    }

}
4

3 回答 3

0

很容易无意中从 php 代码中泄漏一个空格(任何包含文件中的空格),请在“PHP 数据处理脚本”的开头尝试 ob_start(),在 connectSql 的“print('success')”之前尝试 ob_end_clean()

于 2013-08-09T17:58:18.593 回答
0

?>我的一个课程之后,有一个缩进,这就是导致我的问题的原因......编程有时很糟糕。

于 2013-08-09T18:03:52.320 回答
0

对您的处理脚本的评论很少: * 确保在开头 <?php 之前没有空格,并且在尾随 ?> 之后也没有空格,顺便说一句,也可以省略(你知道吗?)。* 如果是 UTF-8 编码的源代码,那么所谓的 BOM 呢?您可能想选择一个不在 UTF 文件开头写入 BOM 的编辑器或编辑器设置。* 而不是 print('badaccess'); 你可能会使用 die('badaccess'); – 它将打印参数并停止脚本执行。* 在 require_once(和类似的指令)处,建议省略括号 * 考虑将处理 $task 的长 if...else 语句重写为一个 switch()。

于 2013-08-09T18:03:00.613 回答