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 が増加するようにします。add new がクリックされるたびに、新しい div が作成され、ID は愚かな + 1 になるため、10 個の要素がある場合、10 番目の要素の ID は silly10 になります。

上記の .draggable/ajax コードを見てください。var divid が表示されます。これは、クラスで各 div の ID を取得する.silly-stringため、コンソール ログを見ると、各 ID が出力されます。

私が達成しようとしているのは、IDごとに新しい行を作成するデータベースにデータを追加することですが、そのIDですでに作成されている各行を上書きします...何を理解するために例を示しましょう私はちょうど言った...

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

愚かな、そして愚かな2の新しい行があることがわかります...私がそうする唯一の理由は、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']));、1つの要素に対して正常に機能し、スラッグを新しいデータで上書きします...動的にする$term_id = 100;と、x と y の値が変わるたびに新しい行を作成しないという私の目的が無効になります。YES は新しい 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があるところ..それぞれに1行しかないはずです。

4

1 に答える 1