2014-09-03 209 views
0

我的數據庫中有三張表:Person (id, name, last_name), System (id, name), PersonInSystem(id, person_id, system_id)。最後一個用於鏈接一個人與一個系統。Ajax將javascript變量傳遞給javascript函數作爲參數

我用<select>從我的數據庫顯示每個人都喜歡這個

echo '<option value="'.$queryResult["id"].'">'.$queryResult["name"].' '.$queryResult["last_name].'</option>'; 

我使用Ajax來獲取ID和發送查詢SELECT * FROM Person WHERE id = ID_FROM_SELECT。然後,我顯示這樣的數據(我不能複製代碼,所以我必須從頭開始重寫,我將使用僞PHP + HTML),其主要目的是編輯所選人員:

<form> 
Name: <input type="text" value="'.$nameFromDB.'" name="name"> 
Last name: <input type="text" value="'.$lastNameFromDB.'" name="lastname"> 
System: while() { // if one person is assigned to many systems, I will display them all in separate selects 
      <select><option value="'.$systemAssignedToPerson.'">'.$systemAssignedToPerson.'</option> 
      while() { 
      // display every system except for the one listed above 
      } 
      </select><img src="drop.gif" onclick="deleteSystem(document.getElementById(\"system\").value)"><input type="hidden" id="system" value="'.$systemAssignedToPerson.'"> 
     } 

<input type-"submit" value="Edit" name="editPerson"> 
</form> 

現在,如果我想取消分配給系統的人,我想點擊drop.gif圖像,並觸發deleteSystem(value)功能,這將發送查詢DELETE FROM PersonInSystem WHERE system_id = SYSTEM_ID_SENT and person_id = PERSON_ID_SENT,但我不能傳遞的價值和我不不知道該怎麼做(我是Ajax新手)。

我可以將人員的ID存儲在會話變量中,但我不知道如何發送系統ID,也不想將數據發送到其他頁面。

另外我想更新系統分配的頁面(應該顯示同一個人)。

+0

我想給你一個答案,但我已經找到代碼中的一些基本問題。你在你的'PHP' while循環中輸出一個靜態'id':''。所以你的html將是無效的(每個id只能出現一次),你的javascript無法區分你隱藏字段的不同值(因爲它們都有相同的「id」)。 – 2014-09-03 18:17:02

回答

1

更改代碼如下。 它應該工作

<img src="drop.gif" onclick="deleteSystem('<?php echo $systemAssignedToPerson;?>')"> 
1

你deleteSystem JavaScript函數需要以下類型的請求發送給服務器:

(例如:對於取消分配處理程序文件)

"unassign.php?systemId=459&personId=300" 

(例如:通用處理程序文件)

"handler.php?systemId=459&personId=300&action=unassign" 

In unassign.php:

$systemId = $_GET["systemID"]; 
$personId = $_GET["personID"]; 
/* Your SQL stuff here - 
statement something like 
DELETE FROM PersonInSystem WHERE person_id = "$personId" AND system_id = "$systemId" */ 

改進: *使用像原型(舊校園,重量輕)或jQuery的(更重)JavaScript庫來處理Ajax的東西 *使用$ _ POST和POST變量,而不是$ _GET *使用庫爲正確引用您的SQL *護理有關HTML特殊字符和正確輸入驗證/過濾

3

我想你需要本地JavaScript函數調用服務器

function deleteSystem(value){ 
    var deleteflag=confirm("Are you sure to delete?!!"); 
     if(deleteflag){ 
     //setup your request to the server 
     window.location='delete.php?SYSTEM_ID_SENT='+value 

     } 

    } 

在你delete.php文件,你可以得到SYSTEM_ID_SENT這樣

$id=$_GET['SYSTEM_ID_SENT']; 
$personid=$_SESSION['your session variable name']; 
// run your delete query 
$delqry=mysql_query(""); 
if($delqry){ 
     //redirect to the page you want 
     header('location:yourpage.php'); 
    } 
相關問題