同时在数据库中插入和更新数据

时间:2014-03-04 04:54:10

标签: php jquery mysql

我想要什么 - 我想在没有现有数据时将数据插入数据库,如果数据已存在于数据库中则更新。

问题 - 如果我点击提交按钮而不输入新数据,数据仍会插入数据库。

到目前为止,这是我的代码:

<script type="text/javascript" src="js/jquery-1.7.1.js"></script>
<?php 
    mysql_connect("localhost","root","");
    mysql_select_db("cuba");


    if(isset($_POST['hantar']))
    {

        for($a=1; $a<=count($_POST['name']); $a++)
        {

            /*$sqlQuery = "REPLACE INTO a (id,name,ic) VALUES     ('".$_POST['id'][$a]."','".$_POST['name'][$a]."', '".$_POST['ic'][$a]."')";   */
            $sqlQuery = "INSERT INTO a (id,name,ic) VALUES     ('".$_POST['id'][$a]."','".$_POST['name'][$a]."', '".$_POST['ic'][$a]."' ) on DUPLICATE KEY UPDATE name='".$_POST['name'][$a]."', ic ='".$_POST['ic'][$a]."'";   
            mysql_query($sqlQuery)or die(mysql_error());

        }

    }
    ?>
<form action="" method="post">
<div class="b">
   <?php


    $a = 1;
    $share = mysql_query("select *from a")or die(mysql_error());
    while($share_papar = mysql_fetch_array($share))
    {
    ?>
            <table class="bb" style="border:1px solid #003;">
                <tr>
                    <td width="200">Name</td>
                    <td> : <input type="text" class="input_teks" name="name[]" value="<?    php echo $share_papar['name'];?>" />

                    </td>
                </tr>
                <tr>
                    <td>ic</td>
                    <td> : <input type="text" class="input_teks" name="ic[]" value="<?php echo $share_papar['ic'];?>" /></td>
                </tr>
                <tr>
                    <td>id</td>
                    <td> : <input type="text" class="input_teks" name="id[]" value="<?php echo $share_papar['id'];?>" id="akhir"/></td>
                </tr>

                <tr>
                    <td colspan="2" align="right" class="b_buang">Remove</td>


                </tr>
            </table>
        <?php 
    }?>    
            </div>
            <input type="submit" value="ss" name="hantar">
            </form>
            <span class="b_tambah">Add new group</span>

         <script type="text/javascript">
        $(function()
        {


            //nk clone
            $('.b_tambah').on('click',function(e)
            {

                 $(".b").find(".bb").last().clone(true).appendTo(".b");
                 alert(     $(".bb:last").find("input[id=akhir]").last().val());
                var m =      $(".bb:last").find("input[id=akhir]").last();
                m.val("");
            });

            //nk buang
             $(".b_buang").click(function () {

                    if($('.bb').length < 2)
                     {
                            alert("Remove operation can be done if GROUP more than one"); 
                     }
                    else
                    {
                        $(this).parents(".bb").remove();
                    }
            });

        });
        </script>
    <!-- close clone Shareholders -->

    </td>

我正在使用jquery来克隆与更新表单相同的表单,然后将值重置为空白以获取输入类型名称(id),因此我可以将non match name与现有数据相对应。但是,如果我提交表单而不克隆这些表单,数据将插入到数据库中。我想要的是,如果我不克隆新数据并只更新现有数据,则无需将数据插入数据库。我怎么能实现那个......

4 个答案:

答案 0 :(得分:1)

使用此代码

if(isset($_POST['hantar']))
    {

        for($a=1; $a<=count($_POST['name']); $a++)
        {

            $name = $_POST['name'][$a];
            $ic = $_POST['ic'][$a];
            $name = $_POST['name'][$a];

            $sel = mysql_query("select * from a where name = '$name' and ic = '$ic'  ");

            if(mysql_num_rows($sel) > 0){ 
            //write  update query   
            $fet  =mysql_fetch_array($sel); 
            $auto_increment_id = $fet['id']; 
             $sqlQuery = " update a set name = '$name' , ic = '$ic' where id = '$auto_increment_id' "; 
            }
            else { 
            // write insert query 
             $sqlQuery = "INSERT INTO a (id,name,ic) VALUES     ('".$_POST['id'][$a]."','".$_POST['name'][$a]."', '".$_POST['ic'][$a]."' ) ";   


            }
             mysql_query($sqlQuery)or die(mysql_error());

        }

    }

答案 1 :(得分:0)

首先检查$_POST['name']查询中的SELECT是否存在查询中的更新,如果没有,则插入数据库

答案 2 :(得分:0)

尝试替换

for($a=1; $a<=count($_POST['name']); $a++)

for($a=0; $a < count($_POST['name']); $a++)

并检查验证 e.g。

if(isset($_POST['name'][$a]) && trim($_POST['name'][$a]) != "")

答案 3 :(得分:0)

最后..这段代码救了我..

if(isset($_POST['hantar']))
    {

        for($a=0; $a < count($_POST['name']); $a++)
        {
            if($_POST['name'][$a]=="")
            {

            }else
            {

            if($_POST['id'][$a]=="")
            {
                $sqlQuery = "INSERT INTO a (name,ic) VALUES ('".$_POST['name'][$a]."', '".$_POST['ic'][$a]."' )";   
                mysql_query($sqlQuery)or die(mysql_error());
            }
            else
            {
            $sqlQuery = " update a set name = '{$_POST['name'][$a]}' , ic = '{$_POST['ic'][$a]}' where id = '{$_POST['id'][$a]}' "; 
            mysql_query($sqlQuery)or die(mysql_error());
            }

            }
        }

    }