jqGrid 如何使用 EditUrl

标签 jqgrid

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

另外,如果您查看 trirand 演示 page在操作下,然后在网格数据下。他们将他们的 url 指定为 url:'server.php?q=2' 和他们的 editurl:"someurl.php"他们从不说 someurl.php 包含什么。这是我迷路的地方,我找不到资源来给我任何关于editurl php文件中应该有什么的提示。

感谢您的任何建议。

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

<?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 是一个非常普遍的错误。

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

更新时间 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;
}
?>

最佳答案

editurl是 PHP 文件,可以完成您的 INSERTS , UPDATESDELETES .

有几个参数传递给这个文件,包括参数:oper这将是 add , editdel取决于你做了什么操作。

在你的 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 Insert 语句不正确。您不需要包含表中存在的每一列,只需包含所需的列(不能是 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

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

    关于jqGrid 如何使用 EditUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20382632/

    相关文章:

    jquery - 如何更改jqgrid中的日期格式

    jquery - 如何禁用 jqGrid 中选定列的搜索选项?

    jquery - jqgrid: getCell 总是返回 false

    jquery-ui - 如何更改jqGrid单元格的颜色?

    jquery - 来自 USGS geojson 数据的 jqGrid

    jqgrid全屏切换,窗口宽高

    jquery - jqGrid动态解析网格寻呼机ID?

    javascript - jqGrid 中的 gridComplete 问题

    jquery - Detect with JQuery when a select changes

    javascript - jqgrid 没有数据绑定(bind),只有空列