2012-05-13 5 views
0

私はPHPで電子メールの購読フォームを作成していますが、電子メールがすでにデータベースに存在するかどうかを確認したいと思います。PHP電子メールのサブスクリプションの検証と既存のものの確認

私のコードは自分のデータベースに接続していますが、既存の電子メールのチェックだけでなく、検証も有効ではありません。

私は自分のフォームに何を入力しても、何も入力しなくてもそれを私のデータベースに挿入します。また、私のスクリプトの最後のエコーが常にある

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 

<fieldset> 

<legend>Subscribe to Our Newsletter &nbsp;</legend> 

<?php if ($feedback!='') 
echo('<p>'.$feedback.'</p>'); ?> 

<label>Name: <input name="name" type="text" value="<?php echo $name; ?>" /></label> 

<label>Email: <input name="email" type="text" value="<?php echo $email; ?>" /></label> 

<label><input type="submit" value="Sign Up!" /></label> 

</fieldset> 
</form> 

<?php 



$feedback=''; 
if (!$email) { 

$feedback .= '<strong>Please enter your email address</strong><br />'; 

} 

if (!$name) { 

$feedback .= '<strong>Please enter your name</strong><br />'; 
} 



list($username, $mailDomain) = explode("@", $email); 

if ([email protected]($mailDomain, "MX")) { 


$feedback .= '<strong>Invalid email domain</strong><br />'; 
} 


if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $email)) { 


$feedback .= '<strong>Your email address doesn\'t appear to be valid - please check and try again'; 

} 



function cleaninput($value, $DB) { 
    if (get_magic_quotes_gpc()) { 
     $value = stripslashes($value); 
} 
return mysql_real_escape_string($value, $DB); 

} 


$name=$_POST['name']; 
$email=$_POST['email']; 

include_once "connect.php"; 


$sql = mysql_query("SELECT * FROM subscribers WHERE email='$email'"); 
$numRows = mysql_num_rows($sql); 
    if ($numRows>0) { 


$feedback = '<strong>That email address is already subscribed.</strong>'; 

} 

$insertresult = mysql_query("INSERT INTO subscribers (name, email) VALUES('$name', '$email')") or die (mysql_error()); 


    if ($insertresult) { 
     $completed = true; 
    } 



if($competed=false) { 
?> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?> method="post"> 
     <fieldset> 
    <legend>Subscribe to OUr Newsletter &nbsp;</legend> 
<?php 

if ($feedback!='') 
    echo('<p>'.$feedback.'</p>'); ?> 
<label>Name: <input name="name" type="text" value="<?php echo $name; ?>" /></label> 

<label>Email: <input name="email" type="text" value="<?php echo $email; ?>" /></label> 

<label><input type="submit" value="Sign Up!" /></label> 

     </fieldset> 
</form> 

<?php 

} 
else { 



echo('Thanks - you have subscribed to our newsletter successfully. You can unsubscribe at any time by clicking the link at the bottom of each email we send.'); 

} 



?> 

は、ここに私のコードのすべてをあります。それは私のフォームの下に常に表示されます。それがなぜであるかわからない。たぶん、私のコードの間違った場所にあるかもしれません。

else { 



echo('Thanks - you have subscribed to our newsletter successfully. You can unsubscribe at any time by clicking the link at the bottom of each email we send.'); 

} 

ありがとう! 「あなたはif文の一つに$competedではなく$completedを書き、あなたはドン:

+0

古代の 'mysql_ *'関数で新しいコードを書いてください。彼らはもはや維持されておらず、コミュニティは[非推奨プロセス](http://news.php.net/php.internals/53799)を始めました。代わりに、準備されたステートメントについて学び、[PDO](http://php.net/pdo)または[MySQLi](http://php.net/mysqli)を使用する必要があります。あなたが学びたい人は[ここではPDO関連の非常に良いチュートリアルです](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 –

+0

ありがとう!これについて知りませんでした。 – myladeybugg

答えて

0

このコードは混乱のビットは、正直に言う:)それが読み少し難しいですが、私は、少なくとも二つの問題を見ることができますです実際にはifブロックにINSERTというクエリがあります。常に実行されます。アドレスは次のように、データベース内にすでに存在するかどうかをチェックifブロックの後elseブロックでそれを入れてみてください:

$sql = mysql_query("SELECT * FROM subscribers WHERE email='$email'"); 
$numRows = mysql_num_rows($sql); 

if ($numRows>0) { 
    $feedback = '<strong>That email address is already subscribed.</strong>'; 
} 
else { 
    $insertresult = mysql_query("INSERT INTO subscribers (name, email) VALUES('$name', '$email')") or die (mysql_error()); 
} 

あなたはまたaddslashesmysql_real_escape_stringの両方を使用する必要はありません。後者だけが行うでしょう。なぜ私はあなたのコードに同じフォームが2回あるのか分かりません。確かに一度する必要がありますか? :)

+0

ご協力ありがとうございます。私は実際に昨日買った本からこのコードをコピーしました。私はそれを返すように見えます! – myladeybugg

+0

このコードがPHP/MySQLの教科書であると言われている本から来たのであれば、それは良い考えのように聞こえます。:)このコードには多くの誤りがあるので、これは学習するためのコード例です。 – Daan

関連する問題