2012-04-23 2 views
0

저는 PHP가 처음입니다. 아래의 코드는 온라인에서 찾은 수많은 자습서에서 함께 자갈을 긋고 내가 원하는 방식으로 작업하고 있습니다. 내 튜터로부터 중복 이메일 주소가 입력되는 것을 방지하는 코드를 추가하도록 요청하는 이메일을 받았습니다. 추가해야 할 코드가 있지만 어디로 가야하는지 알지 못합니다. 여기 이 코드 섹션을 어디에 삽입합니까?

는 기존의 코드입니다 :

<? 
include('config.php'); 

// table name 
$tbl_name=temp_members; 

// Random confirmation code 
$confirm_code=md5(uniqid(rand())); 

// values sent from form 
$email=$_POST['email']; 
$password=$_POST['password']; 
$firstname=$_POST['firstName']; 
$lastname=$_POST['lastName']; 

// Insert data into database 
$sql="INSERT INTO $tbl_name(confirm_code, email, password, firstname,  lastname)VALUES('$confirm_code', '$email', '$password', '$firstname', '$lastname')"; 
$result=mysql_query($sql); 



// if suceesfully inserted data into database, send confirmation link to email 
if($result){ 

// ---------------- SEND MAIL FORM ---------------- 

// send e-mail to ... 
$to=$email; 

// Your subject 
$subject="Francis Flower confirmation link"; 

// From 
$headers="from: Francis Flower Admin <[email protected]>"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

// Your message 
$message = '<html><head>'; 
$message .= '<style type="text/css"> 
         body { 
          font-family: Helvetica,   Arial; 
         } 
         .center { 
          text-align: left; 
         } 
         </style>'; 
$message .= '<body><div class="center"><img src="http://www.jblanksby.yourwebsolution.net/images/logo.png"/>'; 
$message .= "<p>Dear " .$_POST['firstName']. "&nbsp;" .$_POST['lastName'].", </p>"; 
$message .= '<p>Thank you for signing up for an account at Francis Flower. </p>'; 
$message .= '<p>Your new account details are below: </p>'; 
$message .= "<p>Email Address: ".$_POST['email']. "</p>"; 
$message .= "<p>Password: " .$_POST['password']. "</p>"; 
$message .= "<p>Before you can login, you need to activate your account using the link below:</p>"; 
$message .= "<p>Click on this link to activate your account</p>"; 
$message .= "<p>http://jblanksby.yourwebsolution.net/confirmation.php?passkey=$confirm_code</p>"; 
$message .= '</div></body></html>'; 

// send email 
$sentmail = mail($to,$subject,$message,$headers); 

} 

// if not found 
else { 
echo "Not found your email in our database"; 
} 

// if your email succesfully sent 
if($sentmail){ ?> 
echo "Mail has been sent"; 
} else { 
echo "Mail has not been sent"}; 
?> 

그리고 여기에 내가 위의 코드에 포함하고 싶은 캡처 이메일을 중복 코드입니다 :

$query = "SELECT * FROM $tbl_name WHERE email = '{$email}'"; 

$result = mysql_query($query); 

if (mysql_num_rows ($result) > 1) 
{ 
    /* Username already exists */ 
    echo 'Username already exists'; 
} 
else 
{ 
    /* Username doesn't exist */ 
    /* .. insert query */ 
} 

것은이 가진 모든 비서가 좋은 것은 !

답변

0

INSERT 문을 작성하기 전에 바로 배치해야합니다.

스크립트는 SQL 주입 공격에 취약합니다.

// Get email from the form before checking if it was already inserted 
// you don't need the other form values yet... 
$email = mysql_real_escape_string($_POST['email']); 

$query = "SELECT * FROM $tbl_name WHERE email = '{$email}'"; 
$result_eml = mysql_query($query); 

// Added some error checking here to make sure the query succeeded 
// Also here, check for > 0, not > 1 -- you want to find out if 1 or more rows exist, not that 2 or more exist... 
if ($result_eml && mysql_num_rows ($result_eml) > 0) 
{ 
    /* Username already exists */ 
    echo 'Username already exists'; 
} 
else if (!$result) { 
    // error in query 
} 
else 
{ 

    // table name 
    $tbl_name=temp_members; 

    // Random confirmation code 
    $confirm_code=md5(uniqid(rand())); 

    // Other values sent from form 
    $password = mysql_real_escape_string($_POST['password']); 
    $firstname = mysql_real_escape_string($_POST['firstName']); 
    $lastname = mysql_real_escape_string($_POST['lastName']); 

    // Insert data into database 
    $sql="INSERT INTO $tbl_name(confirm_code, email, password, firstname,  lastname)VALUES('$confirm_code', '$email', '$password', '$firstname', '$lastname')"; 
    $result=mysql_query($sql); 

    // etc.... 

} 

내가이 경우 할당 또는 생산 코드에 대한 특정 아니지만, 나는 사용자의 암호를 전송하는 아주 나쁜 생각입니다 추가 할 것입니다 : 최소한, 당신의 $_POST 입력 값에 mysql_real_escape_string() 전화 이메일을 통해. 이메일은 근본적으로 엽서와 비슷합니다. 암호화를 사용하지 않으면 (요즘에는 지구상의 어느 누구도 거의 사용하지 않습니다.) 송신 지점에서 수신 지점까지 네트워크 경로를 따라 서버 관리자가 읽을 수 있습니다.

+0

그것은 할당을위한 우리의 교사는 이메일을 통해 모든 계정 내용을 보내 우리를 원하고 위에서 말한 정확히 설명했습니다 확인하십시오. 그러나 알림에 감사드립니다! – blanksby

0

할 수있는 몇 가지 작업이 있습니다. 중복 행을 삽입 할 때 mysql 오류를 줄 수있는 unquie 키를 데이터베이스에 넣을 수 있습니다.

현재 데이터로 삽입하기 전에 데이터베이스를 검사하여 삽입하기 전에 반환 된 행이 없는지 확인할 수도 있습니다.

이러한 것들은 당신이 사용할 수있는 몇 가지 아이디어 일뿐입니다.

또한, using PDO

관련 문제