2015-02-08 39 views
2

我很努力讓AJAX與表單一起工作,將數據傳遞給某些PHP/MySQL。AJAX與PHP/MySQL交談

這裏是代碼 - HTML:

<form id="<?=$applicationKey?>" name="<?=$applicationKey?>" action="./post.<?=$appNo?>.<?=$applicationKey?>.php" method="POST" enctype="multipart/form-data"> 
<input type="hidden" name="uID" value="<?=$uID?>"> 
<input type="hidden" name="uaID" value="<?=$uaID?>"> 
<input type="hidden" name="appID" value="<?=$appID?>"> 

<input type="text" id="input_1_1" name="input_1_1" placeholder="Name of the Applicant's Organisation" value="<?=$input_1_1?>" required> 
<input type="text" id="input_1_2" name="input_1_2" placeholder="First Name" value="<?=$input_1_2?>" required> 
<input type="text" id="input_1_3" name="input_1_3" placeholder="Last Name" value="<?=$input_1_3?>" required> 

等(我敢肯定,你不需要在這裏列出的所有形式)。我有這個JS作爲一個單獨的.js文件,在HTML的頭裝:

function doSend_1_1() { 
$.post('./post.4.ConSupAp.php?appID=' + (appID) + '&ident=input_1_1', $('#input_1_1').serialize()); 
} 

function doSend_1_2() { 
$.post('./post.4.ConSupAp.php?appID=' + (appID) + '&ident=input_1_2', $('#input_1_2').serialize()); 
} 

function doSend_1_3() { 
$.post('./post.4.ConSupAp.php?appID=' + (appID) + '&ident=input_1_3', $('#input_1_3').serialize()); 
} 

$("document").ready(function() { 
$("#input_1_1").blur(doSend_1_1); 
$("#input_1_2").blur(doSend_1_2); 
$("#input_1_3").blur(doSend_1_3); 
}) 

而且這類作品的好。當用戶離開這三個領域中的任何一個時,它都會嘗試將數據傳遞給PHP並使其完成我想要的任務。 PHP的是這樣的:

<?php 
include './conf/Funcs.php'; // Grab our functions 
include './conf/DBconfig.php'; // Useful to have access to the database 

$appID = $_GET['appID']; // identifies what entry we are talking to in the DB 
$ident = $_GET['ident']; // defines what field is being posted 

if(($ident) == "input_1_1") { 
$userInput = $_POST['input_1_1']; 
try { 
    $stmt = $conn->prepare("UPDATE $database.app_ConSupAp SET `organisation` = :userinput AND `lastModified` = :time WHERE `appID` = :appid"); 
    $stmt->bindParam(':userinput', $userInput, PDO::PARAM_STR, 64); 
    $stmt->bindParam(':time', time(), PDO::PARAM_INT, 11); 
    $stmt->bindParam(':appid', $appID, PDO::PARAM_INT, 11); 
    $stmt->execute(); 
} catch(PDOException $e) { catchMySQLerror($e->getMessage()); } 
} 
?> 

由於我沒有順利拿到這工作我還沒有在PHP中添加部分使用其他領域還沒有第一個輸入字段。所以是的,他們目前失蹤。

Firebug報告沒有問題,並且數據庫中組織字段中的信息確實從其先前預設的條目更改爲「0」 - 而不是我在輸入字段中鍵入的內容。此外,即使將奇怪的0值輸入到數據庫中,time()圖標也不會更新。沒有任何錯誤和Firebug看起來很開心,我不知道爲什麼我的數據沒有被正確插入。 Firebug確實報告,無論輸入到文本字段是否正確傳遞給PHP。任何想法到底是什麼出錯?

<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 

此正被利用,加載在始發頁頭。數據庫是MySQL。所有與數據庫的php通信都是使用PDO完成的。

+0

嘗試在您的數據庫查詢逗號來代替'和'。還可以用'lastModified = now()'代替'lastModified =:time',因爲它不需要任何處理。 – 2015-02-08 13:40:38

+0

phillip100 - 奇妙的是,第一次在我的ajax使用混淆中忽略了輕微的數據庫錯誤。謝謝!請介意將您的答案設置爲答案,以便我可以相信您瞭解正確答案? 關於在數據庫查詢中使用now(),我使用time()的原因是因爲我有一個與服務器不同的時區,在php中設置,這可以確保它使用修改的時區而不是服務器默認值。 – Cassandra 2015-02-08 13:53:16

+0

另外,你有一個'post'形式,但是使用'$ _GET'檢索變量。 (啊,它看起來像你有一個隱藏的字段,並將它們傳遞給查詢字符串,你不需要兩者)。 – halfer 2015-02-08 13:54:14

回答

2

的問題似乎是在該行:

$stmt = $conn->prepare("UPDATE $database.app_ConSupAp SET `organisation` = :userinput AND `lastModified` = :time WHERE `appID` = :appid"); 

AND運營商不應該在那個地方。用逗號重新裝上。

你也可以直接設置在time()您的查詢,因爲它沒有必須準備

$stmt = $conn->prepare("UPDATE $database.app_ConSupAp SET organisation = :userinput , lastModified = '".time()."' WHERE appID = :appid"); 
+0

感謝phillip100,這是我的一個簡單的錯誤,但很快就回復了。非常感激! :) – Cassandra 2015-02-08 15:19:12