我自己有一个包含三个字段的数据库表:
id, content, timestamp
id
和timestamp
会自动生成。
我把这个数据库连接到一个flash电影,通过php将数据库表虹吸到一个XML中,然后将这些数据导入到flash电影中。
在这个项目的前端,我有一个html表单,它通过AJAX POST将textarea值提交到数据库中。
表单,提交,xml导出和flash显示都正常工作,除了一件事。
由于这是在网页上,我想确保多个用户并访问该页面并实际观看正在提交的帖子,即时弹出flash动画。我遇到的问题是,如果两个人同时提交,则两者都被提交到数据库中,但只有最后出现在数据库中的提交才会出现在flash电影中。
我想知道从长远来看会有什么好处?重新编写我的jQuery,以便在用户单击提交后添加一个随机的延迟,或者返回到actionscript并重新编写代码以允许从数据库中的多行推送多个数组。
这是我正在使用的动作脚本:
function xmlGrab() {
postXML.onLoad = function(success:Boolean) {
loaded = false;
mArray = [];
if (!success) {
trace("Error Loading XML");
} else {
var nodeM = this.childNodes[0].childNodes;
for (m = 0; m < nodeM.length; m++) {
mArray.push({id:nodeM[m].attributes.id, cont:nodeM[m].attributes.content, mark:nodeM[m].attributes.watermark, time:nodeM[m].attributes.timestamp});
mID = mArray[m].id;
if (m == nodeM.length - 1) {
loaded = true;
addPost();
}
}
}
};
postXML.load(phpURL + "?uniqueID=" + getTimer());
}
function addPost() {
if (loaded) {
if (cID != mID) {
_root.attachMovie("masterClip","masterClip" + Number(cID),_root.getNextHighestDepth());
this["masterClip" + Number(cID)].varContent = mArray[count].cont;
this["masterClip" + Number(cID)].varMark = mArray[count].mark;
this["masterClip" + Number(cID)].varTime = mArray[count].time;
cID++;
if (count != 9) {
count++;
}
}
}
}
setInterval(xmlGrab,3000);
xmlGrab();
这是我正在使用的javascript / jQuery / Ajax代码:
<form id="survey" name="survey" action="wrapup_insert.php" method="post">
<textarea id="comments" class="qText" name="comments"></textarea>
<div id="buttonDiv">
<a class="button" id="submit" style="cursor:pointer;">SUBMIT</a>
</div>
</form>
<script>
$("#submit").click(function() {
validate();
});
function submit(){
var com = $(".qText").val();
var dataString = 'comments='+encodeURIComponent(com);
$.ajax({
type: "POST",
url: "wrapup_insert.php",
data: dataString,
success: function() {
//centerPopup();
//loadPopup();
//window.location = 'index.html';
clearForms();
}
});
}
function validate(){
if ($(".qText").val() == ""){
alert("Please Enter a Comment");
} else {
submit();
}
}
function clearForms() {
$(".qText").val('');
}
</script>
这是我正在使用的php:
POST PHP脚本:
<?php
$host = "localhost";
$user = "root";
$password = "";
$database = "wrapup";
$link = mysql_connect($host, $user, $password);
mysql_select_db($database);
$comments = "";
//SURVEY INFORMATION
$comments = mysql_real_escape_string($_REQUEST['comments']);
$addClient = "INSERT INTO data (content) VALUES ('$comments')";
mysql_query($addClient) or die(mysql_error());
mysql_close($link);
?>
XML导入PHP:
<?PHP
$host = "XXXX";
$user = "XXXX";
$password = "XXXX";
$database = "wrapup";
$link = mysql_connect($host, $user, $password);
mysql_select_db($database);
$last_timestamp = $_GET['ts'];
$query = "SELECT * FROM(SELECT id, content, UNIX_TIMESTAMP(timestamp) AS unixtime FROM data WHERE UNIX_TIMESTAMP(timestamp) < NOW() ORDER BY id DESC LIMIT 10) T ORDER by id ASC";
$results = mysql_query($query);
echo "<?xml version=\"1.0\"?> \n";
echo "<data>\n";
while ( $line = mysql_fetch_assoc($results)){
$oCont = array("<", ">", "\'", "\"", "'");
$rCont = array("<", ">", "'", """, "'");
$content = str_replace($oCont, $rCont, html_entity_decode($line["content"]));
$ts = DateTime::createFromFormat("U",$line["unixtime"]);
$ts->setTimezone(new DateTimeZone("America/Chicago"));
echo "<entry id=\"" . $line["id"] ."\" content=\"" . $content ."\" watermark=\"http://localhost/wrapup/images/gehc.png\" timestamp=\"" . $ts->format("M d, Y"). " at " . $ts->format("g:ia") ." CST"."\"/>\n";
}
echo "</data>\n";
mysql_close($link);
?>
我希望这能说明一些事情。一点解释,我正在使用双重查询,以便我可以捕获最后十个帖子,然后按时间顺序将它们排序。闪存是动态的,因此它只会在“ Now ”之后加载前十个和所有闪存。