За последние 24 часа нас посетили 21536 программистов и 1690 роботов. Сейчас ищут 1864 программиста ...

Форма смены e-mail на php

Тема в разделе "PHP и базы данных", создана пользователем malike, 15 мар 2008.

  1. malike

    malike Активный пользователь

    С нами с:
    15 мар 2008
    Сообщения:
    3
    Симпатии:
    0
    Собственно вопрос на сайте у меня 3 формы для ввода данных
    Аккаунт
    Пароль
    Мыло


    Код (Text):
    1. <?php
    2. //Конект к базе
    3. $link=mysql_connect($host, $user, $pass) or
    4. die(mysql_errno($link).mysql_error($link));
    5. $db=mysql_select_db($db_name_login,$link) or
    6. die(mysql_errno($link).mysql_error($link));
    7. //сохранение ячек ввода ели ввели что-то не правильно и нажали кнопку регистрация
    8. if ($_SERVER['QUERY_STRING']=='page=change_email' && @$_POST['account'] && strlen($_POST['account'])<=20 && $_POST['password'] && $_POST['email'])
    9. {
    10.   if (!eregi("^[a-zA-Z0-9_]+$", $_POST['account'] )) //анти инекция
    11.     die ("<p class=\"error\">" . $lang["error_error"] . $lang["account_not_alphanumeric"] . "</p>");
    12. //проверка на соотвествие логина и ведёного пароля с тем что в базе
    13.   $result=mysql_query("SELECT count(*) FROM accounts WHERE login='".$_POST['account']."' AND password='".base64_encode(pack('H*', sha1(utf8_encode($_POST['password']))))."'", $link)
    14.     or die ('Error '.mysql_errno().': '.mysql_error());
    15.     if (mysql_result($result,0,0) == 1)
    16.     {
    17. //Если условие прошло то он берёт переменые и прописывает новое мыло в базу.
    18.      mysql_query("UPDATE accounts SET email='".$_POST['email']."' WHERE login='".$_POST['account']."'", $link)
    19.       or die ('Error '.mysql_errno().': '.mysql_error());
    20.     print "<p style=\"font-weight:\">".$L2JBS_lang["accounts_email_ok"]."</p>";
    21.   }
    22.   else
    23.     print "<p class=\"error\">".$L2JBS_lang["accounts_missingloginorpassword"]."</p>";
    24. }
    25. }
    26. ?>
    не мне нужно типа если ты вводишь логин пароль и новый e-mail то он проверяет сначало пароль, а если правильно то проверяет в базе по этому логину который чел вёл есть ли уже записанное мыло если тама null@null то разрешает сменить мыло а если нет то пишет.
    Для аккаунта ".$_POST['account']." адрес электронной почты уже зарегистрирован

    написал следующую вещь:
    Код (Text):
    1.   $res=mysql_query("SELECT count(*) FROM accounts WHERE login='".$_POST['account']."' AND email='null@null'", $link)
    2.     or die ('Error '.mysql_errno().': '.mysql_error());
    3.  print "<p class=\"error\">Для аккаунта ".$_POST['account']." адрес электронной почты уже зарегистрирован</p>";
    4.     if (mysql_result($res,0,0) == 1)
    5.   {
    Тока не пойму куда вснуть условие...
     
  2. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    PHP:
    1.  
    2. <?php
    3. //Конект к базе
    4. $link=mysql_connect($host, $user, $pass) or
    5. die(mysql_errno($link).mysql_error($link)); // Не забудьте это убрать, когда оттестируете скрипт или заменить простым текстом
    6. $db=mysql_select_db($db_name_login,$link) or
    7. die(mysql_errno($link).mysql_error($link)); // То же самое. Убрать или заменить текстом, после тестирования.
    8. //сохранение ячек ввода ели ввели что-то не правильно и нажали кнопку регистрация
    9. if ($_GET['page']=='change_email' && @$_POST['account'] && strlen($_POST['account'])<=20 && $_POST['password'] && $_POST['email'])
    10. {
    11.   if (!eregi("^[a-zA-Z0-9_]+$", $_POST['account'] )) //анти инекция
    12.    die ("<p class=\"error\">" . $lang["error_error"] . $lang["account_not_alphanumeric"] . "</p>");
    13. //проверка на соотвествие логина и ведёного пароля с тем что в базе
    14.   $result=mysql_query("SELECT email FROM accounts WHERE login='".mysql_real_escape_string($_POST['account'])."' AND password='".base64_encode(pack('H*', sha1(utf8_encode(mysql_real_escape_string($_POST['password'])))))."' LIMIT 1", $link)
    15.    or die ('Error '.mysql_errno().': '.mysql_error()); // Аналогично предыдущим. Удалить потом.
    16.    if ($row = mysql_fetch_assoc($result))
    17.    {
    18. //Если условие прошло то он берёт переменые и прописывает новое мыло в базу.
    19.     if ($row['email'] == "null@null") {
    20.     mysql_query("UPDATE accounts SET email='".mysql_real_escape_string($_POST['email'])."' WHERE login='".mysql_real_escape_string($_POST['account'])."'", $link)
    21.      or die ('Error '.mysql_errno().': '.mysql_error()); // Изменить после дебага
    22.    print "<p style=\"font-weight:\">".$L2JBS_lang["accounts_email_ok"]."</p>";
    23.    } else { print "<p class=\"error\">Для аккаунта ".$_POST['account']." адрес электронной почты уже зарегистрирован</p>"; }
    24.   }
    25.   else
    26.    print "<p class=\"error\">".$L2JBS_lang["accounts_missingloginorpassword"]."</p>";
    27. }
    28. }
    29. ?>
    30.  
     
  3. malike

    malike Активный пользователь

    С нами с:
    15 мар 2008
    Сообщения:
    3
    Симпатии:
    0
    При попытке изменить мыло где поле null@null выводит ошибку которая выше....

    Для аккаунта test адрес электронной почты уже зарегистрирован
     
  4. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    А у меня этот код отлично работает. Мыло меняет нормально.
    Только последнюю фигурную скобку нужно убрать, которая перед ?> стоит. Непонятно как она туда затесалась.
     
  5. malike

    malike Активный пользователь

    С нами с:
    15 мар 2008
    Сообщения:
    3
    Симпатии:
    0
    Johnatan Большое спасибо :)