2015-07-22 15 views
7

Tôi đang thêm dữ liệu vào cơ sở dữ liệu của mình, nhưng vấn đề là nếu tôi chèn nhiều lần cho cùng một id (số nhiều), giá trị cũ và mới sẽ được giữ lại. Val mới không thay thế val cũ. Tôi đang cố gắng để cập nhật nó (phần bình luận) tuy nhiên không thành công. Luôn luôn kết quả tương tự. Tôi đang cố gắng làm cho nó hoạt động bằng cách sử dụng điều kiện if/else, để kiểm tra xem một giá trị trong một cột có trống không, sau đó chèn. Nếu không cập nhật, bất kỳ trợ giúp nào trong câu lệnh if condition?Cập nhật cơ sở dữ liệu bằng cách sử dụng php

Cách tôi nhận được kết quả cập nhật:

if(isset($_POST['submit'])){ 

    if(AddedWH IS NULL) THEN 

     $addedhours = $_POST['AddedHours']; 
     $selectaf = $_POST['SelectAF']; 
       $sql1="INSERT INTO `editedworkhours` (`AFNumber`,`AddedWH`) VALUES('$selectaf','$addedhours')"; 

      $getResult =mysql_query($sql1); 
      if(mysql_affected_rows() > 0) 
      { 

      } 
      else{ 

      } 

    else 


       $tempname = $row['Field']; 
       $sql2 = "UPDATE editedworkhours SET AddedWH ='".$_GET["addedhours"]."' WHERE AFNumber='".$_GET["selectaf"]."'"; 
       $result2 = mysqli_query($con,$sql2); 
       if ($con->query($sql2) === TRUE) { 
       } else { 
        echo "Error: " . $sql2 . "<br>" . $con->error; 
        echo '<script>swal("Error", "Something went wrong '.$con->error.'", "error");</script>'; 
       } 
    echo '<script>swal("Success", "Changes have been saved", "success");</script>'; 


} END IF; 
echo $menu; 
+3

Bạn đang không phải là rất rõ ràng. Làm thế nào về một phác thảo về những gì bạn đang cố gắng làm. Ví dụ, với một chèn cho mỗi bài có vẻ như bạn đang tích lũy một bản ghi cho mỗi mục nhập giờ được thêm vào? Đây có phải là mục đích không? Ngoài ra, mã bạn đã nhận xét trộn lẫn các tham chiếu đến sql2 và sql3 làm tăng thêm sự nhầm lẫn. –

+0

@MaxHaaksman bạn có phiền khi mở một cuộc trò chuyện trong vài phút không? – dan

+0

@MaxHaaksman không có sự tích cực không được dự định, đó là vấn đề. Mục đích là cho một giá trị chèn mới cho một nhân viên để thay thế giá trị hiện có cũ. Và đó là những gì tôi đang cố gắng làm với phần bình luận, tuy nhiên nó không hoạt động. – dan

Trả lời

5

Một cách thanh lịch để làm điều này được xác định afnumber như khóa chính của bảng:

ALTER TABLE `editedworkhours` 
ADD CONSTRAINT `editedworkhours_pk` PRIMARY KEY (`afnumber`); 

EDIT:
Như Gordon lưu ý trong các nhận xét, nếu bạn đã có khóa chính, bạn có thể thêm một ràng buộc duy nhất:

ALTER TABLE `editedworkhours` 
ADD CONSTRAINT `editedworkhours_uc` UNIQUE (`afnumber`);  

Một khi bạn có các hạn chế tại chỗ, bạn có thể sử dụng on duplicate key update khoản chèn của MySQL:

INSERT INTO `editedworkhours` 
(`afnumber`, `addedwh`) 
VALUES ($selectaf, $addedwh) 
ON DUPLICATE KEY UPDATE `addedwh` = VALUES(`addedwh`) 
+0

Lưu ý: điều này sẽ hoạt động bằng cách tuyên bố 'afnumber' là duy nhất (trong trường hợp bảng đã có khóa chính). –

+0

@GordonLinoff điểm tốt, chỉnh sửa nó trong. Cảm ơn! – Mureinik

+0

Vâng, và nếu nó không phải là một cột duy nhất, điều này sẽ không làm việc cả. Nhưng có vẻ như trong trường hợp này, nó là duy nhất, vì vậy mọi thứ sẽ ổn. Nếu bạn đặt 'addedwh' thành' $ addwh', nghĩa là. OP không muốn tăng. – stef77

1

Nếu bạn đang nói về đoạn này: $sql3 = "UPDATE editedworkhours SET AddedWH+='".$_GET["addedhours"]."' WHERE AFNumber='".$_GET["selectaf"]."'";, câu hỏi của bạn là về cột AddedWH, phải không? Kiểu dữ liệu này là gì, tôi cho rằng một số loại VARCHAR?

Bạn nên thay đổi loại cột thành ví dụ: INTEGER và sử dụng ... SET AddedWH = AddedWH + ".$_GET["addedhours"]." ....

Những gì bạn đang làm bây giờ là thêm chuỗi (biến số $_GET được đính kèm trong dấu: '), do đó câu lệnh SQL được hiểu là chuỗi nối.

Tất nhiên, điều này là mở cho tất cả các loại tiêm SQL, nhưng đó không phải là một phần của câu hỏi của bạn (xem xét sử dụng báo cáo đã chuẩn bị, bạn sẽ tìm thấy rất nhiều thông tin về chủ đề này ở đây và ở nơi khác trên internet , Google), xem ví dụ: How can I prevent SQL injection in PHP?).

2

Vâng, những gì tôi sẽ làm là tạo hai câu lệnh chạy - 1 INSERT và 1 UPDATE. Tuy nhiên, INSERT sẽ kiểm tra rằng cùng một afnumber không phải là EXIST. Dưới đây sẽ là một kịch bản mẫu:

if(isset($_POST['submit'])) { 

    $addedhours = $_POST['AddedHours']; 
    $selectaf = $_POST['SelectAF']; 

$sql1="INSERT INTO `editedworkhours` (`AFNumber`,`AddedWH`) 
select '$selectaf','$addedhours' 
where not exists (select afnumber from editedworkhours where afnumber = '$selectaf')"; 

$getResult =mysql_query($sql1); 

if(mysql_affected_rows($getResult) == 0) { 

$sql2 = "UPDATE editedworkhours SET AddedWH ='".$_POST["addedhours"]."' WHERE AFNumber='".$_POST["selectaf"]."'"; 

$result2 = mysql_query($sql2); 
} 

} 

Trên đây làm 2 điều:

a) Chèn nếu hồ sơ không tồn tại b) cập nhật nếu kết quả chèn trong 0 hồ sơ

Tôi cũng lưu ý rằng trong phần "cập nhật" của bạn, bạn có $_GET superglobals trong khi chèn có $_POST vì vậy tôi đã thay đổi cả hai thành $_POST. Không chắc chắn nếu đó là bất cứ điều gì bugging ...

0

Làm NOT trộn mysql_*mysqli_*! Không sử dụng thêm mysql_* nữa.

Luôn kiểm tra lỗi. Có thể nào là số INSERT có "Khóa trùng lặp" và bạn không nhận thấy?

Xem xét sử dụng

INSERT ... ON DUPLICATE KEY UPDATE ... 
Các vấn đề liên quan