2016-10-26 5 views
0

모든 것이 내 코드에서 작동하지만 동일한 전자 메일을 가진 여러 사용자를 만들지 만 사용자를 만들면 이미 일부 솔루션을 검색하려고했습니다. 그리고 내 코드에 넣어하지만 여전히 그것을 작동하게 할 수 없으며 어떻게 SQLSTATE [23000]를 만들 수 있습니까? 무결성 제약 조건 위반 : "오류 전자 메일이 이미 존재합니다"로 변경됩니까? 그것은 가능한가?SQLSTATE [23000]을 처리하는 방법 : 무결성 제약 조건 위반 : 1062

addform.php

나는 또한 내가 그냥있어 중복

<style type="text/css"> 
#dis{ 
display:none; 
} 
</style> 




<div id="dis"> 
<!-- here message will be displayed --> 
</div> 


<form method='post' id='emp-SaveForm' action="#"> 

<table class='table table-bordered'> 

    <tr> 
     <td>First Name</td> 
     <td><input type='text' name='fname' class='form-control' required /></td> 
    </tr> 

    <tr> 
     <td>Last Name</td> 
     <td><input type='text' name='lname' class='form-control' required></td> 
    </tr> 

    <tr> 
     <td>Contact Number</td> 
     <td><input type='number' name='contactnum' class='form-control' required></td> 
    </tr> 

    <tr> 
     <td>Email</td> 
     <td><input type='email' name='email' class='form-control' required /></td> 
    </tr> 

    <tr> 
     <td>Password</td> 
     <td><input type="password" name='pass' class='form-control' required /></td> 
    </tr> 

    <tr> 
     <td>Language</td> 
     <td><input type='text' name='lang' class='form-control' required /></td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
     <button type="submit" class="btn btn-primary" name="btn-save" id="btn-save"> 
     <span class="glyphicon glyphicon-plus"></span> Save this User 
     </button> 
     </td> 
    </tr> 

</table> 

create.php

<?php 
require_once 'dbconfig.php'; 


if($_POST) 
{ 
    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $contactnum = $_POST['contactnum']; 
    $email = $_POST['email']; 
    $pass = $_POST['pass']; 
    $lang = $_POST['lang']; 
    try{ 

     $stmt = $db_con->prepare("INSERT INTO tbluser(fname,lname,contactnum,email,pass,lang) VALUES(:ufname,:ulname,:ucontact,:uemail,:upass,:ulang)"); 
     $stmt->bindParam(":ufname", $fname); 
     $stmt->bindParam(":ulname", $lname); 
     $stmt->bindParam(":ucontact", $contactnum); 
     $stmt->bindParam(":uemail", $email); 
     $stmt->bindParam(":upass", $pass); 
     $stmt->bindParam(":ulang", $lang); 
     if($stmt->execute()) 
     { 
      echo "Successfully Added"; 
     } 
     else{ 
      echo "Query Problem"; 
     } 
    } 
    catch(PDOException $e){ 
     echo $e->getMessage(); 
    } 
} 

?> 

가있는 경우 오류 메시지를 표시하려면 PHP의 새로운 기능 데이터베이스에서 PDO를 사용하고 있습니다. 어쨌든 도움과 도움을 주셔서 감사합니다. ase 내가 당신의 코드를 붙여 넣거나 복사 할 수 있는지 알려주십시오 :)

+0

PDO는 좋은 것입니다. –

+1

PDO는 확실히 좋은 것입니다. 당신이 누락 된 부분은 아마도 유일한 색인 일 것입니다. – e4c5

+0

위에서 언급했듯이 전자 메일 필드에서도 고유 색인이 누락되었을 가능성이 큽니다. 고유 색인을 사용하면 중복 값을 삽입하려고하면 자동으로 오류가 발생합니다 고유 색인에. 중복을 확인하는 한 가지 방법은 삽입하기 전에 삽입하고자하는 이메일을 검색하기 위해서입니다. – Epodax

답변

0

create.php을 편집하고 데이터베이스에서 전자 메일 체크 코드를 추가해야합니다. 아래 코드를 확인하여 더 많은 아이디어를 얻으십시오.

<?php 
require_once 'dbconfig.php'; 


if ($_POST) { 

    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 
    $contactnum = $_POST['contactnum']; 
    $email = $_POST['email']; 
    $pass = $_POST['pass']; 
    $lang = $_POST['lang']; 

    // it's good habit to validate email address always 
    // i checked here it should not be blank 
    if ($email != '') { 

     // check in database email address is already taken 
     $sel = $db_con->prepare("select email from tbluser where email = :email"); 
     $sel->execute(array(':email' => $email)); 
     $row = $sel->fetch(); 

     // if you found any row with current entered email then send it to else 
     if ($sel->fetchColumn() == 0) { 
      try{ 
       $stmt = $db_con->prepare("INSERT INTO tbluser(fname,lname,contactnum,email,pass,lang) VALUES(:ufname,:ulname,:ucontact,:uemail,:upass,:ulang)"); 
       $stmt->bindParam(":ufname", $fname); 
       $stmt->bindParam(":ulname", $lname); 
       $stmt->bindParam(":ucontact", $contactnum); 
       $stmt->bindParam(":uemail", $email); 
       $stmt->bindParam(":upass", $pass); 
       $stmt->bindParam(":ulang", $lang); 
       if($stmt->execute()) 
       { 
        echo "Successfully Added"; 
       } 
       else{ 
        echo "Query Problem"; 
       } 
      } 
      catch(PDOException $e){ 
       echo $e->getMessage(); 
      } 
     } else { 
      echo $email . ' already taken, try other email address'; 
     } 
    } else { 
     echo 'Email address is blank'; 
    } 
} 

?> 
+0

고마워요. 시도해 보겠습니다. – Joe

+0

SQLSTATE [23000] : 무결성 제약 조건 위반 : 1062 키 'email'에 대한 중복 항목 '[email protected]' – Joe

0

PDO 오류 모드를 설정해야합니다. 예 :

/* @var $dbConn PDO */ 
$dbConn = new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUsername, $dbPassword); 
/* set the PDO error mode to exception */ 
$dbConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
관련 문제