【问题标题】:jQ Grid problems with edit form does not send request to the SQL database编辑表单的 jQ Grid 问题不会向 SQL 数据库发送请求
【发布时间】:2013-03-27 06:58:52
【问题描述】:

我是 jQ Grid 的新用户,我想实现一个编辑表单。我的网格当前链接到 SQL 数据库。 SQL 数据库的数据在网格中正确显示。

当我选择一行并单击编辑按钮时,会出现一个编辑表单,其中包含所选行的数据。当我修改信息并单击提交时,修改显示在网格上,但我的** SQL 数据库没有更新**。如果我刷新页面,网格会显示SQL数据库的信息,我可以看到我的修改并没有在数据库中进行(显示的数据与最初显示的数据相同)。

有人可以帮我解决这个问题吗?

这是我的网格代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My First Grid</title>
 <link rel="stylesheet" type="text/css" media="screen" href="jquery-ui-1.10.2/themes/base/jquery.ui.all.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/ui-lightness/jquery-ui-1.8.2.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="ui.jqgrid.css" />

<style type="text/css">
html, body {
    margin: 0;
    padding: 0;
    font-size: 75%;
}
</style>

<script src="js/jquery-1.9.0.min.js" type="text/javascript"></script>
<script src="js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.src.js" type="text/javascript"></script>

<script type="text/javascript">
jQuery.extend(jQuery.jgrid.defaults, { autoencode:true });
</script>


<script type="text/javascript">

$(function(){ 
  $("#editgrid").jqGrid({
    url:'example.php',
    datatype: 'xml',
    mtype: 'GET',
    colNames:['Numero','Nature', 'Nom','Qualification','PrixMax','PrixMin'],
    colModel :[ 
      {name:'Numero', index:'Numero', width:55,cellEdit:true, celledittype:'text'}, 
      {name:'Nature',
      index:'Nature',
      editable: true,
      edittype: 'text',
      editoptions: { size: 10},
      editrules: {required: true },
      formoptions: { label: 'Nature' },
      width:90}, 
      {name:'Nom', index:'Nom', width:180, align:'right',editable: true,edittype:'textarea'}, 
      {name:'Qualification', index:'Qualification', width:80, align:'right',editable: true,edittype:'textarea'}, 
      {name:'PrixMax', index:'PrixMax', width:80, align:'right',editable: true,edittype:'textarea'}, 
      {name:'PrixMin', index:'PrixMin', width:150, sortable:false,editable: true,edittype:'textarea'} 
    ],
    pager: '#pager',
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'Numero',
    sortorder: 'desc',
    viewrecords: true,
    emptyrecords: "Nothing to display",
    gridview: true,
    editurl:'edit.php',
    edittype:'text',
    caption: 'My first grid',
    loadonce:true,
});
    $("#bedata").click(function(){
    var gr = jQuery("#editgrid").jqGrid('getGridParam','selrow');
    if( gr != null ) jQuery("#editgrid").jqGrid('editGridRow',gr,{height:280,reloadAfterSubmit:false,edit:true},{editurl:'edit.php',mtype:'POST'});
    else alert("Please Select Row");
});
}); 
</script>

</head>
<body>

<table id="editgrid"><tr><td/></tr></table> 
<div id="pager"></div> 
<input type="BUTTON" id="bedata" value="Edit Selected" />
</body>
</html>

这里是应该更新我的数据库的edit.php:

<?php

$dbhost ="localhost";
$dbuser="root";
$dbpassword="";
$database="geoclients";
$db = mysql_connect($dbhost, $dbuser, $dbpassword) or die("Connection Error: " . mysql_error()); 
mysql_select_db($database) or die("Error connecting to db."); 
$tablename="clients";
mysql_set_charset('utf8',$database);
mysql_query("SET NAMES 'utf8'");


    $Num     =  mysql_real_escape_string($_POST['Numero']);
    $Nat   =  mysql_real_escape_string($_POST['Nature']);
    $Nom =  mysql_real_escape_string($_POST['Nom']);
    $Qual    =  mysql_real_escape_string($_POST['Qualification']);
    $PrixMax  =  mysql_real_escape_string($_POST['PrixMax']);
    $PrixMin   =  mysql_real_escape_string($_POST['PrixMin']);

    $sql = "UPDATE ".$tablename." SET Nature = '".$Nat."', Nom = '".$Nom."', Qualification = '".$Qual."', PrixMax = '".$PrixMax."' , PrixMin = '".$PrixMin."' WHERE Numero = ".$Num.";";

    echo $sql;


$result=mysql_query($sql) or die(mysql_error());

mysql_close($db);



?>

与数据库的连接与最初用于填充网格的代码相同(它正在工作),所以我假设这个连接代码正在工作。我还检查了似乎没问题的请求的 SQL 语法。我的 SQL 数据库托管在本地 wamp 服务器上。

提前谢谢你。

【问题讨论】:

  • 编辑表单是否真的到达了edit.php页面? EG:你的 echo 脚本启动了吗?
  • 其实我不这么认为。回声脚本不会触发。那就是问题所在。但我不明白为什么。我虽然点击提交会调用“editurl”,即edit.php
  • 将 loadonce 更改为 false
  • 我刚刚尝试过 loadonce:false,它并没有改变任何东西 :(.

标签: php javascript jquery sql jqgrid


【解决方案1】:

我终于发现了我的错误。 我的 edit.php 使用了一个名为“Numero”的变量,因为它是我数据库中的主键,我需要它来更新正确的行。但是因为它是首要键,所以我不希望用户能够编辑它。所以看起来 Numero 变量没有与变量的其余部分一起发送,因此更新请求无法成功。

对不起,我犯了愚蠢的错误。 感谢所有帮助过我的人。

【讨论】:

    【解决方案2】:

    我使用 jqGrid,但不能说我曾经使用过内置编辑,我更喜欢自己处理所有这些东西以便更好地控制它。

    看看这是否适合你:

    $("#bedata").click(function() {
    
        var grid = $("#editgrid"),
            row  = grid.getGridParam('selrow'),
            data = grid.getRowData(row);
    
        if (row != null) {
            // Send the ajax request first
            $.ajax({
                url: edit.php,
                data: data,
                type: 'POST',
                success: function(data) {
                    console.log(data); // check returned string here
                   // here you can put extra code to handle the rows updating
                }
            });
        }
        else alert('Please select row');
    });
    

    【讨论】:

    • 我已经用你的替换了我的编辑按钮。但是现在,当我单击“编辑所选内容”时,什么都没有出现(没有编辑表单)。这正常吗?
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2018-12-25
    相关资源
    最近更新 更多