我正在开发一个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;
}
}
答案 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)
在我的一个班级?>
之后,有一个缩进,这就是造成我的问题的原因......编程有时很糟糕。