2012-04-23 8 views
0

私はPHPがとても新しいです。以下のコードは、私がオンラインで見つけた数多くのチュートリアルから一緒に手直しされています。私はチューターから、重複した電子メールアドレスが入力されないようにするコードを追加することを要求する電子メールを受け取りました。私は追加する必要があるコードがありますが、どこに行くべきかの手がかりはありません。ここでこのコードセクションはどこに挿入しますか?

は、既存のコードです:これでどれアシスタントは素晴らしいことだ

$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 */ 
} 

<? 
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"}; 
?> 

そして、ここでは、キャプチャは、私は上記のコードに含またいメールを複製するコードがあります!

答えて

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