2015-12-31 12 views
9

làm thế nào để kiểm tra các entry trùng lặp trên một hình thức sử dụng php? Cuối phía trước của tôi là C# cửa sổ ứng dụngnhập trùng lặp trên cơ sở dữ liệu sử dụng php

tôi thêm người dùng mới đến cơ sở dữ liệu sử dụng C# và file php.

Tôi đã tạo ra những điều sau đây:

dự án của tôi trong C# (Form1):

C# mã hóa:

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; 
} 

tôi file 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(); 
?> 

nó thêm dữ liệu thành công nhưng khi tôi nhập cùng một userid trong hộp văn bản và bấm nút tạo tôi cần nhận thông báo lỗi trong txtmessage là userid đã tồn tại.

tôi tìm kiếm thông qua googling nhưng tôi đã không nhận được bất cứ điều gì về mục trùng lặp vui lòng tham khảo cho tôi một số mã hóa

+2

Phần lớn trường userid thời gian là khóa duy nhất và nếu được lặp lại, thì mysql sẽ trả về lỗi. Để tránh điều này, trước tiên hãy thử lấy tất cả các bản ghi với userid mà bạn đang cố chèn. nếu bạn nhận được 0 là kết quả, sau đó bạn là một đi. Không có bản sao. Nếu không, hãy trả về lỗi người dùng có thể đọc được và không thực hiện truy vấn chèn ... – JTheDev

+1

@ JTheDev cảm ơn bạn vì lệnh có giá trị – Arthi

+0

Bạn được chào đón ... – JTheDev

Trả lời

3

Bạn có thể mở rộng response.php của bạn để làm một tuyên bố chọn trước insert. Nếu bạn có thể chọn một bản ghi với ID đã cho, sau đó đưa ra một phản hồi (về cơ bản là một mã lỗi) mà ứng dụng C# của bạn sẽ giải thích và hiển thị cho người dùng.

Là một lưu ý phụ, vì trường ID có vẻ là số, bạn có thể chỉ cần bỏ qua nó từ biểu mẫu của bạn và để cho DB tự động tăng lên. Điều này cũng có nghĩa là người dùng sẽ không phải đoán giá trị ID nào khả dụng.

3

bạn chỉ muốn ID mà bạn đã nhập không được chèn vào lần tiếp theo. cho rằng bạn chỉ cần làm một điều. làm cho id của bạn như là một khóa chính trong việc tạo bảng cơ sở dữ liệu của bạn, sau khi làm điều này, bạn sẽ không thể chèn id đó một lần nữa hoặc các mục trùng lặp không được phép trong khóa chính.

cho bạn biết nếu nó hữu ích.

2

Nó có thể không giúp ích nhiều, nhưng tôi nghĩ lời giải thích của tôi sẽ chỉ cho bạn đúng hướng.

gì tôi sẽ làm là:

  1. Tôi sẽ sử dụng truy vấn SQL để kiểm tra xem kỷ lục tồn tại và nếu tồn tại sau đó in "Record tồn tại" Else "Ghi lại không tồn tại". Bên dưới mã tôi đăng, 'Justin Yen' trên PHP đăng một trích dẫn, hãy chắc chắn rằng bạn gán nó cho trường nhập tên người dùng. Trong trường hợp của bạn là $ uid.
  2. Trên PHP, gán kết quả của truy vấn sql vào biến.
  3. Tạo biến chuỗi "Ghi tồn tại" và "Bản ghi không tồn tại".
  4. so sánh biến chuỗi bạn tạo ở bước 3 với kết quả ở bước 2.
  5. Tôi không biết mã PHP nào, nhưng bạn có thể tìm cách so sánh chuỗi.Nhưng đây là một ví dụ về kiểm tra kỷ lục tồn tại trong 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 
    
  6. Bây giờ tất cả các bạn phải làm là nếu trận đấu biến sau đó nhanh chóng "Không thể tạo kỷ lục vì Ghi tạo ra." Khác sử dụng thêm các mã số bản ghi bạn có trong php.

2

Bạn chỉ có thể cố gắng thêm các contraints (UNIQUE/TIỂU) đến cột 'userid'.

ALTER TABLE aster ADD CONSTRAINT MyUniqueKey UNIQUE KEY(userid) 
Các vấn đề liên quan