2012-03-19 2 views
-2

현재 데이터베이스에 데이터를 제출하는 html 양식이 있습니다. 사용자가 이름과 URL을 제출하면 내 테이블에 저장됩니다. 내가 성취하고자하는 것은 사용자가 URL 필드에 URL과 함께 텍스트 필드에 이름을 입력 할 때 데이터베이스를 검색하여 해당 이름의 항목이 이미 있는지 확인하려는 경우입니다. 그렇다면 데이터베이스에 항목을 추가하지 않기를 원합니다.PHP 중복 이름 확인 입력

이것은 현재 데이터베이스에 입력 된 현재 데이터를 제출하도록 설정 한 것입니다.

$title=$_POST['title']; 
$url=$_POST['url']; 
$query = "INSERT INTO images VALUES ('$title','$url')"; 
mysql_query($query) or die('Error, insert query failed'); 

나는 여전히 PHP에 상당히 새로운 그래서 이것을 달성 할 수있는 방법에 어떤 도움을 크게 감상 할 수있다! 감사! : 당신이 unique으로 데이터베이스에 제목을 설정하면

+6

중복을 확인하는 것에 대한 걱정을 시작하기 전에 코드의 [SQL injection] (http://bobby-tables.com/) 구멍에 대해 걱정하십시오. –

+0

MYSQL SELECT에 대해 알고 있습니까? http://dev.mysql.com/doc/refman/5.0/en/select.html – Endijs

답변

4

, 당신은 사용할 수 있습니다

INSERT INTO images SET 
    title = '$title', 
    url = '$url' 
ON DUPLICATE KEY UPDATE 
    url = '$url' 

이 새로운 행을 삽입하고 해당 제목이 이미 데이터베이스에 존재하는 경우 해당 URL을 업데이트합니다.

0

빠른/쉬운 해결책은 먼저 선택을 수행 한 다음 반환 된 레코드가없는 경우 삽입을 수행하는 것입니다.

는 ** 참고 당신이 다른 경로를 이동하고 검사를 할 것입니다 저장 프로 시저를 만들 수있는 페이지를 기대 당신은 부하에 따라 SQL 주입

을 줄이기 위해 DB에 모든 입력을 탈출해야합니다 이미 항목이 있으면 필요한 경우 삽입합니다. 스토어드 프로 시저를 사용하면 데이터베이스에 한 번만 호출 할 수 있습니다.

1

가장 쉬운, 가장 빠른 방법은이 (또는 같은 일을 뭔가 다른)에 SQL을 변경하는 것입니다 :

INSERT INTO images 
    SELECT '$title', 
      '$url' 
     FROM DUAL 
     WHERE NOT EXISTS 
      (
       SELECT * 
       FROM images 
       WHERE title = '$title' 
       AND url = '$url' 
      ) 

그런 다음 사용할 수 있습니다 mysql_num_rows, mysql_insert_id 또는 그것의 여부를 결정하기 위해 비슷한 행을 삽입했습니다.