Javascript 无法通过使用PHP和AJAX从表单传递带有数据的变量插入数据库

Javascript 无法通过使用PHP和AJAX从表单传递带有数据的变量插入数据库,javascript,php,ajax,database,insert,Javascript,Php,Ajax,Database,Insert,我在XAMPP上运行了这个(有望很快成为)ABM应用程序。 我已经处理了它的验证和插入的查询 我有一个用于注册主题的文件,以html格式,带有一个按钮type=“submit” 因此,当选择选项并填充输入时,当按下按钮时,将调用一个函数(在javascript文件中)-->它将验证数据并发送一个将信息放入数据库的请求。以下是js文件: function registerSubjects(){ var carreraMateria = ""; var nombreMateria = ""; var

我在XAMPP上运行了这个(有望很快成为)ABM应用程序。 我已经处理了它的验证和插入的查询

我有一个用于注册主题的文件,以html格式,带有一个按钮type=“submit”

因此,当选择选项并填充输入时,当按下按钮时,将调用一个函数(在javascript文件中)-->它将验证数据并发送一个将信息放入数据库的请求。以下是js文件:

function registerSubjects(){
var carreraMateria = "";
var nombreMateria = "";
var descripcionMateria = "";
var cargaHorariaMateria = "";

if(validacionFormularioAlta()){  //this is the main validating function
        $.ajax({
                url:  'http://localhost/path/registerSubjects.php',
                type: "POST",
                data: {"carreraMateria": carreraMateria, 
                       "nombreMateria": nombreMateria, 
                       "descripcionMateria": descripcionMateria,
                       "cargaHorariaMateria": cargaHorariaMateria,
                       },
                dataType: "html",
                beforeSend: function() {    
                    console.log("I'm in before send part");
                },
                success: function(data) {
                    if( data == "OK"){
                        console.log("it saved the data");
                        location.href = "http://localhost/path/main.php";
                        return;
                    }

                    //Note: There are better ways, this is just because I'm learning, will try to improve on it later :)
                    if( data == "ERROR"){    
                        console.log("not saved");
                        alert("error, please try again");
                        return;
                    }

                    alert("Server message: " + data);


                }

        });
    }else{
        alert("Incorrect inputs");
    }
}
表单中的数据是使用以下变量(javascript文件)“捕获”的:

及。。。。。这是registerSubjects.php,它处理一些服务器端验证和插入:

<?php
//Connection data
include("../extras/conexion.php");

//Inicialization of variables
$carreraMateria = "";
$nombreMateria = "";
$descripcionMateria = "";
$cargaHorariaMateria = "";

//Getting data
$carreraMateria = $_POST['carreraMateria']; 
$nombreMateria = $_POST['nombreMateria']; 
$descripcionMateria = $_POST['descripcionMateria'];
$cargaHorariaMateria = $_POST['cargaHorariaMateria'];

//CONNECTION
$CONN = new mysqli($serverName, $username, $password, $dataBase);

// Verifico la conexion
if ($CONN->connect_error) {
    die("Problema al conectar con la base de datos" . $CONN->connect_error);
    return;
} 

//INSERT!
//Query para introducir los datos en la base
$SQL = "INSERT INTO subjects(career_id, name, description, hours) VALUES (?, ?, ?, ? )";

if($stmt = $CONN->prepare($SQL))
    $stmt->bind_param('ssss', $carreraMateria, $nombreMateria, $descripcionMateria, $cargaHorariaMateria);
    $stmt->execute();
    $id = $stmt->affected_rows;
    $stmt->close();
}

//Check for row modification
if($id>0 ){
    echo "OK";
}else{
    echo "ERROR";
}

return;

?>
似乎没有意识到出了什么问题。起初我没有正确地“捕获”JS文件中的值,我已经修复了这个问题,但是现在我无法让插入正确工作

显然,我得到的值是正确的(从表格中,从所选内容中),并且我很好地引用了它们,所以我很困惑


编辑1: 我尝试获取php文件中接收到的值;我已经做到了:

$carreraMateria = $_POST['carreraMateria']; 
var_dump($_POST["carreraMateria"]);
$nombreMateria = $_POST['nombreMateria'];
var_dump($_POST["nombreMateria"]);
$descripcionMateria = $_POST['descripcionMateria'];
var_dump($_POST["descripcionMateria"]);
$cargaHorariaMateria = $_POST['cargaHorariaMateria'];
var_dump($_POST["cargaHorariaMateria"]);
结果是:

string(0) ""
string(0) ""
string(0) ""
string(0) ""
那么我想我没有正确地获取数据…?:/


编辑2: 我已经禁用了PHP和AJAX部分,只是在测试JavaScript。我已经“捕获”了这些值并将它们打印到控制台日志中,它们显示得很好,所以现在的问题是将它们传输到PHP文件中以将它们插入数据库

if($stmt = $CONN->prepare($SQL)) {
    $stmt->bind_param('ssss', $carreraMateria, $nombreMateria, $descripcionMateria, $cargaHorariaMateria);
    $stmt->execute();
    $stmt->execute();
    $id = $stmt->affected_rows;
    $stmt->close();
}
缺少一个带括号的开口

现在正在运行:)
在javascript文件中,我在函数registerSubjects()中声明了用于初始化的变量,因此在尝试传递这些变量时它们是空的。它们必须在函数之外声明为全局变量。

错误在php脚本中,它将错误重新显示为字符串。javascript工作得很好,这里有太多不相关的代码。您应该尽量减少代码,只发布最少量和最相关的行。它使调试更加容易。当人们无法在自己的环境中直接运行300行代码时,他们对调试300行代码不太感兴趣。使用
http\u response\u code(200)
http\u response\u code(400)
。这样,您就可以通过ajax捕捉到真正的错误以及成功与错误function@OptimusCrime好的,对不起,我试着剪一点。我只是不想错过任何重要的事情!哪里我似乎找不到它,对我来说它看起来是一样的:/your if only effect the first line,因为括号丢失了。好的,我仍然正确地看到了制动器。。我的错,我太迷路了。我唯一看到的不同之处是执行部分两次。尽管如此,我还是重复了一遍,但仍然没有插入:(你是否单独检查了php?打印出步骤的sql响应我想到了这一点,并尝试了,但失败了..我将尝试进一步调查,看看会发生什么。我必须接近,但无法正确完成:/谢谢!:)
string(0) ""
string(0) ""
string(0) ""
string(0) ""
if($stmt = $CONN->prepare($SQL)) {
    $stmt->bind_param('ssss', $carreraMateria, $nombreMateria, $descripcionMateria, $cargaHorariaMateria);
    $stmt->execute();
    $stmt->execute();
    $id = $stmt->affected_rows;
    $stmt->close();
}