2013-03-30 88 views
1

我绝对是jQuery和ajax的新手。目前我正在尝试从一个JavaScript文件从我的本地sql服务器上创建一个表,我将该语句发布到.php文件以执行该语句。使用jQuery创建数据库表的麻烦ajax

js文件:

function executeStatement(sqlStatement){ 
    $.ajax({ 
     type: "post", 
     data: sqlStatement, 
     cache: false, 
     url: "api.php", 
     dataType: "text", 
     error: function(xhr, status, error) { 
     var err = eval("(" + xhr.responseText + ")"); 
     alert(err.Message); 
     }, 
     success: function() 
     { 
     alert ("Success!!"); 
     } 
    }); 
    } 

PHP文件:

require_once('PhpConsole.php'); 
    PhpConsole::start(); 
    debug('HERE!!!'); 

    $sqlStatement = $_POST['sqlStatement']; 

    $host = "*****"; 
    $user = "*****"; 
    $pass = "*****"; 
    $databaseName = "db_user_data"; 

    // Create connection 
    $con = mysqli_connect($host, $user, $pass, $databaseName); 

    // Check connection 
    if (mysqli_connect_errno($con)){ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    else{ 
    $con->query($sqlStatement); 
    header('Location: success.php'); 
    } 

我使用PHP控制台来调试PHP文件,但在这种情况下,即使第一个日志“在这里!”没有打印到控制台,所以我想知道它是否会达到这个.php文件。无论如何,executeStatement方法中的事件success已达到,即使数据库中没有更改,也会打印“成功”。通过.php文件在本地服务器上执行的方式。有人有任何想法可以解决问题吗?

在此先感谢

+0

为什么从javascript发送整个查询。只需以'json'格式发送你需要的数据。 '{username:'hello',password:'world'}',在'ajax'函数中将'dataType'选项设置为'json',然后在'PHP'中对'json'进行解码,然后执行PHP查询PHP文件 – ashley

+0

实际上sqlStatement变量包含“CREATE TABLE bla bla”之类的内容,它取决于用户 – Husky

+0

哦,我的!我真希望你知道你在这里做什么。只允许任何SQL语句发送到后端是非常不安全的。任何能够访问该页面的人都可以删除数据库或导出敏感数据。 – thaJeztah

回答

2

有一个在“$通”变量在PHP代码中一个错字:

require_once('PhpConsole.php'); 
PhpConsole::start(); 
debug('HERE!!!'); 

$sqlStatement = $_POST['sqlStatement']; 

$host = "*****"; 
$user = "*****"; 
**$pass = "*****";** 
$databaseName = "db_user_data"; 

// Create connection 
$con = mysqli_connect($host, $user, $pass, $databaseName); 

// Check connection 
if (mysqli_connect_errno($con)){ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
else{ 
    $con->query($sqlStatement); 
    header('Location: success.php'); 
} 

编辑:这是我修改后的JS代码 - 这完全适用于我,因为我我能够将代码从AJAX调用传递给PHP代码并返回。试试这个:

var sqlStatement = "sqlStatement=SQLSTATEMENTHERE"; 
$.ajax({ 
    type: "POST", 
    data: sqlStatement, 
    cache: false, 
    url: "api.php", 
    success: function() 
    { 
    alert ("Success!!"); 
    } 
}); 

把你的函数和ajax调用放在外面去替换旧的。至于PHP,我会在第二时间检查一下。

+0

这就是不是问题,我只是在用'*'替换真实信息的时候做出来的,但感谢警告! – Husky

+0

哦对,我的坏话呢! - 你介意在这里发布发布的$ sqlStatement变量的典型示例吗?这可能是问题所在。 – domo270897

+0

当然!例如像这样:'CREATE TABLE test(TelNr1 INT(64),address CHAR(64));'。该错误是不是在sqlStatement,我试图直接在phpAdmin中执行它,我工作得很好... – Husky