我正在使用 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
, UPDATES
和 DELETES
.
有几个参数传递给这个文件,包括参数:oper
这将是 add
, edit
或 del
取决于你做了什么操作。
在你的 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):
如果我想在这个表上执行插入操作,但我不想在
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/