2012-12-10 3 views
0

직원의 테이블에서 전자 메일은 고유 한 필드입니다. 새 직원을 삽입 할 때 전자 메일의 존재 여부를 확인합니다. 이미 존재하는 경우 오류 메시지가 표시됩니다.PHP MYSQL UPDATING 할 때 레코드가 이미 존재하는지 확인하는 방법?

$selectquery ="SELECT * FROM employee WHERE empemail='$empemail'"; 
    $selectresult=mysql_query($selectquery) or die("query fout " . mysql_error()); 
    if(mysql_num_rows($selectresult)==1) 
    { 
     $errormsgnewemployee = '<p id=notification>The email you entered already exists.</p>'; 
    } 

필드를 업데이트 할 때 어떻게해야합니까? 왜냐하면 나는 그의 이메일을 변경하지 않고 직원 데이터를 업데이트하면 전자 메일이 이미 있기 때문에 내게 알려주지 않기 때문입니다. 내가 생각할 수있는 것은 먼저 업데이트하고, 2 레코드가 있는지 확인하고, 2 레코드가 있으면 이전과 같이 다시 업데이트하는 것입니다.

좋은 접근 방법입니까 아니면 더 좋은 해결책입니까?

if (mysql_error()) 
      { 
       $errormsgnewemployee = '<p id=notification>Update failed. Please check if the email you entered already exists.</p>'; 
      } 

때문에 그것이 아니라면, 왜 다른 사용자가 오류를했을 :

편집

내 자신의 솔루션은 테이블이 테이블에 unique index을 갖는 쿼리 오류를 사용하여 업데이트하는 것입니다 유일하고 독특한 분야인가요? 다른 모든 경우에는 업데이트가 성공합니다.

+0

'$ action = UPDATE' 또는 'INSERT' 여부에 관계없이 양식에 매개 변수를 전달하지 않는 이유는 무엇입니까? – Touki

+0

그 문제는 Touki, 그것은 데이터베이스 오류가 아니라 내 자신의 텍스트를 반환하지 않고 업데이트 문제에 대한 점검을 작성하는 방법입니다. 오류 번호를 잡아 내고 문법을 찾으면서 해결책을 찾으려고합니다. –

+0

** 앞으로의 PHP ** 버전은 ** mysql_' 계열의 기능을 더 이상 지원하지 않습니다. 이제 [PDO로 전환] (http://php.net/book.pdo) 또는 [mysqli] (http://php.net/book.mysqli)에 좋은 시간이 될 것입니다. – Charles

답변

3

동일한 해결책을 사용할 수 있습니다. 다른 사용자가 사용하고 있는지 확인하려면 "이 이메일 주소를 가져오고 광산이 아닙니다."가 필요합니다.

예 :

SELECT 1 FROM employee WHERE empemail = '$empemail' AND id != '$myid';

는 이메일이 다른 사람에 속하는 행을 반환해야합니다 : 업데이트하기 전에 이런 일을한다.

참고로, 변수를 보간하는 것과 같은 SQL 쿼리에 잠재적 인 보안 문제가 있습니다. 그러지 마세요. 그리고 mysql_ * 함수는 PDO 나 mysqli 대안으로 대체되어야한다.

+0

고맙습니다. 그것은 작동합니다. –

3

INSERT ... ON DUPLICATE UPDATE ... SQL 구조를 사용하는 것이 좋습니다. manual에 대해 자세히 살펴보십시오.

그래서 쿼리는 다음과 같을 수 쿼리, ON DUPLICATE UPDATE의 두 번째 부분은, 실행됩니다 왜이 쿼리의 INSERT 일부 인해 UNIQUE KEY 제약 조건을 실패합니다

INSERT INTO employee (email, first_name, last_name, ...) 
VALUES ('[email protected]', 'nik', 'smtih', ...) 
ON DUPLICATE UPDATE 
    first_name = 'nik', 
    last_name = 'smith', 
    ... 

에주의 있음을, 즉 및 삽입하는 대신 데이터가 업데이트됩니다.

+0

고마워요, 이건 정말 유용합니다. 하지만 어떻게하면 성공적으로 업데이트되었는지, 이메일을 제외하고 업데이트되었는지 사용자에게 알릴 수 있습니까? 예 : –

관련 문제