我正在向数据库添加数据,我需要为每个元素添加一个新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。每次添加new都会被点击一个新的div将被创建id将是傻+ 1,所以如果有10个元素,第十个将有一个ID为silly10,希望有意义吗?
看看上面的.draggable / ajax代码,你会看到var divid,它使用类.silly-string
获取每个div的id,因此查看控制台日志时它确实有一个输出每个ID。
我想要实现的是将数据添加到数据库,在那里我为每个ID创建一个新行,但覆盖已经使用该ID创建的每一行......让我举一个示例来制作一些我刚刚说的话......
http://i.stack.imgur.com/rIPQM.jpg
你看我有一个愚蠢的新行,而且愚蠢...我做的唯一原因是因为我手动更改了ID 100&amp; 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&amp;时都没有创建新行的目的。 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是......每个应该只有一行。
答案 0 :(得分: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.
}
这应该有效/让你走上正轨。如果不是,你将不得不澄清你的问题。