- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发我在网上找到的这个 jQuery 插件,它允许用户在图像上添加一些评论。我一直在尝试重写它的一部分,以便将有关图像的评论保存到 MySQL 数据库中。我正在使用 javascript 和 php 来帮助保存这些评论,但我一直没有运气。任何人都可以提供提示或技巧来帮助我吗?
这是我的代码:HTML:
<html>
<head>
<title>Image Annotations</title>
<style type="text/css" media="all">@import "css/annotation.css";</style>
<script type="text/javascript" src="js/jquery-1.3.2.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.7.1.js"></script>
<script type="text/javascript" src="js/anno.js"></script>
<script type="text/javascript">
$(window).load(function() {
$("#toAnnotate").annotateImage({
getUrl: "php/getTag.php",
saveUrl: "php/saveTag.php",
deleteUrl: "php/deleteTag.php",
editable: true
});
});
</script>
</head>
<body>
<div>
<img id="toAnnotate" src="images/lab124.jpg" width="950" height="575" />
</div>
</body>
</html>
javascript(我认为问题出在 createSaveButton 部分):
/// <reference path="jquery-1.2.6-vsdoc.js" />
(function($) {
/// <summary>
/// Creates annotations on the given image.
/// Images are loaded from the "getUrl" propety passed into the options.
/// </summary>
$.fn.annotateImage = function(options) {
var opts = $.extend({}, $.fn.annotateImage.defaults, options);
var image = this;
this.image = this;
this.mode = 'view';
// Assign defaults
this.getUrl = opts.getUrl;
this.saveUrl = opts.saveUrl;
this.deleteUrl = opts.deleteUrl;
this.editable = opts.editable;
this.useAjax = opts.useAjax;
this.notes = opts.notes;
// Add the canvas
/*
<div class="image-annotate-canvas">
<div class="image-annotate-view"></div>
<div class="image-annotate-edit">
<div class="image-annotate-edit-area"></div>
</div>
</div>
*/
this.canvas = $('<div class="image-annotate-canvas"><div class="image-annotate-view"></div><div class="image-annotate-edit"><div class="image-annotate-edit-area"></div></div></div>');
this.canvas.children('.image-annotate-edit').hide();
this.canvas.children('.image-annotate-view').hide();
this.image.after(this.canvas);
// Give the canvas and the container their size and background
this.canvas.height(this.height());
this.canvas.width(this.width());
this.canvas.css('background-image', 'url("' + this.attr('src') + '")');
this.canvas.children('.image-annotate-view, .image-annotate-edit').height(this.height());
this.canvas.children('.image-annotate-view, .image-annotate-edit').width(this.width());
// Add the behavior: hide/show the notes when hovering the picture
this.canvas.hover(function() {
if ($(this).children('.image-annotate-edit').css('display') == 'none') {
$(this).children('.image-annotate-view').show();
}
}, function() {
$(this).children('.image-annotate-view').hide();
});
this.canvas.children('.image-annotate-view').hover(function() {
$(this).show();
}, function() {
$(this).hide();
});
// load the notes
if (this.useAjax) {
$.fn.annotateImage.ajaxLoad(this);
} else {
$.fn.annotateImage.load(this);
}
// Add the "Add a note" button
/*
<a class="image-annotate-add" id="image-annotate-add" href="#">Add Note</a>
*/
if (this.editable) {
this.button = $('<a class="image-annotate-add" id="image-annotate-add" href="#">Add Note</a>');
this.button.click(function() {
$.fn.annotateImage.add(image);
});
this.canvas.after(this.button);
}
// Hide the original
this.hide();
return this;
}; // end of annotateImage
/**
* Plugin Defaults
**/
$.fn.annotateImage.defaults = {
getUrl: 'your-get.rails',
saveUrl: 'your-save.rails',
deleteUrl: 'your-delete.rails',
editable: true,
useAjax: true,
notes: new Array()
};
/// <summary>
/// Clears all existing annotations from the image.
/// </summary>
$.fn.annotateImage.clear = function(image) {
for (var i = 0; i < image.notes.length; i++) {
image.notes[image.notes[i]].destroy();
}
image.notes = new Array();
};
/// <summary>
/// Loads the annotations from the "getUrl" property passed in on the
/// options object.
/// </summary>
$.fn.annotateImage.ajaxLoad = function(image) {
$.getJSON(image.getUrl + '?ticks=' + $.fn.annotateImage.getTicks(), function(data) {
image.notes = data;
$.fn.annotateImage.load(image);
});
};
/// <summary>
/// Loads the annotations from the notes property passed in on the
/// options object.
/// </summary>
$.fn.annotateImage.load = function(image) {
for (var i = 0; i < image.notes.length; i++) {
image.notes[image.notes[i]] = new $.fn.annotateView(image, image.notes[i]);
}
};
/// <summary>
/// Gets a count of the ticks for the current date.
/// This is used to ensure that URLs are always unique and not cached by the browser.
/// </summary>
$.fn.annotateImage.getTicks = function() {
var now = new Date();
return now.getTime();
};
/// <summary>
/// Adds a note to the image.
/// </summary>
$.fn.annotateImage.add = function(image) {
if (image.mode == 'view') {
image.mode = 'edit';
// Create/prepare the editable note elements
var editable = new $.fn.annotateEdit(image);
$.fn.annotateImage.createSaveButton(editable, image);
$.fn.annotateImage.createCancelButton(editable, image);
}
};
/// <summary>
/// Creates a Save button on the editable note.
/// </summary>
$.fn.annotateImage.createSaveButton = function(editable, image, note) {
/*
<a class="image-annotate-edit-ok">OK</a>
*/
var ok = $('<a class="image-annotate-edit-ok">OK</a>');
ok.click(function() {
var form = $('#image-annotate-edit-form form');
var text = $('#image-annotate-text').val();
var left = editable.area.position().left;
var top = editable.area.position().top;
var height = editable.area.height();
var width = editable.area.width();
$.fn.annotateImage.appendPosition(form, editable)
image.mode = 'view';
alert(form.serialize());
// Save via AJAX
if (image.useAjax) {
$.ajax({
type: "POST",
url: image.saveUrl,
dataType: "json",
data: form.serialize(),
error: function(e) { alert("An error occurred saving that note.") },
success: function(data) {
if (data.annotation_id != undefined) {
editable.note.id = data.annotation_id;
}
}
});
}
// Add to canvas
if (note) {
note.resetPosition(editable, text);
} else {
editable.note.editable = true;
note = new $.fn.annotateView(image, editable.note)
note.resetPosition(editable, text);
image.notes.push(editable.note);
}
editable.destroy();
});
editable.form.append(ok);
};
/// <summary>
/// Creates a Cancel button on the editable note.
/// </summary>
$.fn.annotateImage.createCancelButton = function(editable, image) {
/*
<a class="image-annotate-edit-close">Cancel</a>
*/
var cancel = $('<a class="image-annotate-edit-close">Cancel</a>');
cancel.click(function() {
editable.destroy();
image.mode = 'view';
});
editable.form.append(cancel);
};
/// <summary>
/// Defines a annotation area.
/// </summary>
$.fn.annotateView = function(image, note) {
this.image = image;
this.note = note;
this.editable = (note.editable && image.editable);
// Add the area
this.area = $('<div class="image-annotate-area' + (this.editable ? ' image-annotate-area-editable' : '') + '"><div></div></div>');
image.canvas.children('.image-annotate-view').prepend(this.area);
// Add the note
this.form = $('<div class="image-annotate-note">' + note.text + '</div>');
this.form.hide();
image.canvas.children('.image-annotate-view').append(this.form);
this.form.children('span.actions').hide();
// Set the position and size of the note
this.setPosition();
// Add the behavior: hide/display the note when hovering the area
var annotation = this;
this.area.toggle/*hover*/(function() {
annotation.show();
}, function() {
annotation.hide();
});
};
/// <summary>
/// Edits the annotation.
/// </summary>
$.fn.annotateView.prototype.edit = function() {
if (this.image.mode == 'view') {
this.image.mode = 'edit';
var annotation = this;
// Create/prepare the editable note elements
var editable = new $.fn.annotateEdit(this.image, this.note);
$.fn.annotateImage.createSaveButton(editable, this.image, annotation);
// Add the delete button
/*
<a class="image-annotate-edit-delete">Delete</a>
*/
var del = $('<a class="image-annotate-edit-delete">Delete</a>');
del.click(function() {
var form = $('#image-annotate-edit-form form');
$.fn.annotateImage.appendPosition(form, editable)
if (annotation.image.useAjax) {
$.ajax({
url: annotation.image.deleteUrl,
data: form.serialize(),
error: function(e) { alert("An error occured deleting that note.") }
});
}
annotation.image.mode = 'view';
editable.destroy();
annotation.destroy();
});
editable.form.append(del);
$.fn.annotateImage.createCancelButton(editable, this.image);
}
};
PHP:
//insert a tag
$comment = $_POST['text'];
$left = $_POST['left'];
$top = $_POST['top'];
$height = $_POST['height'];
$width = $_POST['width'];
$sql = "INSERT INTO tag (text,left,top,height,width) VALUES ('$comment',$left,top,height,$width)";
//$sql = 'INSERT INTO tag (text,left,top,height,width) VALUES ('.$comment.','.$left.','.$top.','.$height.','.$width.')';
$qry = mysql_query($sql);
?>
最佳答案
我也一直在努力。我的数据库不允许我保存到列名为“left”的表中。我不得不将其更改为“left_pos”之类的内容。看看这是否有效,但让我们知道您收到的错误消息类型也有帮助。
关于php - 将图像注释保存到 MySQL 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8868536/
目前我正在构建相当大的网络系统,我需要强大的 SQL 数据库解决方案。我选择 Mysql 而不是 Postgres,因为一些任务需要只读(MyISAM 引擎)而其他任务需要大量写入(InnoDB)。
我在 mysql 中使用如下命令。当它显示表格数据时,它被格式化为一个非常干净的表格,间距均匀且 |作为列分隔符。 SELECT * FROM TABLE_NAME; 当我从 CLI 运行命令时,如下
我知道这个问题之前已经被问过好几次了,我已经解决了很多问题,但到目前为止没有任何效果。 MySQL 试图将自身安装到的目录 (usr/local/mysql) 肯定有问题。关于我的错误的奇怪之处在于我
以下是我的 SQL 数据结构,我正在尝试如下两个查询: Select Wrk_ID, Wrk_LastName, Skill_Desc from Worker, Skill where
我们有一个本地 mysql 服务器(不在公共(public)域上),并希望将该服务器复制到我们拥有的 google 云 sql 实例。我的问题是:1.这可能吗?2.我们的本地服务器只能在本地网络上访问
我有一个表(test_table),其中一些字段值(例如字段 A、B 和 C)是从外部应用程序插入的,还有一个字段(字段 D),我想从现有表(store_table)插入其值,但在插入前者(A、B 和
我想创建一个 AWS RDS 实例,然后使用 terraform 管理数据库用户。因此,首先,我创建了一个 RDS 实例,然后使用创建的 RDS 实例初始化 mysql 提供程序,以进一步将其用于用户
当用户在我的网站上注册时,他们会在我的一个数据库中创建自己的表格。该表存储用户发布的所有帖子。我还想做的是也为他们生成自己的 MySql 用户——该用户仅有权从他们的表中读取、写入和删除。 创建它应该
我有一个关于 ColdFusion 和 Mysql 的问题。我有两个表:PRODUCT 和 PRODUCT_CAT。我想列出包含一些标记为:IS_EXTRANET=1 的特殊产品的类别。所以我写了这个
我想获取 recipes_id 列的值,以获取包含 ingredient_id 的 2,17 和 26 条目的值。 假设 ingredient_id 2 丢失则不获取记录。 我已经尝试过 IN 运算符
在 Ubuntu 中,我通常安装两者,但 MySQL 的客户端和服务器之间有什么区别。 作为奖励,当一个新语句提到它需要 MySQL 5.x 时,它是指客户端、服务器还是两者兼而有之。例如这个链接ht
我重新访问了我的数据库并注意到我有一些 INT 类型的主键。 这还不够独特,所以我想我会有一个指导。 我来自微软 sql 背景,在 ssms 中你可以 选择类型为“uniqeidentifier”并自
我的系统上有 MySQL,我正在尝试确定它是 Oracle MySQL 还是 MySQL。 Oracle MySQL 有区别吗: http://www.oracle.com/us/products/m
我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。 我面临的问题是执行以下请求大约需要 10 秒: SELECT COUNT(*) FROM `
我有两个位于不同机器上的 MySQL 数据库。我想自动将数据从一台服务器传输到另一台服务器。比方说,我希望每天早上 4:00 进行数据传输。 可以吗?是否有任何 MySQL 内置功能可以让我们做到这一
有什么方法可以使用 jdbc 查询位于 mysql 根目录之外的目录中的 mysql 表,还是必须将它们移动到 mysql 根目录内的数据库文件夹中?我在 Google 上搜索时没有找到任何东西。 最
我在 mysql 数据库中有两个表。成员和 ClassNumbers。两个表都有一个付费年份字段,都有一个代码字段。我想用代码数字表中的值更新成员表中的付费年份,其中成员中的代码与 ClassNumb
情况:我有 2 台服务器,其中一台当前托管一个实时 WordPress 站点,我希望能够将该站点转移到另一台服务器,以防第一台服务器出现故障。传输源文件很容易;传输数据库是我需要弄清楚如何做的。两台服
Phpmyadmin 有一个功能是“复制数据库到”..有没有mysql查询来写这个函数?类似于将 db A 复制到新的 db B。 最佳答案 首先创建复制数据库: CREATE DATABASE du
我有一个使用 mySQL 作为后端的库存软件。我已经在我的计算机上对其进行了测试,并且运行良好。 当我在计算机上安装我的软件时,我必须执行以下步骤: 安装 mySQL 服务器 将用户名指定为“root
我是一名优秀的程序员,十分优秀!