Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Восстановление пароля пользователя
 
 автор: Super[MAN]   (15.06.2008 в 20:00)   письмо автору
 
 

Делаю БД с использованием PHP. На случай,если пользователь забыл свой пароль,хочу чтобы он мог его восстановить по email адресу. Но чтобы считывался сам адрес после нажатия кнопки. А у меня получается,что как только загружается страница,считывается пустое поле и выдается строка,типа такого нет адреса. Помогите исправить код,только не очень мудрено,я новичек в этом деле,разбираюсь только 3 день,а к субботе надо сдать готовую БД. Если увидите еще какие ошибки в моем коде,то поправьте,например,чтобы если нет такого адреса он не выводил окошко,что мол ошиблись,а страница с полем для ввода оставалась. Заранее спасибо :)

<?php
include("main.php");
include("inc/header.php");

if( ($_POST['submit'] <> "") && (isset($_POST['submit'])) )
{
$db = @mysql_connect($db_location,$db_user,$db_passwd);
mysql_select_db($db_name, $db);
if (!$db)
{
echo( "<P>В настоящий момент сервер базы данных не доступен,
поэтому корректное отображение страницы невозможно.</P>");
exit();
}

$sql="select * from users where email='".$_POST['email']."'";
$result=mysql_query($sql);
$num_row=mysql_num_rows($result);

if($num_row!=0) {
$result = mysql_query("select passwd1 from users where email='".$_POST['email']."'");
$password = mysql_result($result, 0);

$result = mysql_query("select login from users where email='".$_POST['email']."'");
$username = mysql_result($result, 0);

$msg = "
Ваш Логин: $username
Ваш Пароль: $password
";

echo "<br> $msg";

} else {
echo "<BR><center><B>В Базе Данных нет такого Email адреса.</B></center>";
}

} else {

echo "<br><b>Для Восстановления Пароля</b>, укажите пожалуйста ваш email адрес.\n";
echo "<br>Логин и Пароль вашего аккаунта будут вам отправлены.<br><br>\n";
?>
<form action="<?php echo $PHP_SELF;?>" method="post"><b>Email: </b><input type="text" name="email" value="">
<input type=submit name=submit value=Submit></form><br>
<?php
}

include("inc/footer.php");
?>

   
 
 автор: BinLaden   (15.06.2008 в 20:10)   письмо автору
 
   для: Super[MAN]   (15.06.2008 в 20:00)
 

Что касается замечаний...

1. > if( ($_POST['submit'] <> "") && (isset($_POST['submit'])) )

Надо поменять местами условия.

2. > $sql="select * from users where email='".$_POST['email']."'";
Перед формированием запроса, нужно подготовить строку к подобной процедуре, то есть эскейпировать все специальные символы. Для этого есть mysql_escape_string():

$sql="select * from users where email='". mysql_escape_string($_POST['email'])."'";

Правда надо будет позаботиться о том, чтобы каждое строковое значение $_POST было обработано stripslashes(), если включен режим magic_quotes_gpc. Этот ... режим проверяется с помощью get_magic_quotes_gpc():

<?php
if( get_magic_quotes_gpc() )
{
   
# ...
}
?>


Можно написать рекурсивную функцию для того, чтобы пройтись по всем элементам массива.

В остальных запросах с $_POST['email'] поступать так же.

3.

> $msg = "
> Ваш Логин: $username
> Ваш Пароль: $password
> ";

> echo "<br> $msg";

У Вас в имя пользователя и пароль могут содержать <, >, &? Если да, то нужно применять htmlspecialchars() перед выводом.

4. > $PHP_SELF
Откуда это? Может Вы имели ввиду $_SERVER['PHP_SELF']? Это совершенно разные вещи.

----------------------------------------

Что касается ошибки: такого вроде быть не должно.

P.S. Надеюсь, что Вы действительно собираетесь посылать данные на e-mail, а не предъявлять пароль просто после ввода электронного адреса?

   
 
 автор: Super[MAN]   (15.06.2008 в 20:32)   письмо автору
 
   для: BinLaden   (15.06.2008 в 20:10)
 

Спасибо,правда я тут покапался на форуме,нашел кусок кода,как раз с тем,что мне нужно. Правда там совсем простой вариант,исправил кое-что:

if(isset($_POST['submit']))
{соединение с базой}
$email = $_POST['email'];

if (empty($email))
{echo "<center>E-mail осталось пустым!<a href = 'javascript:history.back(1)' class = 'enter'>НАЗАД</a></center>";}

...и дальше как у меня

Сейчас буду документацию по данным вами функциям читать,дали интересную пишу для размышления.
Я же говорю,что начал разбираться в этом 3 дня назад и,блин,что-то затянуло,понравилось. Мне по курсовой надо сделать,так что отправка логина и пароля на ящик не нужна.
А $PHP_SELF как я сам понял (документацию не читал :( ) что форма обрабатывает саму себя.
P.S. Подскажите какую-нибудь стоящую литературу по PHP

   
 
 автор: Super[MAN]   (15.06.2008 в 20:34)   письмо автору
 
   для: Super[MAN]   (15.06.2008 в 20:32)
 

:) Блин,поменять местами...точно! :)

   
 
 автор: Super[MAN]   (15.06.2008 в 20:34)   письмо автору
 
   для: Super[MAN]   (15.06.2008 в 20:32)
 

