我在XAMPP上運行了ABM應用程序(即將成爲希望)。 我已經處理了它的驗證和插入的查詢。無法通過使用PHP和AJAX從表單中傳遞數據來插入數據庫
我有一個註冊主題的文件,以html的形式,按鈕類型=「提交」。因此,當選項被選中並且輸入被填充時,當按下按鈕時調用函數(在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文件):
carreraMateria = document.getElementById("carreraMateria").selectedIndex;
nombreMateria = document.getElementById("nombreMateria").value;
descripcionMateria = document.getElementById("descripcionMateria").value;
cargaHorariaMateriaElemento = document.getElementById("cargaHorariaMateria");
cargaHorariaMateriaSeleccion = document.getElementById("cargaHorariaMateria").selectedIndex;
cargaHorariaMateria = parseInt(document.getElementById("cargaHorariaMateria").value);
而且.....這是與交易的registerSubjects.php一些服務器端驗證和INSERT:
<?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;
?>
因此,這是......我有連接部件及其在不同的文件檢查,但引發了一些問題。我已經寫在文件自己,現在阿賈克斯工作「好」...至少,工作:/
事情是...我不能插入任何東西...我' m在我自己的警報中,在(AJAX部分)中說:
if(data == "ERROR"){
console.log("not saved");
alert("error, please try again");
return;
}
似乎無法意識到什麼是錯的。起初我並沒有正確地「捕捉」JS文件中的值,我已經解決了這個問題,但現在我無法使INSERT正常工作。
顯然我得到的價值是正確的(從形式,從選擇什麼),我引用他們很好,所以我很困惑。
EDIT1: 我試圖讓在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) ""
那麼我想我沒有得到正確的數據...? :/
EDIT2: 我已經禁用了PHP和AJAX部件,只是測試的JavaScript。我已經「捕捉」了這些值並將它們打印到控制檯日誌中,並且它們顯示正常,所以現在的問題是將它們傳輸到PHP文件以將它們插入到數據庫中。
錯誤是在您的PHP腳本中,它將ERROR作爲字符串返回。javascript工作正常 – mtizziani
這裏有太多不相關的代碼。你應該儘量減少代碼,只發布最小和相關的行。它使調試更容易。當他們無法直接在自己的環境中運行時,人們對調試300行代碼的興趣不大。 – OptimusCrime
小tipp,不要讓php回聲OK或錯誤。用'http_response_code(200)'和'http_response_code(400)'做成。比你可以用ajax和成功和錯誤功能捕獲真正的錯誤 – mtizziani