jqGrid如何使用EditUrl

jqGrid如何使用EditUrl,jqgrid,Jqgrid,我正在使用jqGrid使用jSON数据在MySQL中维护一个数据库。我可以在网格中显示数据,但是当我试图通过模式表单添加或编辑数据行时,我会收到一条消息,说“Url未设置”。但是editurl应该包含什么呢?mysql插入语句?我正在使用网格预定义的添加和编辑功能 另外,如果你看一下trirand的演示,在操纵下,然后在网格数据下。他们将自己的url指定为url:'server.php?q=2'和editurl:'someurl.php',他们从来不说someurl.php包含什么。这就是我迷路

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

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

谢谢你的建议

更新: editurl php文件中的代码:我将col模型中的POST值放入变量中。我只需要switch语句中的insert和update语句。看看我的insert语句,看看应该使用哪一个。我还必须让您知道,我并没有列出数据库中的所有列,而是列出了用户在网格中看到的所有列。第一个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;
}

编辑URL
是一个PHP文件,它将执行
插入
更新
删除

有几个参数传递到此文件,包括参数:
oper
,它将是
add
edit
del
,具体取决于您执行的操作

在您的PHP文件(http://code>editurl文件)中,我只需执行一个
开关

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
将是设置网格时在
colModel
数组中定义的
index
属性

因此,如果您有一列(来自
colModel
)看起来像:

{
    name: 'name1',
    index: 'name1',
    width: 95,
    align: "center",
    hidden: false
}
在您的
editurl
PHP文件中,您可以访问该列的值,通过使用以下命令生成上述查询:

$_POST["name1"]
希望这有帮助,如果你有任何进一步的问题,请告诉我。我和你一样挣扎于jQGrid的这一部分,所以我知道痛苦!!哈哈

更新

您的MySQL Insert语句不正确。您不需要包含表中存在的每一列,只需要包含所需的列(不能为
null

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

  • ID(必需,非空)
  • 名称(必需,非空)
  • 电话(不需要)
如果我想在此表上执行insert,但不想在
Phone
列中插入任何内容,我的insert语句如下所示:

插入tableName(ID,Name)值(123,“Frank”)

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

下面是一个关于MySQL语法的简单而有用的链接:


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

我非常感谢您的建议。这是有道理的,但我正试图构造我的insert语句,但对应该采用哪种格式感到困惑。请查看我的更新。@klm10抱歉造成混淆!您的
editurl
PHP文件将包含您自己的MySQL
INSERT
UPDATE
DELETE
语句。请参阅上面的
switch
语句-您需要在每种情况下为
add
edit
delete
@klm10构建MySQL语句,这听起来不错!使用jQGrid时,Firebug是你最好的朋友——而且,与Firefox相比,我更喜欢Chrome中简单的Firebug控制台。Firefox的Firebug所能做的大部分事情对于我们的需要来说都是不必要的。@klm10好的,这很好!所以jQGrid实际上正在访问您的
editdivisions.php
文件。当您展开显示
POST editdivisions.php 500 Internal Server Error
的行时,您是否看到了网格中的所有参数?另外,请确保看到
oper
参数。如果您看到所有这些参数,并且那里的一切看起来都很好,那么由于
editdivisions.php
文件中的某个错误,您将得到500个内部服务器错误。您是否使用可以单步执行/调试代码的IDE?是的,我确实看到了包括oper变量在内的所有参数。我正在使用Netbeans作为我的IDE。当我试图调试网格文件时,它是一个html文件,我想它似乎不想遍历该文件,因为没有php代码可以遍历。另外,你可以看看我在上面发布的代码中的insert语句,看看这可能就是代码中的问题所在。你把这个php文件放在哪里,在应用程序中还是服务器上。如果是服务器,则在服务器中的何处。我正在使用jboss。我把我的php文件放在我的JSP文件旁边,在提交时,我得到了“错误状态:未找到”。错误代码:404'在弹出窗口顶部和我正在获取的控制台上,在名为'myapp'的distacherservlet中找不到URI为[/myapp/some.php]的请求的映射
$_POST["name1"]