Нужна помощь с проверкой уникальности имэйла

  • Автор темы Nik Saprano
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Nik Saprano

Гость
#1
Вообщем народ, есть следующий код:

<?
if(isset($_GET['aff_id'])){
setcookie("aff_id", (int)$_GET['aff_id'], time()+60*60*24*25 ,"/");
$aff_id=$_GET['aff_id'];
}

if(isset($_COOKIE["aff_id"])){
$aff_id=$_COOKIE['aff_id'];
}
session_start();

include "affconfig.php";
include "lang/$language";
include "countries.php";

$errorMsg = '';

if($_POST['commited'] == 'yes')
{
// form was sent
mysql_connect($server, $db_user, $db_pass)
or die ("Database CONNECT Error (line 8)");

if($_POST['ausername'] == '')
$errorMsg .= AFF_SI_UNAMEMISSING.'<br>';

// check if user doesnt exist already
$userid = preg_replace('/[^a-zA-Z0-9_]/', '', $_POST['ausername']); // protect against sql injection

$chk_user = mysql_db_query($database, "select refid from affiliates where refid='$userid'");
if(mysql_num_rows($chk_user) > 0)
{
$errorMsg .= AFF_SI_USEREXISTS.'<br>';
$_POST['ausername'] = '';
}

if($_POST['afirstname'] == '')
$errorMsg .= AFF_SI_FNAME.'<br>';

if($_POST['awebsite'] == '')
$errorMsg .= AFF_SI_WEBSITE.'<br>';


if($_POST['aemail'] == '')
$errorMsg .= AFF_SI_EMAILMISSING.'<br>';

if($_POST['apassword'] == '')
$errorMsg .= AFF_SI_PWDMISSING.'<br>';

if($_POST['apassword2'] == '')
$errorMsg .= AFF_SI_PWDMISSING2.'<br>';

if($_POST['apassword'] == $_POST['apassword2']){}
else
{ $errorMsg .= AFF_SI_PWDMISSING3.'<br>';}




if($errorMsg == '')
{
// save and send notification email
$aemailbody = "Dear ".$_POST['afirstname'].",\n\nThank you for signing up to our affiliate program.\nYour account details are below:\n\n"
."Username: ".$_POST['ausername']."\nPassword: ".$_POST['apassword']."\n\n"
."You can log into your account and view your 'real-time' statistics by going to:\n"
."http://".$domain."\n\n"
."Thank you once again, and we wish you luck with your profit making!\n\n\n"
."Affiliate Manager\n"
.$_POST['emailinfo']."\n\n\n\n";

// mysql_db_query($database, "INSERT INTO affiliates VALUES ('','".$_POST['ausername']."', '".$_POST['apassword']."', '".$_POST['aff_id']."', '".$_POST['acompany']."', '".$_POST['atitle']."', '".$_POST['afirstname']."', '".$_POST['alastname']."', '".$_POST['awebsite']."', '".$_POST['aemail']."', '".$_POST['apayable']."', '".$_POST['astreet']."', '".$_POST['atown']."', '".$_POST['acounty']."', '".$_POST['apostcode']."', '".$_POST['acountry']."', '".$_POST['aphone']."', '".$_POST['afax']."', '".$_POST['adate']."',NOW())")
mysql_db_query($database, "INSERT INTO affiliates VALUES ('','".$_POST['ausername']."', '".$_POST['apassword']."', '".$_POST['aff_id']."', '".$_POST['acompany']."', '".$_POST['atitle']."', '".$_POST['afirstname']."', '".$_POST['alastname']."', '".$_POST['awebsite']."', '".$_POST['aemail']."', '".$_POST['apayable']."', '".$_POST['astreet']."', '".$_POST['atown']."', '".$_POST['acounty']."', '".$_POST['apostcode']."', '".$_POST['acountry']."', '".$_POST['aphone']."', '".$_POST['afax']."',NOW())")
or die(mysql_error());

// $query = "select * from affiliates where refid='".$_POST['ausername']."'";
// $result = mysql_db_query($database, $query);
// $id = mysql_fetch_array($result);

// mysql_db_query($database, "INSERT INTO partners (id,site,number,name,password) VALUES ('','".$_POST['awebsite']."', $id[id], '".$_POST['ausername']."', '".$_POST['apassword']."')")
// or die(mysql_error());

include "thankyou.php";

mail($_POST['aemail'], "Welcome New Affiliate!", $aemailbody, "From:".$emailinfo."\nReply-To:".$emailinfo."\n");
exit;
}
}


?>


Нужно чтобы при регистрации проверялся имэйл на уникальность. Т.е. если такой в базе есть, то выдавать ошибку, если нет - все ок.
Как это сделать?
 
A

Andrew Stephanoff

Гость
#2
я бы сделал поле email в таблице уникальным
 
J

j_man

Гость
#3
Выполняешь запрос "SELECT * FROM affiliates WHERE email = " . mysql_escape_string($_POST['aemail']) . ""

Проверяешь что он тебе вернул (например функцией mysql_num_rows()). Если ничего не вернул, то продолжаешь запихивать данные в базу, иначе выводи свою ошибку...
 
N

Nik Saprano

Гость
#4
Как пользоваться вот этой функцией
mysql_num_rows()

?
 
J

j_man

Гость
#5
Вообще есть такая штука как мануал (спецификация, справочник)... никогда не слышал ? могу дать ссылку или выслать на e-mail, если сам не найдешь.

Теперь ответ:

int mysql_num_rows ( resource result )

mysql_num_rows() возвращает количество рядов результата запроса. Эта команда работает только с запросами SELECT.

Например:

$query = "SELECT * FROM affiliates WHERE email = " . mysql_escape_string($_POST['aemail']) . "";
$result = mysql_query($query) or die(mysql_error());

if (!mysql_num_rows($result)) //если количество записей в результате равно нулю
{
выводишь там свою ошибку
}
 
S

_serg_

Гость
#6
чел правильно сказал - добавь UNIQUE в определение поля
 
N

Nik Saprano

Гость
#7
Ок, сейчас попробую.
ВОт еще вопрос:
Не подскажите как сделать форму запроса пароля, если юзер забыл (восстановление пароля, чтобы чувак ввел свой и-мэл и ему на него пароль прислали)
 

acorn

PHP Developer
29.08.2004
585
3
#8
Для: Nik Saprano
проще тебе скрипт написать, нежеле все рассказывать. Берешь и делаешь: в форме e-mail вводиться (например), а на этот е-mail, если он зареган, приходит пароль.
 
S

_serg_

Гость
#9
лучше не хранить у себя пароли - мало ли что
а по почте отправлять линк на форму для задания нового пароля именно для этого юзера - уникальность передавать через параметр. уникальный ключ должен быть валиден до первого же изменения записи данного пользователя
 
N

Nik Saprano

Гость
#10
А не могли бы Вы примерный код написать?
 
J

j_man

Гость
#11
Для: Nik Saprano
Вообще-то мне всегда казалось, что люди сюда делиться опытом заходят, помогать друг другу понять те или иные вещи, решить проблему, а не писать кому-либо скрипт под заказ бесплатно.

Хочешь написать сам, тебе все подробно обьяснят, помогут понять (если уже не обьяснили). а не хочешь сам, тогда любая работа оплачиваться должна.
 
N

Nik Saprano

Гость
#12
Не , нет , Вы меня не поняли.
Я не просил писать скрипт.
Мне хоть примерно занть с чего начать.
 
Статус
Закрыто для дальнейших ответов.