Здорово,все работает!!! :)

   
 
 автор: BinLaden   (15.06.2008 в 21:12)   письмо автору
 
   для: Super[MAN]   (15.06.2008 в 20:32)
 

> Мне по курсовой надо сделать,так что отправка логина и пароля на ящик не нужна

Курсовые меняют представление о мире:)

   
 
 автор: Super[MAN]   (15.06.2008 в 20:54)   письмо автору
 
   для: BinLaden   (15.06.2008 в 20:10)
 

А через alert можно вывести какие-нибудь переменные?
Например так как-нибудь (только так не работает):

echo "<script>";
echo "alert ('$msg');";
echo "</script>";

   
 
 автор: Trianon   (15.06.2008 в 20:58)   письмо автору
 
   для: Super[MAN]   (15.06.2008 в 20:54)
 

И чем это будет лучше?

   
 
 автор: dyadya   (15.06.2008 в 21:19)   письмо автору
 
   для: Super[MAN]   (15.06.2008 в 20:00)
 

Извините, если отвлекаю, вопрос от чайника:

if( ($_POST['submit'] <> "") && (isset($_POST['submit'])) )


Не должно ли здесь использоваться поле name="email":

if( ($_POST['email'] <> "") ...

Только не обижайтесь и не ругайтесь, пожалуйста.

   
 
 автор: Super[MAN]   (16.06.2008 в 08:05)   письмо автору
 
   для: dyadya   (15.06.2008 в 21:19)
 

>Не должно ли здесь использоваться поле name="email":

if( ($_POST['email'] <> "") ...

Да я сам то чайник в этом деле :)
Но так,использоваться не должно. Если ты так напишешь,то при нажатие кнопки name=submit и при пустом поле для ввода email'a ничего не произойдет. А надо же чтобы тебе говорили мол есть такой адрес в БД или нет.

   
 
 автор: Super[MAN]   (16.06.2008 в 08:11)   письмо автору
 
   для: Super[MAN]   (16.06.2008 в 08:05)
 

Как при обновление страницы уничтожить текст, выведенный echo?

   
 
 автор: sim5   (16.06.2008 в 08:39)   письмо автору
 
   для: Super[MAN]   (16.06.2008 в 08:11)
 

Никак. Нужно не текст уничтожать, а не допускать условия его возникновения.

   
 
 автор: Super[MAN]   (16.06.2008 в 12:38)   письмо автору
 
   для: sim5   (16.06.2008 в 08:39)
 

А если возникла ситуация,что нужно пользователю вывести все данные о нем и после просмотра этих данных,пользователь их мог уничтожить эту выведенную инфу в целях безопасности?
Только вариант отправка пользователю данных на email не подходит.

   
 
 автор: sim5   (16.06.2008 в 12:49)   письмо автору
 
   для: Super[MAN]   (16.06.2008 в 12:38)
 

При чем тут тогда обновление? Ну показали пользователю кто он такой ну и что? Данные о пользователе вы у себя на сервере собираете или это делает пользователь на своем компьютере? Что значит уничтожил пользователь - закрыл браузер или перешел на другую страницу? О какой безопасности вы говорите?

   
 
 автор: ronin80   (16.06.2008 в 12:53)   письмо автору
 
   для: sim5   (16.06.2008 в 12:49)
 

:)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования