c# - 我当前的架构/语法和编码存在大问题

标签 c# jquery asp.net mysql sql

我有几个问题:我真的被困在这里了。

好的,第一个问题是我的 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  

忽略点(只是为了间距)

enter image description here

    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;

我可能想做的是更新但同时插入?如果那有意义的话?

最佳答案

  1. “返回错误;”在你的 js 中就像说 preventDefault(),它会阻止进一步的代码运行(并且它会阻止浏览器发布表单和跟踪链接等)。在这种情况下,它会阻止 ASP.net 代码执行回发,这会阻止您的服务器端代码运行您的 SQL 语句。您需要删除该 return false 行。

更新:您的动态内容消失了,因为您需要回发来执行 SQL 更新。这意味着页面会从头开始重新绘制,您使用 jQuery 所做的所有更改都会消失。要纠正此问题,您需要进行 AJAX 调用以运行服务器端代码,或者删除 JS 函数并编写一些服务器端代码以在进行 SQL 调用后显示 div。

  1. UserId 不应该是 WallPosting 表的主键,它应该只是 User 表的主键。您应该创建一个名为 WallPostingId 的新自动递增字段,这将允许您为每个用户拥有多个 WallPosting(对其他表也这样做,显然更改字段名称以适合每个表),然后您可以排序它们按 CreatedDate(另一个有用的字段)。可以将 UserId 作为其他表中的外键约束,但这只是验证任何给定的 UserId 是否存在。

您的 ODBC 命令容易受到 SQL 注入(inject)攻击! 狡猾的用户可以使用这样的命令来控制您的数据库,从而可能窃取、损坏和破坏其他用户的数据。

您不应使用字符串连接(例如“Insert ...”+ UserText +“...”)来构建 SQL 命令。我建议为每个处理用户创建数据的数据操作创建存储过程或 Linq 语句。想一想,如果我在文本框中输入以下内容会怎样:

');删除表用户; --

关于c# - 我当前的架构/语法和编码存在大问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5395104/

相关文章:

javascript - 如何使用 jQuery 插件中的每个函数

c# - 使用 textbox.text 值更新 Entity Framework

c# - AggregateException - AggregateException.Flatten().InnerException 代表什么?

c# - 从流创建 Zip 文件并下载

asp.net - 我可以从 div onclick 事件调用代码隐藏函数吗?

javascript - 如何将 html 标题属性添加到 jquery ui 日期选择器小部件?

asp.net - 使用数据网格分隔列值的最佳方法是什么

c# - 应用程序的类结构和数据库结构

jquery - jquery mobile 和 ui 不兼容

jQuery - 将 onclick 添加到 TR