2017-03-19 9 views
0

私はこれから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ファイルに転送してデータベースに挿入することです。

+0

エラーはあなたのPHPスクリプトにあります、それは文字列としてERRORを返します。javascriptはうまく動作します – mtizziani

+0

ここに無関係なコードが多すぎます。コードを減らし、最小限の関連する行だけを投稿するようにしてください。デバッグがはるかに簡単になります。自分の環境で直接実行することができない場合、300行のコードをデバッグすることに関心を抱くことはあまりありません。 – OptimusCrime

+0

小さなtipp、PHPエコーOKまたはエラーをさせないでください。 'http_response_code(200)'と 'http_response_code(400)'でそれを作ってください。あなたはajaxと成功とエラー関数 – mtizziani

答えて

0
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内部の初期化のために意味の変数を宣言していた、とそう、彼らは時に空だった:)今機能している

+0

こんにちは!どこ?/ – xragdollqueen

+0

if($ stmt = $ CONN-> prepare($ SQL)) $ stmt-> bind_param( 'ssss'、... – mtizziani

+0

あなたのifブラケットが逃げて – mtizziani

0

をbrackedそれらを渡そうとしている。関数の外部でグローバル変数として宣言しなければなりませんでした。

関連する問題