За последние 24 часа нас посетили 34690 программистов и 1695 роботов. Сейчас ищут 892 программиста ...

Модуль регистрации пользователей

Тема в разделе "PHP для новичков", создана пользователем Almere, 8 фев 2011.

  1. Almere

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

    С нами с:
    8 фев 2011
    Сообщения:
    53
    Симпатии:
    0
    Здраствуйте, Уважаемые скриптеры!
    Я - новичёк в php,MYsql ...
    Задалась задачей поставить себе на сайтик форму регистрации пользователей.

    Скачала готовый модуль, переделала под себя и всё бы прекрасно, но...

    После активации E-Mail , юзеров выкидывает на страницу регистрации, а мне бы хотелось, чтобы выкидывало на отдельную страницу.Попыталась переделать, но получала только ошибку сессии.

    Вот код, который стоит в данный момент:

    PHP:
    1. <?php
    2. session_start();@include("config.inc.php");@include("functions.inc.php");$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)or die("Can not connect" );mysql_select_db($DB, $link) or die ('Can not connect to BD');if(!$_POST['do'] OR $_POST['do'] =='') {if($_SESSION['uid'] =='') { $_SESSION['uid'] = mt_rand(100000,999999); }//??????? ?????echo '<html><head><title>Registratie</title></head><body>';echo '<h2>Registratie formulier</h2>';echo'<form action="" method="POST"><table cellpadding=4 cellspacing=0 border=1 style="border-collapse:collapse">';echo '<tr><td>Naam:</td><td><input name="nick" type="text" value=""></td></tr>';echo '<tr><td>Wachtword:</td><td><input name="pass" type="password" value=""></td></tr>';echo '<tr><td>Wachtword nog een keer:</td><td><input name="rpass" type="password" value=""></td></tr>';echo '<tr><td>E-mail</td><td><input name="mail" type="text" value=""></td></tr>';echo '<tr align="center"><td colspan=2><img src="img/capcha.php?sid='.$_SESSION['uid'].'"/><br/><input name="sid" type="text" value=""></td></tr>';echo '<tr><td colspan=2 align="right"><input name="do" type="submit" value="Registratie"></td></tr>';echo '</table></form><a href="./">Terug</a></body></html>';}if($_POST['do'] !='') {if($_POST['sid'] == $_SESSION['uid']) {$nick = $_POST['nick'];mysql_query("SELECT * FROM users WHERE nick='".strtolower($nick)."'");if(mysql_affected_rows()==0) {if($_POST['pass'] !='' AND $_POST['rpass'] !='' AND $_POST['pass'] === $_POST['rpass']){if(checkmail($_POST['mail']) !== -1) {$uniq_id = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].mktime());$pass = $_POST['pass'];$email = $_POST['mail'];$r = @mysql_query("INSERT INTO users VALUES(NULL,'".strtolower($nick)."','".md5($pass)."','".$email."','".$uniq_id."',0,'".date("dmY")."','".date("dmY")."')");if($r) {$headers  = 'MIME-Version: 1.0' . "\r\n";$headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";$headers .= 'From: Registratie confirm' . "\r\n";$mailto = $email;$subject = "Registratie conform";$message = 'Om account te aktiveren klick hier <a href="http://almere1223.s3.webhost1.ru/registratie/registration.php?activation='.$uniq_id.'" target="_blank">http://almere1223.s3.webhost1.ru/registratie/registration.php? activation='.$uniq_id.'</a>';if(sendmail($mailto,$subject,$message,$headers) !== FALSE) {echo 'Registratie is klaar...U heeft nieuwe E-mail.Chek Uw E-mail.';}else {echo 'Registratie is onmogelijk...Probier later';}                       }                       else {echo 'Registratie is onmogelijk...Probier later';}                 }                 else {echo 'Registratie is onmogelijk: E-mail moet op deze lijken <b>name@domen.com</b><br/><ahref="registration.php"/>Terug</a>';}             }             else {echo 'Registratie is onmogelijk: Wachworden moet hetzelfde zijn<br/><a href="registration.php"/>Terug</a>';}           }           else { echo 'Registratie is onmogelijk: Deze naam bestaat al<br/><a href="registration.php"/>Terug</a>';}         session_destroy();        }        else { echo 'Registratie is onmogelijk: Cijfers van t platje waren niet goed ingevuld<br/><a href="registration.php"/>Terug</a>';}     }          if($_GET['activation'] AND $_GET['activation']!='') {     $uniq_id = $_GET['activation'];          $r=@mysql_query("UPDATE users SET status=1 WHERE uniq_id='".$uniq_id."' AND status=0");     if($r) {echo '<h2>Uw account is geactiveerd</h2><br/> Nu kunt U <a href="index.php">inlogen</a> met Uw iegen inlognaam en wachtword';}     else {echo 'Activatie is onmogelijke: account is al geactiveerd';}     }?>
    3.  
    работу скрипта можно просмотреть тут :http://almere1223.s3.webhost1.ru/registratie/

    Полный архив тут: http://almere1223.s3.webhost1.ru/registration.rar
    Спасибо ;)

    P.S. язык Голландский :)
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Да нет, - индусский.
     
  3. Almere

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

    С нами с:
    8 фев 2011
    Сообщения:
    53
    Симпатии:
    0
    А помочь кто-то сможет?
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    интересно, как это чудо ещё работает...
    не так давно сталкивался с подобным говнокодом.
    работать заставил, но, блин, так и не понял что к чему
     
  5. Almere

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

    С нами с:
    8 фев 2011
    Сообщения:
    53
    Симпатии:
    0
    работает он прекрасно....Вот только некоторые моменты хотела-бы подправить,вот и прошу Вашей помощи.
     
  6. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Динозаврам место в музее.
     
  7. Almere

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

    С нами с:
    8 фев 2011
    Сообщения:
    53
    Симпатии:
    0
    Apple
    Простите, не поняла?!
     
  8. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Almere
    постучись в аську - помогу подправить :)
     
  9. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    По коду видно:
    1)В самом E-Mail для активации приводится ссылка на скрипт регистрации registration.php
    2) При успешной активации выводится ссылка на index.php
    Следовательно код, ответственный за активацию нужно перенести в начало скрипта и остановить его выполнение при получении переменной $_GET['activation']:

    PHP:
    1.  
    2. <?php
    3. @include("config.inc.php");
    4. @include("functions.inc.php");
    5. $link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)or die("Can not connect" );
    6. mysql_select_db($DB, $link) or die ('Can not connect to BD');
    7. if($_GET['activation'] AND $_GET['activation']!='')
    8. {    
    9.     $uniq_id = $_GET['activation'];          
    10.     $r=@mysql_query("UPDATE users SET status=1 WHERE uniq_id='".$uniq_id."' AND status=0");    
    11.     if($r)
    12.     {
    13.         echo '<h2>Uw account is geactiveerd</h2><br/> Nu kunt U <a href="index.php">inlogen</a> met Uw iegen inlognaam en wachtword';
    14.     }    
    15.     else
    16.     {
    17.         echo 'Activatie is onmogelijke: account is al geactiveerd';
    18.     }    
    19.     die();// остановить дальнейшее выполнение скрипта
    20. }
    21. if(!$_POST['do'] OR $_POST['do'] =='')
    22. {
    23.     if($_SESSION['uid'] =='')
    24.     {
    25.         $_SESSION['uid'] = mt_rand(100000,999999);
    26.     }
    27.     // далее весь остальной код
    28. }
    29.  
    3) если можно не информировать пользователя об успешной активации, то нужно убрать вывод сообщения об активации и только перейти на нужную страницу index.php

    PHP:
    1.  
    2. <?php
    3. @include("config.inc.php");
    4. @include("functions.inc.php");
    5. $link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)or die("Can not connect" );
    6. mysql_select_db($DB, $link) or die ('Can not connect to BD');
    7. if($_GET['activation'] AND $_GET['activation']!='')
    8. {    
    9.     $uniq_id = $_GET['activation'];          
    10.     $r=@mysql_query("UPDATE users SET status=1 WHERE uniq_id='".$uniq_id."' AND status=0");    
    11.     if($r)
    12.     {
    13.           header('Location: index.php?activation=1');      
    14.     }    
    15.     else
    16.     {
    17.         echo 'Activatie is onmogelijke: account is al geactiveerd';
    18.     }    
    19.     die();// остановить дальнейшее выполнение скрипта
    20. }
    21.  
    4) чтобы выкидывало на отдельную страницу нужно просто изменить ссылку активации на адрес этой страницы- вместо
    registration.php вставить название скрипта активации - ну, например, если название скрипта activation.php:
    PHP:
    1.  
    2. $message = 'Om account te aktiveren klick hier <a href="http://almere1223.s3.webhost1.ru/registratie/activation.php?activation='.$uniq_id.'" target="_blank">http://almere1223.s3.webhost1.ru/registratie/activation.php? activation='.$uniq_id.'</a>';
    3.                        
    4.  
     
  10. Almere

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

    С нами с:
    8 фев 2011
    Сообщения:
    53
    Симпатии:
    0
    Спасибо огромное :)