我有几个问题:我真的陷入了困境。
好的,第一个问题是我的jquery绑定到了我的按钮。该函数有效,但是当它绑定到我的asp控制按钮(Button1)时,由于某种原因我无法使用后面的代码更新mysql。
<script type="text/javascript">
$(function () {
$('[name*= "Button2"]').click(function () {
var x = $('[name*= "TextBox1"]').val();
var newdiv = $("<div></div>").html(x).attr('id', 'test');
$('#test1').append(newdiv);
$('[name*= "Table1"]').text($('#test1').html());
$('[name*= "TextBox1"]').val('');
return false;
});
});
</script>
<p>
<asp:TextBox ID="TextBox1" name="TextBox1" runat="server" Rows="3"
Height="47px" Width="638px"></asp:TextBox>
</p>
<p>
<asp:Button ID="Button1" runat="server" Text="Post Message" Width="98px"
onclick="Button1_Click" />
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button" />
</p>
<p>
<asp:Table ID="Table1" name="Table1" runat="server" Width="488px"></asp:Table>
</p>
<div id="test1"></div>
</asp:Content>
我尝试通过删除
return false;
来解决此问题,因为它确实保存在数据库中,因为那里有用户ID,但Wallpostings的字段为空。这是由于当我单击我的asp按钮时页面重新加载,而这又是由于java / jquery引起的。如果我保持return false,我的SQL将一无所获。 {
string theUserId = Session["UserID"].ToString();
OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite; User=root; Password=commando;");
cn.Open();
OdbcCommand cmd = new OdbcCommand("INSERT INTO WallPosting (UserID, Wallpostings) VALUES ("+theUserId+", '" + TextBox1.Text + "')", cn);
cmd.ExecuteNonQuery();
}
}
使用此代码,我可以插入数据库中,但是如果我想在墙上的帖子中添加其他注释,则尝试再次插入时,出现错误:密钥“ PRIMARY”的条目“ 1”重复
所以我想我需要使用更新,但是我不知道如何为mysql或sql语法做更新?它还说,当我创建架构时,在更新时不执行任何操作(不确定这是否是同一件事),请参见下面的脚本)
如果没有任何内容,更新还会执行与插入相同的操作吗?如果我更新了如何按顺序添加数据(不确定那是不是正确的单词),即如果我的Wallpostings中已经有苹果,并且我在文本框中更新了一些新内容(例如橘子),该如何将其布局如下:
(Wallposting Table)
| UserID | Wallpostings |
....1........Oranges
.............Apples
忽略点(仅用于间距)
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
CREATE SCHEMA IF NOT EXISTS `gymwebsite` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `gymwebsite` ;
-- -----------------------------------------------------
-- Table `gymwebsite`.`User`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `gymwebsite`.`User` (
`UserID` INT NOT NULL AUTO_INCREMENT ,
`Email` VARCHAR(245) NULL ,
`FirstName` VARCHAR(45) NULL ,
`SecondName` VARCHAR(45) NULL ,
`DOB` VARCHAR(15) NULL ,
`Location` VARCHAR(45) NULL ,
`Aboutme` VARCHAR(245) NULL ,
`username` VARCHAR(45) NULL ,
`password` VARCHAR(45) NULL ,
PRIMARY KEY (`UserID`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `gymwebsite`.`Pictures`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `gymwebsite`.`Pictures` (
`UserID` INT NOT NULL ,
`picturepath` VARCHAR(245) NULL ,
PRIMARY KEY (`UserID`) ,
INDEX `fk_Pictures_Userinfo1` (`UserID` ASC) ,
CONSTRAINT `fk_Pictures_Userinfo1`
FOREIGN KEY (`UserID` )
REFERENCES `gymwebsite`.`User` (`UserID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `gymwebsite`.`WallPosting`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `gymwebsite`.`WallPosting` (
`UserID` INT NOT NULL AUTO_INCREMENT ,
`Wallpostings` VARCHAR(2500) NULL ,
INDEX `fk_WallPostings_Userinfo1` (`UserID` ASC) ,
PRIMARY KEY (`UserID`) ,
CONSTRAINT `fk_WallPostings_Userinfo1`
FOREIGN KEY (`UserID` )
REFERENCES `gymwebsite`.`User` (`UserID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `gymwebsite`.`DietPlan`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `gymwebsite`.`DietPlan` (
`UserID` INT NOT NULL ,
PRIMARY KEY (`UserID`) ,
INDEX `fk_DietPlan_Userinfo1` (`UserID` ASC) ,
CONSTRAINT `fk_DietPlan_Userinfo1`
FOREIGN KEY (`UserID` )
REFERENCES `gymwebsite`.`User` (`UserID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `gymwebsite`.`WorkoutPlan`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `gymwebsite`.`WorkoutPlan` (
`UserID` INT NOT NULL ,
PRIMARY KEY (`UserID`) ,
INDEX `fk_WorkoutPlan_Userinfo1` (`UserID` ASC) ,
CONSTRAINT `fk_WorkoutPlan_Userinfo1`
FOREIGN KEY (`UserID` )
REFERENCES `gymwebsite`.`User` (`UserID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `gymwebsite`.`Friends`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `gymwebsite`.`Friends` (
`idFriends` INT NOT NULL AUTO_INCREMENT ,
`UserID` INT NOT NULL ,
PRIMARY KEY (`idFriends`, `UserID`) ,
INDEX `fk_Friends_Userinfo1` (`UserID` ASC) ,
CONSTRAINT `fk_Friends_Userinfo1`
FOREIGN KEY (`UserID` )
REFERENCES `gymwebsite`.`User` (`UserID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
我可能想做的是更新但同时插入?如果那有意义的话?
最佳答案
“返回错误;”在您的js中,就像说preventDefault()一样,它阻止了进一步的代码运行(并且使浏览器无法发布表单和跟踪链接等)。在这种情况下,这将阻止ASP.net代码执行回发,从而使服务器端代码无法运行SQL语句。您需要删除该返回假行。
更新:动态内容消失了,因为需要回发来进行SQL更新。这意味着页面将从头开始重绘,并且您使用jQuery所做的所有更改都将消失。要更正此问题,您需要进行AJAX调用以运行服务器端代码,或者在执行SQL调用后删除JS函数并编写一些服务器端代码以显示div。
UserId不应是WallPosting表的主键,而应仅是User表的主键。您应该创建一个名为WallPostingId的新自动递增字段,这将允许您为每个用户使用多个WallPostings(也可以对其他表执行此操作,显然可以更改字段名称以适合每个表),然后可以进行排序它们由CreatedDate(另一个有用的字段)提供。可以将UserId作为其他表中的外键约束,但这只是验证是否存在给定的UserId。
您的ODBC命令容易受到SQL注入攻击!
狡猾的用户可以使用类似的命令来控制您的数据库,从而有可能窃取,破坏和破坏其他用户的数据。
您不应该使用字符串串联(例如“ Insert ...” + UserText +“ ...”)来构建SQL命令。我建议为处理用户创建的数据的每个或您的数据操作创建存储过程或Linq语句。考虑一下,如果我在文本框中输入以下内容,该怎么办:
‘);删除表用户; -
关于c# - 我目前的架构/语法和编码存在大问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5395104/