我有下面的代碼,它向我的服務器上的php文件發送一個AJAX POST,以將一行添加到MySQL表中。當用戶標記的項目是他們最喜歡這一功能獲取運行:MySQL不一致地更新行?
$.ajax({
type: 'POST',
data: 'school='+school+'&token='+token,
url: 'http://www.codekraken.com/testing/snowday/database9.php',
success: function(data){
console.log(data);
},
error: function(){
console.log(data);
}
});
我也有一個運行時,他們刪除喜愛類似的功能:
data: 'school=&token='+token,
這工作,但不是一致。在PHP代碼如下:
<?php
$server = "localhost";
$username = "";
$password = "";
$database = "";
$con = mysql_connect($server, $username, $password) or die ("Could not connect: " . mysql_error());
mysql_select_db($database, $con);
$token = $_POST["token"];
$school = $_POST["school"];
if (strlen($token) == 0){
die('Incorrect token');
}
if (strlen($school) == 0){
die('Invalid school name');
}
$sql = "INSERT INTO Snow (Token, School, Skip) ";
$sql .= "VALUES ('$token', '$school', '0') ON DUPLICATE KEY UPDATE School='$school'";
if (!mysql_query($sql, $con)) {
die('Error: ' . mysql_error());
} else {
echo "$token, $school = Success";
}
mysql_close($con);
?>
我的意思是不能持續的工作是,如果我標誌着一個項目的喜愛,它會創建一個行。如果我取消標記,它會將$school
更改爲無。如果我然後標記不同的項目,它將更改爲該項目。 IF,但是,我嘗試將第一個項目標記爲最愛,它不會更新,但會保留最後一次更改。
因此,它似乎只是在每次發生新事情時才更新行,但如果該值已經存在,即使它不是當前存在的,也不會。
注:柱Token
被索引爲UNIQUE PRIMARY
JS代碼,涉及到var school
:
function setFavorite() {
var threshold = {
x: 30,
y: 10
};
var originalCoord = {
x: 0,
y: 0
};
var finalCoord = {
x: 0,
y: 0
};
function touchMove() {
finalCoord.x = event.targetTouches[0].pageX;
changeX = originalCoord.x - finalCoord.x;
var changeY = originalCoord.y - finalCoord.y;
if (changeY < threshold.y && changeY > (threshold.y * -1)) {
changeX = originalCoord.x - finalCoord.x;
if (changeX > threshold.x) {
window.removeEventListener('touchmove', touchMove, false);
$(document).off("touchmove", ".row");
if ($(event.target).attr("class") === "row-inside") {
var element = $(event.target);
}
if ($(event.target).attr("class") === "row-l") {
var element = $(event.target).parent();
}
if ($(event.target).attr("class") === "row-r") {
var element = $(event.target).parent();
}
var text = $(element).find(".row-l").text();
var token = window.deviceToken;
var school = $(element).find(".row-l").text();
var favstatus = $(element).find(".row-r").text();
var thisStar = $(element).parent().find(".star-inside");
$(element).css("margin-left", "-75px");
if ($(thisStar).hasClass("favorite")) {
$.ajax({
type: 'POST',
data: 'school=&token=' + token,
url: 'http://www.codekraken.com/testing/snowday/database10.php',
success: function (data) {
console.log(data);
},
error: function() {
console.log(data);
}
});
$(".clear span").text("");
$(thisStar).removeClass("favorite");
localStorage.removeItem("favorite");
localStorage.removeItem("favorite-status");
} else {
$.ajax({
type: 'POST',
data: 'school=' + school + '&token=' + token,
url: 'http://www.codekraken.com/testing/snowday/database10.php',
success: function (data) {
console.log(data);
},
error: function() {
console.log(data);
}
});
$(".clear span").text("\"" + text + "\"");
localStorage.setItem("favorite", text);
localStorage.setItem("favorite-status", favstatus);
$(".star-inside").not(thisStar).removeClass("favorite");
$(thisStar).addClass("favorite");
}
setTimeout(function() {
$(element).css("margin-left", "0px");
}, 500);
setTimeout(function() {
$(document).on("touchmove", ".row", function() {
touchMove();
});
}, 800);
}
}
}
function touchStart() {
originalCoord.x = event.targetTouches[0].pageX;
finalCoord.x = originalCoord.x;
}
$(document).on("touchmove", ".row", function() {
touchMove();
});
$(document).on("touchstart", ".row", function() {
touchStart();
});
}
MySQL的輸出:
CREATE TABLE `Snow` (
`Token` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`School` text COLLATE utf8_unicode_ci NOT NULL,
`Skip` int(1) NOT NULL,
PRIMARY KEY (`Token`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicod
而不是根據邏輯用戶操作來解釋這些,這些操作很難理解您的意思,請給我們提供您調用腳本的確切參數以及結果(包括腳本輸出)的示例。向我們展示您調用腳本的示例,並獲得與您想要的結果不同的結果。 –
腳本輸出總是正確的輸出'2012-10-24 22:04:00.693下雪天[1651:907] [INFO] TOKEN,SCHOOL =成功',其中TOKEN和SCHOOL是實際值。 JS被稱爲你如何看待它。當你點擊'div'時,它會運行第一個腳本,發送請求,然後將它添加爲收藏夾。然後再次點擊將其刪除,並運行JS的第二部分,將SCHOOL設置爲無。它全部發布到PHP腳本,它返回上面的輸出。就像我說的那樣,一旦它被更新爲先前的值,它就不會更新該行。 – Charlie
我們需要看看變量'school'是如何在JS中定義的。它從哪裏收集,以及它可能遇到什麼潛在的碰撞。 –