使用php在数据库上重复条目

Posted

技术标签:

【中文标题】使用php在数据库上重复条目【英文标题】:duplicate entry on database using php 【发布时间】:2016-04-05 05:10:35 【问题描述】:

如何使用 php 检查表单上的重复条目?我的前端是 c#windows 应用程序

我正在使用 c# 和 php 文件向数据库添加一个新用户。

我创建了以下内容:

我的 C# 项目(form1):

c# 编码:

  private void btncreate_Click(object sender, EventArgs e)
  
 var request = (HttpWebRequest)WebRequest.Create("http://***.**.***.***/response.php");
            request.Method = WebRequestMethods.Http.Post;
            request.ContentType = "application/x-www-form-urlencoded";
            using (var stream = request.GetRequestStream())
            
                var buffer = Encoding.UTF8.GetBytes("userid= " + txtUserid.Text + " & password=" + txtConformpassword.Text + " & first_name=" + txtFirstname.Text + " & last_name=" + txtLastName.Text + "& role= " + cmbRole.Text + "& active=" + cmbActive.Text + "");
                stream.Write(buffer, 0, buffer.Length);
            
            var response = (HttpWebResponse)request.GetResponse();
            string result = String.Empty;
            using (var reader = new StreamReader(response.GetResponseStream()))
            
                result = reader.ReadToEnd();
            
            txtMessage.Text = result; 

我的 PHP 文件:response.php

<?php    
$uid = $_POST['userid'];   
$pass = $_POST['password'];   
$fname = $_POST['first_name'];   
$lname = $_POST['last_name'];   
$rol = $_POST['role'];
$act = $_POST['active'];

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) 
    die("Connection failed: " . $conn->connect_error);
 

   $sql= "INSERT INTO aster(userid,password,first_name,last_name,role,active)
VALUES('$uid', '$pass', '$fname','$lname','$rol','$act');";

     if ($conn->query($sql)) 
    echo "New record created successfully";
 else 
    echo "Error: " . $sql . "<br>" . $conn->error;

$conn->close();
?>

它成功添加数据,但是当我在文本框中输入相同的用户 ID 并单击创建按钮时,我需要在 txtmessage 中收到一条错误消息,因为 用户 ID 已存在

我通过谷歌搜索,但我没有得到任何关于重复条目的信息,请参考我一些编码

【问题讨论】:

大部分时候userid字段是唯一键,如果重复,那么mysql会返回错误。为避免这种情况,首先尝试使用您尝试插入的用户 ID 获取所有记录。如果你得到 0 结果,那么你就可以了。没有重复。否则,返回用户可读错误并且不执行插入查询... @JTheDev 感谢您的宝贵命令 @Arthi 检查您的邮件。 【参考方案1】:

您可以扩展您的response.php 以在insert 之前执行选择语句。如果您能够选择具有给定 ID 的记录,则生成响应(本质上是错误代码),然后您的 C# 应用程序将解释该响应并显示给用户。

附带说明,由于 ID 字段似乎是数字,您可以简单地从表单中省略它,让数据库自动增加它。这也意味着用户不必猜测哪些 ID 值可用。

【讨论】:

【参考方案2】:

您只是希望下次不要插入您输入的 ID。为此,您只需要做一件事。在创建数据库表时将您的 id 作为主键,这样做后您将无法再次插入该 id 或主键中不允许重复条目。

让我知道它是否有用。

【讨论】:

【参考方案3】:

这可能没有多大帮助,但我认为我的解释会为您指明正确的方向。

我会做的是:

    我会使用 SQL 查询来检查记录是否存在,如果存在则打印“记录存在”,否则“记录不存在”。在我发布的代码下方,在 PHP 上发布报价的“Justin Yen”,确保将其分配给输入用户名的字段。在您的情况下,它是 $uid。 在 PHP 上,将 sql 查询的结果分配给一个变量。 创建字符串变量“记录存在”和“记录不存在”。 将您在步骤 3 中创建的字符串变量与步骤 2 中的结果进行比较。

    我不知道任何 PHP 编码,但你可以尝试找到一种比较字符串的方法。但这里有一个检查 SQL 中存在记录的例子:

    Declare @Username varchar(MAX) = 'Justin Yen'
    
    IF EXISTS(select Username from EmployeTable where Username = @Username)
    
    begin print 'Record Exists' end
    
    else
    
    begin print 'Record does not exist' end
    

    现在您所要做的就是如果变量匹配然后提示“无法创建记录,因为已创建记录”。否则使用您在 php 中的添加记录代码。

【讨论】:

【参考方案4】:

您可以简单地尝试将约束 (UNIQUE/PRIMARY) 添加到“用户 ID”列。

ALTER TABLE aster ADD CONSTRAINT MyUniqueKey UNIQUE KEY(userid)

【讨论】:

以上是关于使用php在数据库上重复条目的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库的重复条目条件

MySQL - 忽略插入错误:重复条目

python 删除“错误:重复的数据库条目'xxx'”https://bbs.archlinux.org/viewtopic.php?id=107621

PHP - 导出CSV函数重复每个条目的标题

PHP数组不会填充mysql数据[重复]

停止 PHP 表单中的重复条目