额外的空格/缩进前置于从php打印的字符串

时间:2013-08-09 17:28:26

标签: php ajax return-value

我正在开发一个REST api,人们可以下载并投入他们的服务器并使用很少甚至没有编程知识。 https://github.com/evanstoddard/REST-Easy

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

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

我在发生此错误之前注释了很多我正在处理的代码并且错误仍然存​​在。我还在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;
    }

}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您的处理脚本几乎没有评论: *确保在开始之前没有空格&lt;?php,并且在尾随之后没有任何空格?&gt;哪个,顺便说一下,也可以省略(你知道吗?)。 *在UTF-8编码源代码的情况下,所谓的BOM怎么样?您可能希望选择在UTF文件开头不写BOM的编辑器或编辑器设置。 *而不是,print('badaccess');你可能会使用die('badaccess'); - 它将打印参数并停止脚本执行。 *在require_once(和指令一样),建议省略括号 *考虑重写if ... else语句处理$ task到一个switch()。

答案 2 :(得分:0)

在我的一个班级?>之后,有一个缩进,这就是造成我的问题的原因......编程有时很糟糕。