0

我正在向数据库添加数据,我需要为每个元素创建一个新 ID,元素的 ID 被传递到 ajax 数据中......

    $( ".silly-string" ).draggable({
    containment: '#_moon_static_bg_status',

     stop: function(event, ui) {
         var pos_x = ui.position.left;
         var pos_y = ui.position.top;
         var divid = ui.helper.attr("id");

         jQuery.ajax({
            type: "POST",
            url: window.ajaxurl,
            data: { "action": "myAjax", id: divid, x: pos_x, y: pos_y }}).done(function( msg ) {
                $('.silly-string').text(msg)

         });    
      }  
});

数据仅在拖动功能发生时发送(所以我认为可能需要在其他地方创建数据?)...让我向您展示一个 HTML 示例

    echo '<div class="silly-string draggable" id="silly"style="left: '.$x.'px; top: '.$y.'px;"></div>';

    echo '<div class="silly-string draggable" id="silly2"style="left: '.$x.'px; top: '.$y.'px;"></div>';

    echo '<div class="silly-string draggable" id="silly3"style="left: '.$x.'px; top: '.$y.'px;"></div>';

我将使这些 IDS 动态化,因此当用户单击添加新元素时,ID 将增加 ex。每次点击 add new 时都会创建一个新的 div,id 为 silly + 1,所以如果有 10 个元素,第十个元素的 ID 为 silly10,希望这有意义吗?

看看上面的 .draggable/ajax 代码,你会看到 var div,它使用类的每个 div 的 id,.silly-string所以查看控制台日志它确实有一个输出每个 ID ..

我想要实现的是将数据添加到数据库中,在那里我为每个 ID 创建一个新行,但覆盖已经使用该 ID 创建的每一行......让我展示一个示例以了解什么我只是说...

http://i.stack.imgur.com/rIPQM.jpg

你看我有一个 silly 和 silly2 的新行......我这样做的唯一原因是因为我手动更改了 ID 100 和 101.. 但我需要将 id 更改为动态的,让我给你看一个例子。 .

      global $wpdb;


    //The data here comes from an ajax call
    $_POST['x'];
    $_POST['y'];
    $_POST['id']; 

    $term_id = 100; 
    $name = $_POST['id']; 
    $slug = $_POST['x'];
    $term_group = $_POST['y']; 

    //Im adding into wp_terms a default table (for testing)... 
    $query = "INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES (%s, %s, %s, %s)"; 

    //Here I insert the ajax data into the columns 
    $wpdb->query($wpdb->prepare($query, $term_id, $name, $slug, $term_group));

    $wpdb->update("$wpdb->terms", array('slug' => $_POST['x'], 'term_group' => $_POST['y']), array('name' => $_POST['id']));

    die();

在这里,我将数据添加到数据库中...注意变量$name,并且$slug是基于 ajax 数据的动态...当我运行更新时$wpdb->update("$wpdb->terms", array('slug' => $_POST['x'], 'term_group' => $_POST['y']), array('name' => $_POST['id']));,它对一个元素运行良好,我用新数据覆盖 slug...如果我进行$term_id = 100;动态,那么它就违背了我每次 x 和 y 值更改时不创建新行的目的,因为是的,它确实创建了一个新 ID,但它每次都将 id 更改为新 id...

既然您已经掌握了我正在做的事情(希望这不是很长并且有意义),我需要创建一个新的 ajax 变量来传递,还是需要创建一个 foreach 语句?前任。

   foreach($_POST['id'] as $key => $value) {
     //Stuff
   }

或自动增加ajax中的变量..我的意思是我真的迷失在这部分并且对一些更有经验的人的意见和解决方案持开放态度..可以让我省去很多头痛......

如果您需要我指定任何难以打印出我在代码和逻辑中看到的内容的内容,请告诉我,但我已尽我所能

遵循@MH- 解决方案,表格如下所示

http://i.stack.imgur.com/PO0AM.jpg

当元素被拖动时,它仍然添加了一个新行......这是我在脚本中实现代码的方式,也许我做错了?

   global $wpdb;


    //The data here comes from an ajax call
    $_POST['x'];
    $_POST['y'];
    $_POST['id']; 


    $name = $_POST['id']; 
    $slug = $_POST['x'];
    $term_group = $_POST['y']; 

    $myrows = $wpdb->get_row( "SELECT id FROM {$wpdb->terms} WHERE name LIKE '{$name}'" );
       if( $myrows != null ){
    $term_id = $myrows->id;
         $wpdb->update("$wpdb->terms", array('slug' => $_POST['x'], 'term_group' => $_POST['y']), array('name' => $_POST['id']));
       } else {
         //Im adding into wp_terms a default table (for testing)... 
         $query = "INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES (%s, %s, %s, %s)"; 

         //Here I insert the ajax data into the columns 
         $wpdb->query($wpdb->prepare($query, $term_id, $name, $slug, $term_group));
    }

    die();

看图像......愚蠢和愚蠢的2在哪里......每个应该只有一行。

4

1 回答 1

2

您的主键令人困惑。你希望它sillyXX是独一无二的。(这是不创建额外行的要求)。这意味着您需要检查是否sillyXX已经存在行。所以你可以sillyXX用作你的PK

有几种方法可以做到这一点。你可以select ... where。想一想,这是唯一真正的方法。如果你想使用不同的方式,你不妨只做PK sillyXX。(我可以解释,但现在并不严格相关)。

所以,在你之前$query = "INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES (%s, %s, %s, %s)";,你会想打电话给这个。

$myrows = $wpdb->get_row( "SELECT id FROM {$wpdb->terms} WHERE name LIKE '{$name}'" );
if( $myrows != null ){
    $term_id = $myrows->id;
    // This is an old row. Call Update.
} else {
    // This is a new row. Call Insert.
}

这应该工作/让你走上正确的轨道。如果不是,您将不得不澄清您的问题。

于 2013-07-15T22:50:41.680 回答