2013-07-15 3 views
0

Я добавление данных в базу данных и мне нужна новый идентификатор для каждого элемента, идентификатор элемента получает передаются в АЯКС данных ...Включите данные 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 динамическими поэтому, когда пользователь щелкает добавить новый элемент идентификатор будет приращение ex. каждый раз, когда добавляется новый клик, будет создан новый div, id будет глупым + 1, поэтому, если есть 10 элементов, у десятой будет ID глупых10, надеюсь, что это имеет смысл?

Посмотрите на .draggable код/​​АЯКС выше вы видите УАК DIVID, который принимает идентификатор каждого DIV с классом .silly-string так, глядя на консоли входа у него есть из положить каждый ID ..

То, что я пытаюсь достичь, заключается в добавлении данных в базу данных, где я создаю новую строку для каждого идентификатора, но переписываю каждую строку, которая уже была создана с этим идентификатором ... Позвольте мне показать пример, чтобы иметь смысл что я только что сказал ...

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

Вы видите, что у новой строки глупо, и silly2 ... единственная причина, я делаю это потому, что я вручную изменил ID 100 & 101 .. но мне нужно изменить идентификатор, чтобы быть динамичным, позвольте мне показать вам пример ..

 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 & меняются, потому что ДА это создает новый идентификатор, но каждый раз меняет идентификатор на новый идентификатор ...

Теперь, когда вам нужно ускорить то, что у меня происходит (надеюсь, что это было не долго и не имеет смысла), мне нужно будет создать новую переменную ajax для передачи или мне нужно будет создать оператор foreach ? ех.

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

или автоматическое приращение переменной в Аякса .. Я имею в виду я действительно потерял в этой части, и я открыт для некоторых более опытных людей, мнений и решений .. может спасти меня много головной боли ...

Позвольте мне знать, если вам нужно мне указывать что-то его трудно напечатать, что exactaly я вижу в моем коде и моей логике, но я сделал все, что мог

После @ 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 .. для каждого должна быть только одна строка.

ответ

2

Ваш первичный ключ сбивает с толку. Вы хотите, чтобы sillyXX был уникальным. (Это требование не создавать дополнительные строки). Это означает, что вам нужно проверить, существует ли строка с sillyXX. Таким образом, вы можете использовать sillyXX как ваш PK.

Есть несколько способов сделать это. Вы можете select ... where. Думая об этом, это единственный реальный путь. Если вы хотите использовать другой способ, вы можете просто сделать PKsillyXX. (Я мог бы объяснить, но сейчас это не имеет особого значения).

Итак, перед вами $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. 
} 

Это должно сработать/получить вас на правильном пути. Если нет, вам придется уточнить ваши вопросы.

+0

Хорошо, извините, я узнал, почему он исчезает ... Я правильно выполнил код? – Mike

+0

Не добавили бы 1 на $ term_id для каждой уникальной работы ID? – Mike

+0

Я не уверен, что вы имеете в виду? –

Смежные вопросы