我有几个问题:我真的被困在这里了。
好的,第一个问题是我的 jquery 绑定(bind)到我的按钮。该函数有效,但是当它绑定(bind)到我的 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.如果我一直返回 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 语句。您需要删除该 return false 行。
更新:您的动态内容消失了,因为您需要回发来执行 SQL 更新。这意味着页面会从头开始重新绘制,您使用 jQuery 所做的所有更改都会消失。要纠正此问题,您需要进行 AJAX 调用以运行服务器端代码,或者删除 JS 函数并编写一些服务器端代码以在进行 SQL 调用后显示 div。
- UserId 不应该是 WallPosting 表的主键,它应该只是 User 表的主键。您应该创建一个名为 WallPostingId 的新自动递增字段,这将允许您为每个用户拥有多个 WallPosting(对其他表也这样做,显然更改字段名称以适合每个表),然后您可以排序它们按 CreatedDate(另一个有用的字段)。可以将 UserId 作为其他表中的外键约束,但这只是验证任何给定的 UserId 是否存在。
您的 ODBC 命令容易受到 SQL 注入(inject)攻击! 狡猾的用户可以使用这样的命令来控制您的数据库,从而可能窃取、损坏和破坏其他用户的数据。
您不应使用字符串连接(例如“Insert ...”+ UserText +“...”)来构建 SQL 命令。我建议为每个处理用户创建数据的数据操作创建存储过程或 Linq 语句。想一想,如果我在文本框中输入以下内容会怎样:
');删除表用户; --
关于c# - 我当前的架构/语法和编码存在大问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5395104/