2017-03-19 29 views
0

我在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文件以將它們插入到數據庫中。

+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(); 
} 

有缺少開放bracked

+0

嗨!哪裏?我似乎無法找到它,對我來說它看起來相同:/ – xragdollqueen

+0

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

+0

你的if隻影響第一行,因爲括號是missin – mtizziani

0

現在這運作:) 在JavaScript文件,我宣佈意味着功能registerSubjects()內初始化變量,所以他們的空當試圖通過他們。在函數之外,它們必須被聲明爲全局變量。

相關問題