私はこれからXAMPP上で動作するABMアプリケーションを用意しています。 私はすでにバリデーションと挿入のクエリを扱っています。PHPとAJAXを使用してフォームからのデータを変数に渡してデータベースにINSERTできません
件名をhtml形式で登録するためのファイルが、button 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");
}
}
フォームからのデータは、これらの変数(ジャバスクリプトファイル)を使用して「キャッチ」されています
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;
?>
そしてそれは、私は、接続部と異なるファイル内のチェックを持っていたが、いくつかの問題を引き起こしていた...です。私はそれをファイルのテーマに書いていますが、今はAjaxが "うまくいっています" ...少なくとも、うまくいきます:/
私は何も挿入できません...私は、 (AJAX部分に)と言う部分で、私自身の警告で立ち往生M:
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