jqGrid如何使用EditUrl

时间:2013-12-04 18:05:02

标签: jqgrid

我正在使用jqGrid来使用jSON数据在MySQL中维护数据库。我能够在网格中显示数据但是当我尝试通过模态表单添加或编辑数据行时,我收到一条消息“Url未设置”。但是什么是editurl假设包含? mysql插入语句?我正在使用网格的预定义添加和编辑功能。

另外,如果您在Manipulating下查看trirand demo page,然后在Grid Data下。他们将url指定为url:'server.php?q = 2'和他们的editurl:“someurl.php”他们从不说出someurl.php包含的内容。这是我迷路的地方,我找不到资源给我任何关于editurl php文件中的假设的提示。

感谢您的任何建议。

更新 我的editurl php文件中的代码:我将col模型中的POST值放在变量中。我只需要在switch语句中使用insert和update语句。看一下我的insert语句,看看我应该使用哪一个。我还必须让你知道我没有列出数据库中的所有列,但我列出了用户在网格中看到的所有列。第一个插入语句被注释,它表示根据订单的顺序插入值的列。第二个insert语句遵循数据库中的顺序。您看到''是我不想显示到数据网格中的列供用户查看,因为该信息不相关。

<?php

$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "**********"; 
$dbname = "codes"; 

// connect to the database
$mysql_connect($dbhost, $dbuser, $dbpass) or die("Connection Error: " . mysql_error());

mysql_select_db($dbname) or die("Error conecting to db.");

$div = $_POST['div_id'];
$l2 = $_POST['l2_id'];
$l1l2 = $_POST['l1l2_id'];
$l1l3 = $_POST['l1l3_id'];
$l2l3 = $_POST['l2l3_id'];
$beg = $_POST['exec_beg'];
$end = $_POST['exec_end'];
$csa = $_POST['csa_id'];
$area = $_POST['area_id'];
$areadesc = $_POST['area_desc'];
$shortdesc = $_POST['short_desc'];
$longdesc = $_POST['long_desc'];
$enabled = $_POST['avail_ind'];


switch($_POST['oper'])
{
    case "add":
         $query = "INSERT INTO divcodes values ($div,'',$l1l2,$l2,$l1l3,$l2l3,$beg,$end,'',''$csa,$area,$areadesc,$shortdesc,$longdesc,$enabled,'','','','','',''";
        $run = mysql_query($query);
    break;

    case "edit":
        //do mysql update statement here 
    break;
}

当我将editurl设置为我的php文件并尝试向网格添加新行数据时,它会给我内部服务器错误500.我不知道如何进一步调试它,错误500就是这样的一般错误。

我认为既然我正在使用网格的预定义操作(添加/编辑),网格只知道在我的数据库中执行插入或更新语句,但看起来情况并非如此?

UPDATE TAKE 2:我更改了语法以使用mysqli扩展名。一旦我重新构建了插入语句,我就停止了“内部服务器错误代码500”。当我单击添加新记录然后填写测试数据然后单击提交模态窗口消失,就像数据已添加到网格中一样。但是我没有在网格中找到数据(可能网格没有用新数据重新加载)。我检查了phpmyadmin,新行无处可寻。当我编辑现有行并单击提交时,对话框保持打开状态,但我没有收到错误500,这是一种解脱。

<?php

$dbhost = "localhost"; 
$dbuser = "root"; 
$dbpass = "**********"; 
$dbname = "codes"; 

// connect to the database
$conn = mysqli_connect($dbhost, $dbuser, $dbpass) or die("Connection Error: " . mysql_error());
mysqli_select_db($conn,$dbname) or die("Error conecting to db.");

$div = $_POST['div_id'];
$l2 = $_POST['l2_id'];
$l1l2 = $_POST['l1l2_id'];
$l1l3 = $_POST['l1l3_id'];
$l2l3 = $_POST['l2l3_id'];
$beg = $_POST['exec_beg'];
$end = $_POST['exec_end'];
$csa = $_POST['csa_id'];
$area = $_POST['area_id'];
$areadesc = $_POST['area_desc'];
$shortdesc = $_POST['short_desc'];
$longdesc = $_POST['long_desc'];
$enabled = $_POST['avail_ind'];

switch($_POST['oper'])
{
    case "add":
        $query = "INSERT INTO divcodes (div_id,l1l2_id,l2_id,l1l3_id,l2l3_id,exec_beg,exec_end,csa_id,area_id,area_desc,short_desc,long_desc,avail_ind) values ($div,$l1l2,$l2,$l1l3,$l2l3,$beg,$end,$csa,$area,$areadesc,$shortdesc,$longdesc,$enabled)";
        mysqli_query($conn,$query);
    break;

    case "edit":
        $query = "UPDATE divcodes SET div_id=$div,l1l2_id=$l2,l2_id=$l1l2,l1l3_id=$l2l3,l2l3_id=$l2l3,exec_beg=$beg,exec_end=$end,csa_id=$csa,area_id=$area,area_desc=$areadesc,short_desc=$shortdesc,long_desc=$longdesc,avail_ind=$enabled";
        mysqli_query($conn,$query); 
    break;
}
?>

1 个答案:

答案 0 :(得分:1)

editurl是将用于INSERTSUPDATESDELETES的PHP文件。

传递给此文件的参数有几个,包括参数:oper,它可以是addeditdel,具体取决于您执行的操作。

在你的PHP文件(editurl文件)中我会做switch

switch ($_POST["oper"]) {
    case "add":
        // do mysql insert statement here
    break;
    case "edit":
        // do mysql update statement here
    break;
    case "del":
        // do mysql delete statement here
    break;
}

同样传递给该文件的将是来自该行的所有数据:名称:值对,就像oper参数一样。设置网格时,name将是您在index数组中定义的colModel属性。

所以,如果你有一个列(来自colModel)看起来像:

{
    name: 'name1',
    index: 'name1',
    width: 95,
    align: "center",
    hidden: false
}

在您的editurl PHP文件中,您可以使用以下命令访问该列的值以构建您的查询:

$_POST["name1"]

希望这有帮助,如果您有任何其他问题,请与我们联系。我和jQGrid的这一部分一样挣扎,就像你一样,所以我知道痛苦!洛尔

<强>更新

您的MySQL插入语句不正确。您不需要包含表中存在的每个列,只需要包含所需的列(不能是null的列)。

例如,我有一个包含三列的表(tableName):

  • ID(必填,非空)
  • 名称(必填,非空)
  • 电话(不是必需的)

如果我想在此表上执行插入操作,但我不想在Phone列中插入任何内容,那么我的Insert语句将如下所示:

INSERT INTO tableName (ID, Name) VALUES (123, "Frank")

VALUES的左侧,您可以指定要插入的列。在VALUES的右侧是我们要插入的实际值。

以下是关于MySQL语法的简单实用链接:http://www.w3schools.com/php/php_mysql_insert.asp

正如您所看到的,在该链接的第一个示例中,它们没有指定哪些列,这意味着它们将数据插入到所有列中。在你的情况下,这不是你想要的,所以我会看看他们的第二个例子,它确实指定了你要插入的列。