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