使用AJAX和PHP \ mysql进行编辑

时间:2010-12-27 08:19:04

标签: php jquery

通过大量访问,我找到了所有人的有用答案,并希望这也能让我对我的问题有所了解。

基本上我正在尝试用ajax编辑mysql数据。我已完成以下代码。

步骤1-我使用以下脚本从服务器加载数据

$("#editselected,#addselected").live("click", function(){
   var whatto=$(this).attr('id');var edit_ids = new Array();
   $(".selectable:checked").each(function() {
   edit_ids.push($(this).attr('name'));
    });
   $("#editadd").load("ajaxloads/addedit.php?idarray="+edit_ids+"&action="+whatto,Hide_Load());
   //centerPopup();//loadPopup();
     }); 

和ITs服务器数据

if($selectall_action=='editselected'){   ?>
    <table id="main" class="editallmainwidth">
    <thead>
    <tr>
    <th scope="col" >Vendor</th>
    <th scope="col" >ItemType</th>
    <th scope="col" >ItemCode</th>
    <th scope="col" >ItemName</th>
    <th scope="col" >SerialNo</th>
    <th scope="col" >AssetCode</th>
    <th scope="col" >Ownership</th>
    <th scope="col" >PO</th>
    </tr>
    </thead>
    <tbody>
    <?php
   $ids= split(",",$selectall_id_array);
foreach($ids as $sid)
{

$stock=mysql_query("select * FROM $region where id='$sid'");

            while($q=mysql_fetch_array($stock))
            {
    echo "<tr>";      

    echo "<td width=\"5%\"><input type='hidden' name='id_all' value='{$q[8]}' /><input type='text'  name='vend_all' value='$q[0]' /></td>";
    echo "<td width=\"5%\"><input type='text' name='type_all' value='$q[1]' /></td>";
    echo "<td width=\"8%\"><input type='text' name='code_all' value='$q[2]' /></td>";
    echo "<td width=\"20%\"><input type='text' name='desc_all' value='$q[3]' /></td>";
    echo "<td width=\"10%\"><input type='text' name='seno_all' value='$q[4]' /></td>";
    echo "<td width=\"5%\"><input type='text' name='acode_all' value='$q[5]' /></td>";
    echo "<td width=\"2%\"><input type='text' name='os_all' value='$q[9]' /></td>";
    echo "<td width=\"5%\"><input type='text' name='porder_all' value='$q[12]' />  </td>";

    echo "</tr>";
            }

     }  
     ?>
      </tbody>
      </table>
      <fieldset id="add">
            <input type="submit" id='editall' name="Modify" value="EditAll" />   </fieldset>

步骤2然后我编辑了加载了服务器数据的加载文本框并将ajax请求发送回服务器

$("#editall").live("click", function(){

    var id_alledit = new Array();
    var vendor_alledit = new Array();
    var type_alledit = new Array();
    var code_alledit = new Array();
    var desc_alledit = new Array();
    var seno_alledit = new Array();
    var acode_alledit = new Array();
    var os_alledit = new Array();
    var po_alledit = new Array();

    var isedited=$("#editall").val();



$("input[name='id_all']").map(function(index) {
id_alledit.push($(this).attr('value'));
});

var tcount=$("input[name='id_all']").length;

 $("input[name='vend_all']").map(function(index) {
vendor_alledit.push($(this).attr('value'));
 });


 $("input[name='type_all']").map(function(index) {
 type_alledit.push($(this).attr('value'));
 });

 $("input[name='code_all']").map(function(index) {
code_alledit.push($(this).attr('value'));
});

 $("input[name='desc_all']").map(function(index) {
 desc_alledit.push($(this).attr('value'));
 });

 $("input[name='seno_all']").map(function(index) {
 seno_alledit.push($(this).attr('value'));
});

$("input[name='acode_all']").map(function(index) {
acode_alledit.push($(this).attr('value'));
});
$("input[name='os_all']").map(function(index) {
os_alledit.push($(this).attr('value'));
});
 $("input[name='porder_all']").map(function(index) {
po_alledit.push($(this).attr('value'));
});



jQuery.ajax({
type:"POST",url:"ajaxloads/addedit.php",
data:"&id_arrays=" + id_alledit + "&vend_arrays=" + vendor_alledit + "&type_arrays=" +         type_alledit + "&code_arrays=" + code_alledit + "&desc_arrays=" + desc_alledit +   "&seno_arrays=" + seno_alledit + "&os_arrays=" + os_alledit + "&acode_arrays=" +   acode_alledit + "&po_arrays=" + po_alledit + "&ifedited=" + isedited + "&tcount=" + tcount  ,
      complete:function(data){


 //$("#main").load("ajaxloads/addedit.php",null,function(responseText){ 
 //$("#main").html(responseText);
//$('tr:even',this).addClass("odd");
   alert(data.responseText);
 //}); 

   }
 }); 

  //disablePopup(); 
   return false;
  });

AND使用以下服务器端代码

完成更新
if(isset($_POST[ifedited])=='EditAll')

{

$id_count= $_POST[tcount];
$idarray=split(",",$_POST[id_arrays]);
$vendarray=split(",",$_POST[vend_arrays]);
$typearray=split(",",$_POST[type_arrays]);
$codearray=split(",",$_POST[code_arrays]);
$descarray=split(",",$_POST[desc_arrays]);
$senoarray=split(",",$_POST[seno_arrays]);
$acodearray=split(",",$_POST[acode_arrays]);
$osarray=split(",",$_POST[os_arrays]);
$poarray=split(",",$_POST[po_arrays]);
//print_r($idarray);

       for($i=0;$i<=$id_count;$i++)
 {
 //echo $id_count;
 echo $idarray[$i];
 echo $typearray[$i];
 echo $vendarray[$i];
 echo $codearray[$i];
 echo $descarray[$i];
 echo $senoarray[$i];
 echo $acodearray[$i];
 echo $osarray[$i];
 echo $poarray[$i];

 mysql_query("update Query");



 }

    }

*每件事情都很好但似乎正在使用的步骤是 相当冗长,可能会导致性能问题。 我需要,如果有人可以建议我更好的方式来做这一切。或者,如果 JSON 是更好的选择?如果是那么我怎么能用关联数组创建一个JSON。

谢谢*

2 个答案:

答案 0 :(得分:1)

我建议您使用JSON来完成它。如果您有像这样返回的JSON

{
  "foo": "The quick brown fox jumps over the lazy dog.",
  "bar": "ABCDEFG",
  "baz": [52, 97]
}

使用jQuery像这样抓住它

$.getJSON('ajax-mysql/json.php', function(data) {
  $('.result').html('<p>' + data.foo + '</p>'
    + '<p>' + data.baz[1] + '</p>');
});

更新:将数据发送回mysql。的Javascript

var data = new Array();
data[0] = $("input1").val();
data[1] = $("input2").val();
data[2] = $("input3").val();

等...

var mysql_field=new Array();
mysql_field[0] = 'field1';
mysql_field[1] = 'field2';
mysql_field[2] = 'field3';

var jq = new Array();
for(i=0;i<data.length;i++){jq[i] = mysql_field[i]+'=\''+data[i]+'\'';}
jq=jq.join('&');

您可以使用当前变量替换datamysql_field。现在,您将使用jQuery更新它。

$(".submit").click(function(){
  $.post("/ajax-update.php",'"'+jq+'"',function (output){
    $("somediv").html(output); // the output on /ajax-update.php after data is submitted
  });
});

并在ajax-update.php文件上,您可以使用类似

的内容
$field[0] = $_POST['field1'];
$field[1] = $_POST['field2'];
$field[2] = $_POST['field2'];
$db->query_update("table",$field,"id=1"); //update where id=1

http://www.ricocheting.com/code/php/mysql-database-class-wrapper使用这个很棒的mysql包装类,该查询是如何实现的。看看它会让你的生活变得非常轻松。你所做的只是把它放在php文件的顶部

require("Database.class.php");
$db = new Database("server_name", "mysql_user", "mysql_pass", "mysql_database"); 

答案 1 :(得分:0)

这个问题:“我怎么能用关联数组创建一个JSON。”尝试使用json_encode功能。

你也可以:

  • 停止使用使用正则表达式的[deprecated]拆分函数并使用explode函数。

  • 在数组的调用中使用引号,如:$_POST[tcount]$_POST['tcount']

  • 当isset返回布尔值时,此测试非常奇怪:if(isset($_POST[ifedited])=='EditAll'){

  • 停止使用SELECT * FROM ...,但请写SELECT field1, field2 FROM ....

  • 在此调用中添加第三个参数:mysql_fetch_array($stock, MYSQL_NUM)

  • 此处:

    foreach($ ids为$ sid) {

    $ stock = mysql_query(“select * FROM $ region where id ='$ sid'”);

尝试使用WHERE子句的IN运算符来避免多次查询。

您的代码很难阅读,因为解析不好,但仍有很多改进会影响性能......