Страница 3 из 8

Re: Все про PHP

СообщениеДобавлено: 28 сен 2013, 12:22
Nikel097
Может я ошибаюсь, но Вы меняете кодировку для $from и $head.
А у меня в самом сообщении некорректно отображается, то есть в $mess.

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 02:21
Encoder
А можно на код глянуть? А лучше выложите страницу.

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 07:57
Nikel097
Код всей страницы. Суть такая: пользователь вводит свой логин, сайт генерирует код, который отправляет ему на почту, указанную при регистрации. Пользователь копирует оттуда код и вставляет в input, если он верный, то сайт сообщает пользователю его пароль.
Код: Выделить всё
<?php
session_start
();
?>

<html>
<head>
<meta http-equiv="Content-Type" Content="text/html; Charset=UTF-8">
<link rel="stylesheet" href="http://smodels.kz/styles/allstyle.css" type="text/css">
<link rel="shortcut icon" href="http://smodels.kz/favicon.ico">

<title>Восстановление пароля :: smodels.kz</title>

<link rel="stylesheet" href="mystyle.css" type="text/css">

<style type='text/css'>
sup{color:#e00;}
form{font-famaly:arial; font-size:16px; font-weight:bolder;}
form table tr td{font-famaly:arial; font-size:16px; font-weight:bolder; color:#000;}
input.text {width:250px; text-align:right; border-radius:15px; padding:0px 5px;}
input.text:hover{border:2px solid #fa1;}
input.text:focus{border:solid 2px #f00;}
textarea{height:200px; width:350px; text-align:left; border-radius:15px; padding:0px 5px; border:inset 2px;}
textarea:hover{border:2px solid #fa1;}
textarea:focus{border:solid 2px #f00;}
td.input{width:350px; font-size:12px; font-weight:normal;}
li{font-famaly:arial; font-size:16px; color:#e00;}
</style>
</head>
<body style='background:;'  topmargin="0" leftmargin="0">


<?php include('include/header.txt');?>

<table style='width:100%' cellpadding="0">
<tr>
<td style='width:200px;' valign='top'>
<?php include('include/menu.txt');?>
</td>
<td valign='top' class='body'>
<center><div class='bigtitle'>Восстановление пароля</div></center>

<center><br>
<font style='color:#000; font-famaly:arial; font-size:20px; font-weight:bolder'><b>Чтобы восстановить пароль, заполните необходимые пункты</b></font>
<br> <br> </center>

<?
if (strlen($_POST['submit'])!==0) {                                        //Если форма активировалась то

$login=$_POST['login'];
$login=htmlspecialchars($login);$login=trim($login);


$result mysql_query("SELECT password,mail FROM users WHERE login='$login'",$db);
$myrow mysql_fetch_array($result);

$i=0
if (
strlen($login)==0)  {$error[$i]='Вы не ввели <b><u>Логин</b></u>';$i++;} else {
                if (
strlen($myrow['mail'])==0) {$error[$i]='Пользователя с логином <b><u>'.$login.'</u></b> не существует';$i++;}}

}  else {
$i=1;}        //Конец коду, после активации формы

if (($i>0)and(strlen($_SESSION['login'])==0)) {
  if (
strlen($_POST['submit'])!==0) {foreach($error as $val)   {echo("<li class='error'>$val</li>\n");}}
?>



<center><form action='' method="POST" name="form">
<table style='width:550px;'>
<tr><td align='right' valign='top'  style='width:250px;'>Логин<sup>*</sup></td><td class='input'><input type='text' name='login' value="<?php echo ($_POST['login']);?>" maxlength='20' class='text'><br>Ваш логин, от которого необходим пароль</td></tr>

<tr><td colspan='2'><center><input type="submit" value="Получить пароль" name="submit" class='button'> 
<input type="reset" value="Очистить" class='button'></td></tr></center>
</table>
Пункты с <sup>*</sup> (со звездочкой) обязательны для заполнения
</form></center>

<?
} else {
if (
strlen($_SESSION['code'])==0) {                                                                                                          //Если код еще не сгенерирован и не отправлен
$code=chr(rand(97,122)).chr(rand(65,90)).rand(100,999).chr(rand(97,122)).chr(rand(65,90));

$_SESSION['code']=$code;
$_SESSION['login']=$login;
$_SESSION['password']=$myrow['password'];

$mail=$myrow['mail'];
$_SESSION['mail']=$mail;
$to=$mail;
$from='Администрация сайта smodel.kz';
$title='Восстановление пароля';
$mess='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz';
mail($to$title$mess'From:'.$from);
echo(
'Код, для восстановления выслан на <b><u>'.$_SESSION['mail'].'</u></b>. Если Вы эту закроете вкладку, то при повторной попытке восстановить пароль, сгенерируется новый код и старый будет не действителен.<br>');

?>
<center><form action='' method="POST" name="form">
<table style='width:550px;'>
<tr><td align='right' valign='top'  style='width:250px;'>Введите код<sup>*</sup></td><td class='input'><input type='text' name='code' value="<?php echo ($_POST['code']);?>" maxlength='20' class='text'><br>Введите, полученный Вами код, чтобы подтвердить, что Вы владелец</td></tr>

<tr><td colspan='2'><center><input type="submit" value="Получить пароль" name="submit" class='button'> 
<input type="reset" value="Очистить" class='button'></td></tr></center>
</table>
Пункты с <sup>*</sup> (со звездочкой) обязательны для заполнения
</form></center>
<?
} else{                                                                                                                                                                                  //Если пользователь активировал вторую форму
$i=0;
if (
strlen($_POST['code'])==0) {$error[$i]='Вы не ввели <b><u>Код</b></u>';$i++;} else 
                    if (
$_POST['code']!==$_SESSION['code']) {$error[$i]='Код введен неправильно';$i++;}

if (
$i>0) {
echo(
'Код, для восстановления выслан на <b><u>'.$_SESSION['mail'].'</u></b>. Если Вы эту закроете вкладку, то при повторной попытке восстановить пароль, сгенерируется новый код и старый будет не действителен.<br>');
  foreach(
$error as $val)   {echo("<li>$val</li>\n");}
?>
<center><form action='' method="POST" name="form">
<table style='width:550px;'>
<tr><td align='right' valign='top'  style='width:250px;'>Введите код<sup>*</sup></td><td class='input'><input type='text' name='code' value="<?php echo ($_POST['code']);?>" maxlength='20' class='text'><br>Введите, полученный Вами код, чтобы подтвердить, что Вы владелец</td></tr>

<tr><td colspan='2'><center><input type="submit" value="Получить пароль" name="submit" class='button'> 
<input type="reset" value="Очистить" class='button'></td></tr></center>
</table>
Пункты с <sup>*</sup> (со звездочкой) обязательны для заполнения
</form></center>

<?
} else                                                                                                             //Вывод пароля
{
echo(
'Ваш обещанный пароль: <u><b>'.$_SESSION['password'].'</b></u>. Не забывайте его больше :)');
unset(
$_SESSION['code']);unset($_SESSION['login']);unset($_SESSION['mail']);unset($_SESSION['password']);
}                                                                                                                   
//End вывод пароля

}
}                                                                                                                   
//Главный End
?>

<br>

</td>
</tr>
</table>

<?php include('include/footer.txt');?>

</body>
</html>


А вод конкретно код отправки сообщения
Код: Выделить всё
$mail=$myrow['mail'];
$_SESSION['mail']=$mail;
$to=$mail;
$from='Администрация сайта smodel.kz';
$title='Восстановление пароля';
$mess='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz';
mail($to$title$mess'From:'.$from); 


P.S. кодировка страницы UTF-8 (без BOM).

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 16:25
Encoder
Я в конце добавил вот это

Код: Выделить всё
<?php
$code=chr(rand(97,122)).chr(rand(65,90)).rand(100,999).chr(rand(97,122)).chr(rand(65,90));
$to    = 'my@mail.com';
$from  ='Администрация сайта smodel.kz';
$title ='Восстановление пароля';
$mess  ='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz';
    if(mail($to, $title, $mess, 'From:'.$from)) {
        echo 'Письмо успешно отправил!';
    }
?>


И мне пришло на gmail письмо без кракозябр, на локальном хостинге тоже все хорошо. :)?
Изображение


P.S. Тестил у себя на хостинге, так как на вашем мне письмо так и не пришло.

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 16:31
Nikel097
Я только что попробовал отправить на @yandex.ru и там шапка отображается коряво, все остальное нормально.

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 16:32
Nikel097
На моем хостинге сегодня вечером почему-то и на mail.ru не приходит, а на yandex.ru пришло.

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 17:02
Encoder
Закодируйте его вот так:
Код: Выделить всё
$title ='=?windows-1251?B?'. base64_encode('Тема сообщения').'?=';

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 18:14
Nikel097
Вот такая фигня работает для @yandex.ru

Код: Выделить всё
$to=$mail;
   $from='=?utf-8?B?'. base64_encode("Администрация сайта").'?=';
$title ='=?utf-8?B?'. base64_encode("Восстановление пароля").'?=';
$mess='Код для восстановления пароля:'.$code.'. Благодарю пользование моим сайтом. С уважением администрация сайта smodels.kz'."\n";
if (mail($to, $title, $mess, 'From: '.$from.' smodels.kz')) {echo('Код, для восстановления выслан на <b><u>'.$_SESSION['mail'].'</u></b>. Если Вы эту закроете вкладку, то при повторной попытке восстановить пароль, сгенерируется новый код и старый будет не действителен.<br>');} 


но при прочтении всех сообщений шапка отображается не корректно:
1.png
1.png (6.59 КБ) Просмотров: 9723


(Раньше было наоборот: в списке всех сообщений заголовок отображался нормально, только слова были склеины, то есть без пробелов. А в самом письме шапка коряво отображалась)

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 18:56
Nikel097
Сейчас заработал mail.ru. Мне пришло 4 сообщения, все которые я отправлял, возможно и Вам придут.
Но на всякий случай вот как они приходят:
2.png
2.png (25.54 КБ) Просмотров: 9721

Re: Все про PHP

СообщениеДобавлено: 29 сен 2013, 19:19
Encoder
Советую почитать PHP 5 в подлиннике 2-е издание. Автор Д. Котеров. Глава 27. Посылка писем через PHP.