2014-09-03 234 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'); 
    } 
相关问题