Этот урок связан с проектом Создание регистрации на сайте на PHP + MySQL

Создание регистрации на сайте на PHP + MySQL. Часть III

Здравствуйте! Это уже 3-я часть статьи, а вот первая и вторая.

sourse

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

Начнем с графической защиты от автоматической регистрации. Написана она по статье с сайта wm-help.net.

Разархивируйте папку code в тот же каталог, где и все файлы Code.rar. Можете изменить там несколько строчек кода, сменить фон, шрифты. Комментарии внутри.
Далее нам необходимо вывести ее при регистрации. Для этого откроем файл reg.php и добавим следующий код перед кнопкой «зарегистрироваться».

 <!-- В переменную fupload отправится изображение, которое    выбрал пользователь. --> 
<p>Введите код с картинки *:<br>
<p><img src="code/my_codegen.php"></p>
<p><input type="text" name="code"></p>
<!-- В “code/my_codegen.php” генерируется код и рисуется изображение -->
<p>
<input type="submit" name="submit" value="Зарегистрироваться">

Затем необходимо проверить, правильно ли пользователь ввел этот код. Открываем save_user.php и заменяем код  с начала, и до обработки логина функцией stripslashes.

  <?php
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
if (isset($_POST['code'])) { $code = $_POST['code']; if ($code == '') { unset($code);} } //заносим введенный пользователем защитный код в переменную $code, если он пустой, то уничтожаем переменную
if (empty($login) or empty($password)or empty($code)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); //останавливаем выполнение сценариев
}
function generate_code() //запускаем функцию, генерирующую код. Можно даже вывести ее в отдельный файл.
{
    $hours = date("H"); // час      
    $minuts = substr(date("H"), 0 , 1);// минута
    $mouns = date("m");    // месяц            
    $year_day = date("z"); // день в году
    $str = $hours . $minuts . $mouns . $year_day; //создаем строку
    $str = md5(md5($str)); //дважды шифруем в md5
        $str = strrev($str);// реверс строки
        $str = substr($str, 3, 6); // извлекаем 6 символов, начиная с 3
        // Вам конечно же можно постваить другие значения, так как, если взломщики узнают, каким именно способом это все генерируется, то в защите не будет смысла.
    $array_mix = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
    srand ((float)microtime()*1000000);
    shuffle ($array_mix);
        //Тщательно перемешиваем, соль, сахар по вкусу!!!
    return implode("", $array_mix);
}
function chec_code($code) //проверяем код
{
    $code = trim($code);//удаляем пробелы
    $array_mix = preg_split ('//', generate_code(), -1, PREG_SPLIT_NO_EMPTY);
    $m_code = preg_split ('//', $code, -1, PREG_SPLIT_NO_EMPTY);
    $result = array_intersect ($array_mix, $m_code);
if (strlen(generate_code())!=strlen($code))
{ return FALSE;}
if (sizeof($result) == sizeof($array_mix))
{   return TRUE;}
else
{   return FALSE;}}
// после сравнения проверяем, пускать ли пользователя дальше или, он сделал ошибку, и остановить скрипт
if (!chec_code($_POST['code']))
{
exit ("Вы ввели неверно код с картинки"); //останавливаем выполнение сценариев
}
//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);

Далее необходимо создать таблицу, в которой будут храниться личные сообщения, назовем ее “messages”. Какие поля нам нужны для этого? Конечно идентификатор id”, затем author”, ведь нам надо знать, кто отправил сообщение. “poluchatel – тот, кому послали сообщение. “date – дата отправки сообщения и, конечно же, сам текст сообщения “text”!!!

CREATE TABLE `messages` (
  `id` int(9) NOT NULL auto_increment,
  `author` varchar(15) NOT NULL default '',
  `poluchatel` varchar(15) NOT NULL default '',
  `date` date NOT NULL default '0000-00-00',
  `text` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=8 ;

Создадим же наконец-то страничку для пользователя page.php! У каждого пользователя есть идентификатор id”, вот через него и будем указывать «хозяина» странички.  Она будет устроена так: в самом начале проверяем, запущена ли сессия у пользователя, затем на свою ли он страничку зашел. Если на свою, то предлагаем ему изменить личные данные и выводим сообщения, если на чужую, то выводим форму для отправки сообщений.

 
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
if (isset($_GET['id'])) {$id =$_GET['id']; } //id "хозяина" странички
else
{ exit("Вы зашли на страницу без параметра!");} //если не указали id, то выдаем ошибку
if (!preg_match("|^[\d]+$|", $id)) {
exit("<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
}
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
   {
   //Если не действительны (может мы удалили этого пользователя из базы за плохое поведение)
    exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
   }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
$result = mysql_query("SELECT * FROM users WHERE id='$id'",$db);
$myrow = mysql_fetch_array($result);//Извлекаем все данные пользователя с данным id
if (empty($myrow['login'])) { exit("Пользователя не существует! Возможно он был удален.");} //если такого не существует
?>
<html>
<head>
<title><?php echo $myrow['login']; ?></title>
</head>
<body>
<h2>Пользователь "<?php echo $myrow['login']; ?>"</h2>
 
<?php
print <<<HERE
|<a href='page.php?id=$myrow2[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>
HERE;
//выше вывели меню
if ($myrow['login'] == $login) {
//Если страничка принадлежит вошедшему, то предлагаем изменить данные и выводим личные сообщения
print <<<HERE
<form action='update_user.php' method='post'>
Ваш логин <strong>$myrow[login]</strong>. Изменить логин:<br>
<input name='login' type='text'>
<input type='submit' name='submit' value='изменить'>
</form>
<br>
<form action='update_user.php' method='post'>
Изменить пароль:<br>
<input name='password' type='password'>
<input type='submit' name='submit' value='изменить'>
</form>
<br>
<form action='update_user.php' method='post' enctype='multipart/form-data'>
Ваш аватар:<br>
<img alt='аватар' src='$myrow[avatar]'><br>
Изображение должно быть формата jpg, gif или png. Изменить аватар:<br>
<input type="FILE" name="fupload">
<input type='submit' name='submit' value='изменить'>
</form>
<br>
<h2>Личные сообщения:</h2>
HERE;
$tmp = mysql_query("SELECT * FROM messages WHERE poluchatel='$login' ORDER BY id DESC",$db);
$messages = mysql_fetch_array($tmp);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху
if (!empty($messages['id'])) {
do //выводим все сообщения в цикле
  {
$author = $messages['author'];
$result4 = mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db); //извлекаем аватар автора
$myrow4 = mysql_fetch_array($result4);
if (!empty($myrow4['avatar'])) {//если такового нет, то выводим стандартный (может этого пользователя уже давно удалили)
$avatar = $myrow4['avatar'];
}
else {$avatar = "avatars/net-avatara.jpg";}
  printf("
  <table>
  <tr>
  <td><a href='page.php?id=%s'><img alt='аватар' src='%s'></a></td>
 
  <td>Автор: <a href='page.php?id=%s'>%s</a><br>
      Дата: %s<br>
                  Сообщение:<br>
                 %s<br>
                 <a href='drop_post.php?id=%s'>Удалить</a>
 
  </td> 
  </tr>
  </table><br>
  ",$myrow4['id'],$avatar,$myrow4['id'],$author,$messages['date'],$messages['text'],$messages['id']);
  //выводим само сообщение
  }
  while($messages = mysql_fetch_array($tmp));
                    }
                                                                              else {
                                                                              //если сообщений не найдено
                                                                              echo "Сообщений нет";
                                                                              }
                                                                             
}
else
{
//если страничка чужая, то выводим только некторые данные и форму для отправки личных сообщений
print <<<HERE
<img alt='аватар' src='$myrow[avatar]'><br>
<form action='post.php' method='post'>
<br>
<h2>Отправить Ваше сообщение:</h2>
<textarea cols='43' rows='4' name='text'></textarea><br>
<input type='hidden' name='poluchatel' value='$myrow[login]'>
<input type='hidden' name='id' value='$myrow[id]'>
<input type='submit' name='submit' value='Отправить'>
</form>
HERE;
}
?>
</body>
</html>

Если пользователь желает изменить свои данные (логин, пароль, аватар), то делает это на странице page.php, затем уже измененные данные отправляются на страницу update_user.php, которая будет обновлять их в базе. Код update_user.php:

<?php
session_start();
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то измените путь
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
   {
   //Если не действительны, то закрываем доступ
    exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
   }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
$old_login = $_SESSION['login']; //Старый логин нам пригодиться
$id = $_SESSION['id'];//идентификатор пользователя тоже нужен
$ava = "avatars/net-avatara.jpg";//стандартное изображение будет кстати
////////////////////////
////////ИЗМЕНЕНИЕ ЛОГИНА
////////////////////////
if (isset($_POST['login']))//Если существует логин
      {
$login = $_POST['login'];
$login = stripslashes($login); $login = htmlspecialchars($login); $login = trim($login);//удаляем все лишнее
if ($login == '') { exit("Вы не ввели логин");} //Если логин пустой, то останавливаем
if (strlen($login) < 3 or strlen($login) > 15) {//проверяем дину
exit ("Логин должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
}
// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."); //останавливаем выполнение сценариев
}
$result4 = mysql_query("UPDATE users SET login='$login' WHERE login='$old_login'",$db);//обновляем в базе логин пользователя
if ($result4=='TRUE') {//если выполнено верно, то обновляем все сообщения, которые отправлены ему
mysql_query("UPDATE messages SET author='$login' WHERE author='$old_login'",$db);
$_SESSION['login'] = $login;//Обновляем логин в сессии
echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваш логин изменен! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}//отправляем пользователя назад
      }
////////////////////////
////////ИЗМЕНЕНИЕ ПАРОЛЯ
////////////////////////
else if (isset($_POST['password'])) //Если существует пароль
      {
$password = $_POST['password'];
$password = stripslashes($password);$password = htmlspecialchars($password);$password = trim($password);//удаляем все лишнее
if ($password == '') { exit("Вы не ввели пароль");} //если пароль не введен, то выдаем ошибку
if (strlen($password) < 3 or strlen($password) > 15) {//проверка на количество символов
exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
}
$password = md5($password);//шифруем пароль
$password = strrev($password);// для надежности добавим реверс
$password = $password."b3p6f";
//можно добавить несколько своих символов по вкусу, например, вписав "b3p6f". Если этот пароль будут взламывать методом подбора у себя на сервере этой же md5,то явно ничего хорошего не выйдет. Но советую ставить другие символы, можно в начале строки или в середине.
//При этом необходимо увеличить длину поля password в базе. Зашифрованный пароль может получится гораздо большего размера.
 
$result4 = mysql_query("UPDATE users SET password='$password' WHERE login='$old_login'",$db);//обновляем пароль
if ($result4=='TRUE') {//если верно, то обновляем его в сессии
$_SESSION['password'] = $password;
echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваш пароль изменен! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}//отправляем обратно на его страницу
     }
////////////////////////
////////ИЗМЕНЕНИЕ АВАТАРЫ
////////////////////////
else if (isset($_FILES['fupload']['name'])) //отправлялась ли переменная
      {
if (empty($_FILES['fupload']['name']))
{
//если переменная пустая (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
$avatar = "avatars/net-avatara.jpg"; //можете нарисовать net-avatara.jpg или взять в исходниках
$result7 = mysql_query("SELECT avatar FROM users WHERE login='$old_login'",$db);//извлекаем текущий аватар
$myrow7 = mysql_fetch_array($result7);
if ($myrow7['avatar'] == $ava) {//если аватар был стандартный, то не удаляем его, ведь у на одна картинка на всех.
$ava = 1;
}
else {unlink ($myrow7['avatar']);}//если аватар был свой, то удаляем его, затем поставим стандарт
}
else
{
//иначе - загружаем изображение пользователя для обновления
$path_to_90_directory = 'avatars/';//папка, куда будет загружаться начальная картинка и ее сжатая копия
               
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
                 {            
                                               
                               $filename = $_FILES['fupload']['name'];
                               $source = $_FILES['fupload']['tmp_name'];       
                               $target = $path_to_90_directory . $filename;
                               move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory
                if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
                $im = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
                }
                if(preg_match('/[.](PNG)|(png)$/', $filename)) {
                $im = imagecreatefrompng($path_to_90_directory.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
                }
               
                if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
                               $im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
                }
               
//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ ВЗЯТО С САЙТА www.codenet.ru
// Создание квадрата 90x90
// dest - результирующее изображение
// w - ширина изображения
// ratio - коэффициент пропорциональности
$w = 90;  // квадратная 90x90. Можно поставить и другой размер.
// создаём исходное изображение на основе
// исходного файла и определяем его размеры
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения
         // создаём пустую квадратную картинку
         // важно именно truecolor!, иначе будем иметь 8-битный результат
         $dest = imagecreatetruecolor($w,$w);
nbsp;        // вырезаем квадратную серединку по x, если фото горизонтальное
         if ($w_src>$h_src)
         imagecopyresampled($dest, $im, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
         // вырезаем квадратную верхушку по y,
         // если фото вертикальное (хотя можно тоже серединку)
         if ($w_src<$h_src)
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
                          min($w_src,$h_src), min($w_src,$h_src));
         // квадратная картинка масштабируется без вырезок
         if ($w_src==$h_src)
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
                                
$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
//почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.
$avatar = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.
$result7 = mysql_query("SELECT avatar FROM users WHERE login='$old_login'",$db);//извлекаем текущий аватар пользователя
$myrow7 = mysql_fetch_array($result7);
if ($myrow7['avatar'] == $ava) {//если он стандартный, то не удаляем его, ведь у нас одна картинка на всех.
$ava = 1;
}
else {unlink ($myrow7['avatar']);}//если аватар был свой, то удаляем его
 
}
else
        {
                               //в случае несоответствия формата, выдаем соответствующее сообщение
        exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
                               }
}
$result4 = mysql_query("UPDATE users SET avatar='$avatar' WHERE login='$old_login'",$db);//обновляем аватар в базе
if ($result4=='TRUE') {//если верно, то отправляем на личную страничку
echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваша аватарка изменена! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}
      }
?>

Если пользователь не собирается менять свои данные, а зашел почитать сообщения, то, скорее всего, захочет удалить лишние. Для этого у нас есть файл drop_post.php, который удаляет из базы сообщение с нужным id.

<?php
session_start();//запускаем сессии
include ("bd.php");//подключаемся к базе
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
   {
   //данные пользователя неверны.
    exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
   }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
$id2 = $_SESSION['id']; //получаем идентификатор своей страницы
 
if (isset($_GET['id'])) { $id = $_GET['id'];}//получаем через GET запрос идентификатор сообщения, которое нужно удалить
$result = mysql_query("SELECT poluchatel FROM messages WHERE id='$id'",$db);
$myrow = mysql_fetch_array($result); //нужно уточнить, кому сообщение отправлено
//ведь через GET запрос пользователь может ввести любой идентификатор и как следствие удалить сообщения, которые отправляли не ему.
if ($login == $myrow['poluchatel']) {//если сообщение отправляли данному пользователю, то разрешаем его удалить
$result = mysql_query ("DELETE FROM messages WHERE id = '$id' LIMIT 1");//удаляем сообщение
if ($result == 'true') {//если удалено - перенаправляем на страничку пользователя
echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$id2."'></head><body>Ваше сообщение удалено! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$id2."'>нажмите сюда.</a></body></html>";
}
else {//если не удалено, то перенаправляем, но выдаем сообщение о неудаче
echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$id2."'></head><body>Ошибка! Ваше сообщение не удалено. Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$id2."'>нажмите сюда.</a></body></html>"; }
}
else {exit("Вы пытаетесь удалить сообщение, отправленное не вам!");} //если сообщение отправлено не этому пользователю. Значит, он попытался удалить его, введя в адресной строке какой-то другой идентификатор
?>

Если же пользователь вошел не на свою страничку, следовательно, изменять ничего не сможет, но у него есть возможность отправить сообщение. Файл post.php добавляет в базу сообщения:

<?php
session_start(); //запускаем сессию. Обязательно в начале страницы
include ("bd.php"); // соединяемся с базой, укажите свой путь, если у вас уже есть соединение
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
   {
   //если логин или пароль не действителен
    exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
   }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
if (isset($_POST['id'])) { $id = $_POST['id'];}//получаем идентификатор страницы получателя
if (isset($_POST['text'])) { $text = $_POST['text'];}//получаем текст сообщения
if (isset($_POST['poluchatel'])) { $poluchatel = $_POST['poluchatel'];}//логин получателя
$author = $_SESSION['login'];//логин автора
$date = date("Y-m-d");//дата добавления
if (empty($author) or empty($text) or empty($poluchatel) or empty($date)) {//есть ли все необходимые данные? Если нет, то останавливаем
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля");}
$text = stripslashes($text);//удаляем обратные слеши
$text = htmlspecialchars($text);//преобразование спецсимволов в их HTML эквиваленты
$result2 = mysql_query("INSERT INTO messages (author, poluchatel, date, text) VALUES ('$author','$poluchatel','$date','$text')",$db);//заносим в базу сообщение
echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$id."'></head><body>Ваше сообщение передано! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$id."'>нажмите сюда.</a></body></html>";//перенаправляем пользователя
?>

Страничка со списком всех пользователей сделает сайт намного удобней. all_users.php:

<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
   {
   //если данные пользователя не верны
    exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
   }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
?>
<html>
<head>
<title>Список пользователей</title>
</head>
<body>
<h2>Список пользователей</h2>
 
<?php
//выводим меню
print <<<HERE
|<a href='page.php?id=$_SESSION[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>
HERE;
$result = mysql_query("SELECT login,id FROM users ORDER BY login",$db); //извлекаем логин и идентификатор пользователей
$myrow = mysql_fetch_array($result);
do
{
//выводим их в цикле
printf("<a href='page.php?id=%s'>%s</a><br>",$myrow['id'],$myrow['login']);
}
while($myrow = mysql_fetch_array($result));
?>
</body>
</html>

Добавить навигацию на страничке index.php было бы замечательно. Допишем ее после «print <<<HERE» между звездочками.

//при    удачном входе пользователю выдается все, что расположено ниже между    звездочками.
//************************************************************************************
 
print <<<HERE
|<a href='page.php?id=$_SESSION[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>

А теперь давайте поговорим с вами о том, для чего вообще лучше использовать регистрацию. Ведь ее использование может привести к уменьшению вашей аудитории и новых пользователей. Мы все ценим свое время, как и посетители наших сайтов, которым не доставляет никакого удовольствия заполнять поля. Поэтому не стоит бессмысленно закрывать ссылки и материалы только для того, чтобы пользователь зарегистрировался. Если я встречаю сайт, где есть такая ссылка, то сразу покидаю его, так как знаю, что найду другой сайт с тем же материалом, где ссылка открыта, причем это займет меньше времени. А если и не меньше, то просто задумайтесь, зачем администрация сайта хочет, чтобы пользователи регистрировались? В голову приходит только две мысли: чтобы хвалиться количеством пользователей или, чтобы узнать ваши пароли. Тем более, многие всегда используют одинаковые пароли на всех сайтах.

Гораздо лучше использовать регистрацию, чтобы сэкономить время пользователя. То есть при отправки комментария ему не придется каждый раз вводить свой ник, е-мейл, не говорю уже об аватаре. Зарегистрировавшись, он сможет общаться с другими пользователями сайта, это очень полезно.

Автор: Стороженко Евгений (отредактировал и опубликовал Максим Шкурупий)

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Максим Шкурупий
Урок создан: 3 Августа 2009
Просмотров: 376429
Правила перепечатки


5 последних уроков рубрики "PHP"

  • Фильтрация данных с помощью zend-filter

    Когда речь идёт о безопасности веб-сайта, то фраза "фильтруйте всё, экранируйте всё" всегда будет актуальна. Сегодня поговорим о фильтрации данных.

  • Контекстное экранирование с помощью zend-escaper

    Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

  • Подключение Zend модулей к Expressive

    Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

  • Совет: отправка информации в Google Analytics через API

    Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

  • Подборка PHP песочниц

    Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 3 Августа 2009 16:02
    Сергей
    Я первый :) Серия этих уроков очень нужная!
    • 7 Марта 2011 20:26
      delphi
      На странице drop_post.php Переменную id в Get запросе необходимо фильтровать тк если этого не делать на сайт можно легко сделать XSS атаку пример фильтра
      if (isset($_GET['id']))
      { if (ctype_digit($_GET['id'])) { $id=htmlspecialchars($_GET['id']); $id=strip_tags($id);
      //далее по тексту...
      }} 
      Ну или спомощу регулярных выражений или intval Пример Xss кода (так для общего развития ))) :
      http://MySite.ru/drop_post.php?id="><script>alert('xss')</script>
      
      • 1 Июля 2015 19:22
        wcoder
        апа
  • 3 Августа 2009 16:06
    ajan
    пасиба
  • 3 Августа 2009 16:33
    bequick
    Огромное спасибо!
  • 3 Августа 2009 16:52
    Святослав
    Воот это тема! Правдо я ей пока не пользуюсь)))
  • 3 Августа 2009 17:04
    InfernuS
    Шикарно. Еще бы автоматический вход как сделать написали, и тогда вообще красава было бы.
  • 3 Августа 2009 17:35
    Drunok
    ОООО.....спс огромное уже 2 дня жду эту часть СПАСИБО!!!!!!!!! будем пробовать!
  • 3 Августа 2009 18:31
    Павел
    наконец то!!! уже 3 дня жду!
  • 3 Августа 2009 18:33
    Павел
    ЕСЛИ КОМУ НАДО ТО МОГУ ОРГАНИЗОВАТЬ СТАТЬЮ ПО ДОБАВЛЕНИЮ КОММЕНТАРИЕВ НА AJAX C PROTOTYPE.JS!!!
  • 3 Августа 2009 18:39
    Святослав
    Павел, давай, очень интересно!
  • 3 Августа 2009 18:56
    Евгений
    Павел, высылайте статью по добавлению коментов мне, я добавлю её на сайт.
  • 3 Августа 2009 20:13
    Павел
    Евгений - Простите, а высылать -> http://ruseller.com/to_offer_lessons.php <- сюда? Я туда высылал, а никто не выложил!!
  • 3 Августа 2009 20:27
    Drunok
    Я переместил все файлы в папочку отдельную...а index.php оставил в не папки...и у меня перестала работать галочка "Запомнить" не подскажите почему так может быть?
  • 3 Августа 2009 20:41
    Евгений
    нет, не туда, лучше на evgeniypopov.ru через тикет. Там можно причепить к билету архив.
  • 3 Августа 2009 20:42
    Павел
    Drunok - <input name="save" type="checkbox" id="save" value='1'><span style="cursor:pointer;" onclick="document.Имя формы(название формы).save.click();">Запомнить меня.</span><br><br>
  • 3 Августа 2009 21:02
    Илья
    InfernuS, с автовходом все просто: заносите в куки определенную инфу, по которой будете определять юзера. Можно заносить логин и пароль, но не советую - лучше обойтись идентификатором последней открытой сессии, которая будет храниться в базе и одновременно в куках юзера. Вот ее и нужно сверять: совпадает (связка id сессии + id юзера) - пропустить юзера. Безопасности ради, можно при каждом входе на сайт с автовходом менять сессию и перезаписывать куки, иначе если кто-то узнает id сессии и юзера, сможет логиниться под чужими данными.
  • 3 Августа 2009 21:08
    InfernuS
    Подскажите пожалуйста. Как автоматический вход сделать. Если cookies использовать, то из них ведь инфу не достать, а session после закрытия браузера рушится. Я если вход на куках делаю, то тогда выйти не могу. Как быть?
  • 3 Августа 2009 21:10
    Павел
    Евгений - Статью я сегодня уже дописываю, а когда и где ее можно увидеть?
  • 3 Августа 2009 21:26
    Volos
    Извините, а почему я не могу скачать исходники, при нажатии на ссылку у меня выскакивают кракозябры(((
  • 3 Августа 2009 21:46
    Drunok
    Павел, сделал как вы писали, все равно не запоминает....(((
  • 3 Августа 2009 21:57
    Drunok
    Drunok - <input name="save" type="checkbox" id="save" value='1'><span style="cursor:pointer;" onclick="document.Имя формы(название формы).save.click();">Запомнить меня.</span><br><br> Там имя формы надо вводить? или имя поля ввода? А форме надо прописать name?....... Прописал форме name и вставил так как вы писали все равно не работает...
  • 3 Августа 2009 22:02
    quemro
    кстати нашёл косяк с аватором во второй части урока, когда файлы не записывались и везде ставилось нет аватора. Не чё не нужно менять и темболее изменять код, просто там где файл ловим через $_POST нужно заменить на $_FILES, всего в двух местах. Евгений вижу ваше появление, есть вопрос когда выйдет новый курс?
  • 3 Августа 2009 22:04
    quemro
    о нифига коменты круто замутили, надо себе такую фишку поставить
  • 3 Августа 2009 22:24
    Павел
    quemro - Вы интересно выразились! Но я ничего не понял.....((
  • 3 Августа 2009 22:26
    Павел
    Drunok - Да!!! Имя формы. Да!!! Форме надо прописывать name. Хмм.....................не знаю..............это у вас что то! У меня все работает.
  • 3 Августа 2009 22:27
    Motorchiknp
    спасибо большое за эти уроки!
  • 3 Августа 2009 22:55
    Aleksandr
    А у меня какая-то ошибка, вот что пишет: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\localhost\www\test\all_users.php on line 55 Что такое и что делать?
    • 2 Декабря 2011 01:53
      Growl
      что в этом случае делать? можешь подсказать?
  • 3 Августа 2009 23:00
    Aleksandr
    Разобрался.
  • 3 Августа 2009 23:04
    YVSIK
    Очень хорошо столько времени бился но вот оно счастье нашёл то что надо. Евгению спасибо
  • 3 Августа 2009 23:11
    YVSIK
    И ещё по моему не хватает IP адреса вот как его проверить или прицепить к этой базе. Может я что-то уже пропустил?
  • 3 Августа 2009 23:16
    quemro
    Да я уже сам не чё не понимаю, целый день вожусь со скриптом, пишу самостоятельно!!!! но в связи с пока очень слабым знанием библиотеки GDLib решил взять идею аватора у вас. Первая моя проблема была то, что не сохранялся выбранный мною аватор, т.е. что бы я не выбира, в базу всё равно заполнялось net-avatara, решил сию проблему я заменил $_POST['fupload'] на $_FILES['fupload'] в данной строчке: if (!empty($_FILES['fupload'])) //проверяем, отправил ли пользователь изображение { $fupload=$_FILES['fupload']; $fupload = trim($fupload); и т.д.
  • 3 Августа 2009 23:16
    quemro
    Но блин тут такая кора произошла, теперь то я могу загружать СВОИ аватары, а если не чё не загружаю он пишет "Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>", т.е. теперь наоборот можно загружать свои аваторы,но нельзя ставить аватор по умолчанию. Я то шутку сначало понял, даже посмеялся, а теперь ни **** ни смешно, не могу прийти к ультимату. Я надеюсь Павел ты понял??????? Так когда курс то выйдет, или он пока выйдет я уже сам профи станую :)
  • 3 Августа 2009 23:35
    Павел
    Я думаю что Евгений этот курс скоро выпустит в мир!
  • 3 Августа 2009 23:39
    quemro
    решил я эту проблему, кароче что бы было счастье надо просто поменять &_POST где он относится к аватару, поменять на &_FILE и приствить ['name'] то есть просто редактируем следующий код: if (!empty($_POST['fupload'])) //проверяем, отправил ли пользователь изображение { $fupload=$_POST['fupload']; $fupload = trim($fupload); убираем это всё и вставляем if (!empty($_FILES['fupload']['name'])) //проверяем, отправил ли пользователь изображение { $fupload=$_FILES['fupload']['name']; $fupload = trim($fupload); я вот только не пойму, скрипт вообще тестировали, или это мож я чет не то настроил??????? я где-то ещё одну ошибку нашёл мелочную, уже не помню где, странно что ни кто про неё не писал, или я идиот или никто тольком скрипт не разбирал, а просто скопировали и всё, работает и хрен с ним, ща я вспомню чё за ошибка и скину её
  • 3 Августа 2009 23:45
    Павел
    quemro - сервера апаче существуют разные и по-этому на каждом сервере скрипт отображается по-разному! у меня на локалке все нормально работает, а когда закину на сайт то белиберда выходит из этого!!! Так что придется всем застраховаться от этих двух случаев!
  • 3 Августа 2009 23:47
    Aleksandr
    У меня при попытке изменить аватар вот такая ошибка вылезает, и потом нового аватара нет, и старый не показывается, как будто его нет. Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in Z:\home\localhost\www\biznes\update_user.php on line 111 Warning: imagecopyresampled(): supplied argument is not a valid Image resource in Z:\home\localhost\www\biznes\update_user.php on line 116 Warning: imagejpeg(): supplied argument is not a valid Image resource in Z:\home\localhost\www\biznes\update_user.php on line 126 Warning: unlink(avatars/1249324991.jpg) [function.unlink]: No such file or directory in Z:\home\localhost\www\biznes\update_user.php on line 136 Что делать?
  • 3 Августа 2009 23:50
    quemro
    блин туплю уже, не могу найти ошибку.Я не знаю ещё не пробовал скидывать с локалки на хост, но до этого сайты скидывал, один даже на китайский хост (www.paybar.ru мой первый), и кроме проблем с вопросиками у меня не было, посмотрим, что будет с этим скриптом. Вот только его ещё дописать надо. Кстати можно ещё для электронного ящика добавить проверку if (empty($email)) { $error4 = "Вы не ввели email<br>"; }else { if (!preg_match ("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i",$email)){ $error4 = "email введён не правильно, введите его следующим образом user@host.com."; }
  • 4 Августа 2009 00:05
    Volos
    Товарищи!, мне кто-нить ответит на вопрос, - почему я не могу скачать исходники, при нажатии на ссылку у меня выскакивают кракозябры(((
  • 4 Августа 2009 00:10
    Aleksandr
    И зарегится не могу, пишет неверно введены цыфры с картинки. Что делать-то?
  • 4 Августа 2009 00:14
    Volos
    Уважаемый Евгений, хочу обратить Ваше внимание на то, что ссылка на исходник данного урока битая. При нажатии на неё у меня выскакивают "кракозябры".
  • 4 Августа 2009 00:24
    Aleksandr
    И при входе на сайт со страницы index.php пароль не кодируется как раньше, показывается открытым. Помогите разобраться со всеми глюками!
  • 4 Августа 2009 00:25
    Aleksandr
    Уважаемый Volos, у меня всё нормально открывается, ссылка рабочая.
  • 4 Августа 2009 00:29
    quemro
    блин, на ссылке нажми правой кнопкой, а потом если у тя опера нажми "сохранить в папку загрузки" а если IE , то "сохранить обьект как", и жми не на рисунок "исходники", а на ссылку code.rar. И будет тебе счастье, я только что скачивал!!!!!!!!!!
  • 4 Августа 2009 00:37
    quemro
    Народ есть вопрос, если в стилях самого сайта поставить не стандартные font-family, а например какой нибудь мазёвый шрифт, скажем в стили веб 2.0, а сам файл шрифта скинуть в директорию сайта. Будет ли он отоброжаться коректно, я видел на неруских сайтах фишку, там шрифты ни фига не стандартные, как они этого добиваються?
  • 4 Августа 2009 00:51
    Olenets
    Не могу разобраться вроде всё сделал а пишет Warning: session_start(): Cannot send session cookie - headers already sent by ........ перед <php session_start(); - пробелов нет? помогите....
  • 4 Августа 2009 00:58
    Olenets
    ой перед php session_start(); - пробелов нет!!!
  • 4 Августа 2009 01:15
    Павел
    Уважаемые люди. Евгений Стороженко немного занят! и по-этому е может ответить на ваши вопросы!
  • 4 Августа 2009 01:24
    АндрейЖданов
    И меня интересует этот вопрос, когда будет новый курс?!
  • 4 Августа 2009 03:25
    Илья
    InfernuS, куки для того и созданы чтобы из них инфу доставать))) Инфу в куках можно: а) записать, б) прочесть, в) уничтожить. Читайте мануал по кукам, в инете инфы достаточно - нужно только погуглить.
  • 4 Августа 2009 06:18
    Deamonicus
    Добрый день. У меня возникла такая ошибка Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\localhost\www\vip\page.php:1) in K:\home\localhost\www\Site\page.php on line 1 Код страницы page.php скопировал с данного урока.
  • 4 Августа 2009 06:20
    Deamonicus
    В предпоследней строчке: in Z:\\home\\localhost\\www\\Site\\page.php on line 1
  • 4 Августа 2009 06:46
    positive
    Уффф! Проверял на двух компах, все работало. Olenets > Может у вас кроме пробелов там что-то. Сессии и кукисы должны задоваться до начала хтмл кода. Deamonicus > как у вас ошибка в предпоследней строчке, когда написано "on line 1"? Стучите в асю, будем разбираться. 491514170
  • 4 Августа 2009 06:48
    positive
    Volos > опера не любит rar архивы. quemro > ошибка, когда грузился всегда только стандартный аватар была во второй части и то я в комментах выкладывал ссылку на исправленный файл.
  • 4 Августа 2009 07:16
    WorkStudio
    Евгений Спасибо за работу ! Все супер !
  • 4 Августа 2009 09:23
    SADIQ
    Евгений Спасибо ya zdelal svoy sayt
  • 4 Августа 2009 10:26
    Виталий
    Очень полезный цикл уроков. Спасибо!
  • 4 Августа 2009 11:47
    Olenets
    Positive> Вот начало моего документа <?php session_start(); include ("bd.php"); .... ошибка как и у Deamonicus точно такая только пути разные...
  • 4 Августа 2009 12:23
    Vik
    Aleksandr>> у меня тажэ ошыбка что и у тебя Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/free/tym.cz/p/phpblog/root/www/page.php on line 124 В чом дело и что делать? Помоги пожалуста.
  • 4 Августа 2009 12:59
    Павел
    Olenets - После - session_start(); - желательно больше ничего не писать!
  • 4 Августа 2009 13:10
    Olenets
    У меня все как в уроке <?php session_start(); include ("bd.php");
  • 4 Августа 2009 13:10
    Olenets
    include ("bd.php"); с новой строки
  • 4 Августа 2009 13:21
    Павел
    Olenets - Ставьте exit(); и ловите ошибку!
  • 4 Августа 2009 13:37
    Olenets
    а подробнее можно, куда ставить?
  • 4 Августа 2009 13:48
    Павел
    Olenets - Это уже не ко мне, это к positive - он создатель статей и он за это!
  • 4 Августа 2009 13:50
    Player
    Отличный урок! Только бы 4 части дождаться бы, с реализацией активации аккаунта через email и возможностью восстановления пороля или логина когда забыл случайно.
  • 4 Августа 2009 16:22
    АндрейЖданов
    Павел, лучше молчи.
  • 4 Августа 2009 16:45
    Павел
    АндрейЖданов - Не понял намек! Что ты этим хочешь сказать?
  • 4 Августа 2009 17:19
    Vik
    Помогите у меня ошыбка Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/free/tym.cz/p/phpblog/root/www/page.php on line 124 В чом дело и что делать?
  • 4 Августа 2009 17:24
    positive
    Ошибка Cannot send session cache limiter - headers already sent значит, что все заголовки уже отправлены, поэтому сессия не может запуститься. Заголовки отправляются до хтмл тегов и вообще до начала вывода любой информации на экран. Ищите перез <?php пробелы, абзацы, символы, что угодно и удаляйте их! Вот это "<?php session_start();" Должно быть в САМОМ начале страницы. Кроме того пользуйтесь поиском, ищите там ошибки, а вообще лучше сначала подучить php и делать более простые скрипты. Тут элементарные ошибки, читайте комменты к первой и второй часть, там спрашивали то же самое.
  • 4 Августа 2009 18:09
    positive
    Vik > Что у Вас в строке 124? Сосчитайте все () [] "" '' и удалите лишние пробелы.
  • 4 Августа 2009 18:19
    Vik
    positive > В строке 124 if ($myrow['login'] == $login) {
  • 4 Августа 2009 18:19
    ilya_averkiev
    Теперь бы ещё добавить систему проверки e-mail посредством отправки верификационного сообщения на указанный адрес. Можно добавить срок верификациии - если опоздал, то аккаунт удаляется. А ещё можно добавить странички "Забыл пароль" и "Забыл логин"...
  • 4 Августа 2009 18:36
    positive
    Vik > Пишите сюда 491514170
  • 4 Августа 2009 19:01
    nail
    Подскажите, что значит эта ошибка: Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
  • 4 Августа 2009 19:04
    positive
    nail > Это значит, что что-то в коде не так. Вероятнее всего стоит лишний пробел около какого-нибудь капризного оператора, возможно не закрыты кавычка или скобка...но это вряд ли...
  • 4 Августа 2009 19:21
    positive
    И еще, не надо добавлять session_start() через include
  • 4 Августа 2009 19:55
    nail
    Что то я совсем запутался... Теперь у меня показывает ошибку на строке, на котором кроме закрытия php (?>) больше ничего нету.
  • 4 Августа 2009 23:41
    profnabor
    Скажите пожалуйста, будет ли продолжение уроков по регистрации? Или же это все?
  • 4 Августа 2009 23:42
    Cheiz
    Positive молодец, давай поддай, хорошо идеш, ждем продолжения
  • 5 Августа 2009 00:16
    Olenets
    А у меня такой вопрос... Мы добавили а страницу юзера форму полученных личных сообщении.. А кто и как должен сообщение писать ему?
  • 5 Августа 2009 00:17
    Olenets
    Упс уже нашел, мда а запихнули то её))
  • 5 Августа 2009 00:54
    Павел
    Olenets - Ты чего возникаешь? Скажи спасибо вообще что тебе третью часть сделали!
  • 5 Августа 2009 07:47
    quemro
    positive>>> да твоя ссылка выдаёт 404, а так убераеш всё попадаеш на какой-то лажёвый сайт, я уже всё исправил и написал как, проверял на двух хостах , один из них китайский всё работает. ещё раз говорю просто меняеш $_POST на $_FILES и приставляеш ['name'] и не чё не надо придумывать, проверенно! всё работает
  • 5 Августа 2009 09:18
    positive
    quemro > Пока я еще не встречал человека, у которого бы не шли эти исходники (именно из третьей части). Ошибки в основном были в неправильном их внедрении в конкретный сайт и в самой базе. "$_FILES" - это неточность вообще со странички сохранения пользователя во второй части, когда грузился всем стандартный аватар. В исходниках третьей части все исправлено. Если у кого-то что-то не пошло, то пишите мне в асю, когда я в сети 491514170. Кто писал - у всех разобрались в их ошибках и все работает исправно.
  • 5 Августа 2009 10:23
    quemro
    positive>> да я исходники из третей части не использовал, я уже это давно сам написал, я взял только аватор, и там была ошибка, но всязи с тем что твой файл битый пришлось исправлять самому. а регистрацию можно было уж и получше написать, много лишнего. большинство можно было запихать в один файл, а авторизацию можно было зделать на одной странице, причём со всеми проверками, а размером меньше чем у тебя. У меня регистрация получилась меньше по размеру, а возможностей , защиты и проверок гораздо больше.
  • 5 Августа 2009 10:53
    Иван
    ПОдскажите как сделать чтоб ава была не 90 на 90 а например 190 на 250??????
  • 5 Августа 2009 12:28
    positive
    quemro > Чего же там у меня лишком много места занимает? Для понимания я специально все разделил, так как все в куче смотрелось бы ужасно. Комменты удали и будет маленький размер)) Авторизация у меня на одной странице. Саму форму можно вообще на каждой странице вывести. Проверки конечно не все, но вполне достаточно. А вытаскивать из всей статьи аватар вообще не самая хорошая идея, проще в поисковик вбить и будет вам счастье.
  • 5 Августа 2009 12:30
    positive
    Иван > это довольно не простая система, да и обычно аватары делают квадратными. Сделать размер квадрата больше очень легко, а вот чтобы прямоугольник сделать, нужно менять многие выражения.
  • 5 Августа 2009 13:24
    MaximusFT
    Очень актуально было бы описать в следующий уроках принцип системы доступа и раздачи прав пользователям. Буду очень ждать
  • 5 Августа 2009 14:35
    Иван
    positive> Хм не чего сложно я не видел просто добавил переменую h и поставил ее в 3 строках вместо w И все!!! И чего там больше не менял!!!)))
  • 5 Августа 2009 17:07
    xeka
    Урок отличный! Побольше делайте уроков по php, это намного интереснее (и полезнее) чем различные украшательства с использованием jQuery. Даже те же коментарии к регистрации интереснее почитать, чем к очередному выпадающему меню (2-3 коментария типа "да красиво, очень понравилось").
  • 6 Августа 2009 06:22
    MIKA
    Супер урок! Спасибо! У меня вопрос: если на личьной страничьке пользователя я хочю представить к изменению и другие даные, не только логин, аву и пароль. А, например страна, емаил и прочие. Форму и переменные я создала. Проблема с обработчиком. Что надо прописать на страничьке update_user.php, чтобы обновлять в базе иные даные??????????
  • 6 Августа 2009 07:30
    positive
    MIKA > В обработчике надо прописать условия, если существует страна, то обновить ее в базе, Если существует емаил, то обновить его и т.д. mysql_query ("UPDATE база SET поле='переменная' WHERE логин='переменной с логином'");
  • 6 Августа 2009 09:46
    Aleksandr
    А когда будет урок по ДОБАВЛЕНИЮ КОММЕНТАРИЕВ НА AJAX C PROTOTYPE.JS?
  • 6 Августа 2009 10:30
    MIKA
    positive - Спасибо! Я уже зделала это! Теперь жду четвертого урока по комментариях. Хотя, и с комментариями я почьти разобралась... Но, все же, есть один существенный баг.
  • 6 Августа 2009 11:11
    MaximusFT
    Подскажите как лучше реализовать систему привилегий и прав доступа. Что бы можно было делить пользователей по группам. Интересует именно момент правильного, удобного и оптимизированного использования. Если возможен урок то было бы очень кстати.
  • 6 Августа 2009 11:13
    positive
    MIKA > кодировка что ли?
  • 6 Августа 2009 12:03
    Иван
    А если у меня в GET другая переменая например to как должна выглядить эта проверка?? if (!preg_match("|^[\d]+$|", $id)) { exit("<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку }
  • 6 Августа 2009 12:07
    MIKA
    positive > нет, не кодировка. Я вывожу комментарии через echo и, наверника, что-то накрутила :) Если оставляю комментарий - то он выводитса (все, как должно), а выше дублируетса пустая табличька. Комент один, а таблицы две...
  • 6 Августа 2009 14:47
    positive
    Иван > if (!preg_match("|^[\d]+$|", $to)) { exit("<p>Неверный формат запроса! Проверьте URL</p>");
  • 6 Августа 2009 14:48
    icepic
    подскажите как сделать чтобы все эти сообщения типа Вход на эту страницу разрешен только зарегистрированным пользователям! или Вы ввели не всю информацию, вернитесь назад и заполните все поля выводились не на белом экране, а на главной странице.? Все перепробывал, не выходит.. Или я за отпуск язы забыл
  • 6 Августа 2009 18:06
    AHTOH
    Люди, у меня почему-то при регистрации пользователя, в базу добавляется хрен пойми что. Вот например пароль qwerty - 4ac5c85a67bb5cbf Что делать, я не могу даже войти потом, пишет что не правильный пароль, если вводить этот пароль, то все равно так же. Помогите пожалуйста.
  • 6 Августа 2009 19:09
    positive
    AHTOH > измените размер поля в базе, куда записывается пароль на 255 или близкий к этому. Дело в том, что пароль кодируется, поэтому так и выглядит. Это вполне нормально.
  • 6 Августа 2009 19:37
    AHTOH
    positive > Спасибо, теперь заходит, но в базе все равно пароль тупит, вот например Smoke - 40455ada3928fda6b62de91af0df39cbb3p6f. Я просто хочу сделать отправку паорля если забыл, и думаю что из-за этого не получится, будет отправлять эту билиберду.
  • 6 Августа 2009 20:35
    positive
    AHTOH > обычно для этого делают еще одно поле, куда заносят незашифрованный пароль. А этот хранят в куках, так как он доступен многим, то его зашифровывают.
  • 7 Августа 2009 11:05
    Кот
    Всем привет, всё класно, всё работает. Только нехватает небольшого урока, как к этой регистрации прикрепить к примеру добавление коментариев? Если сама форма входа для зарегиных пользователей в отдельном блоке. Как к примеру сделано на этом сайте. Если кто может помочь подскажите пожалуйста чайнику.
  • 7 Августа 2009 11:15
    Andrew
    подскажите пожалуйста почему не работает галочка "запомнить меня" ( в исходнике то же)?
  • 7 Августа 2009 23:58
    Чебурашка
    Спасибо! Отличный урок.
  • 8 Августа 2009 20:23
    AHTOH
    А как бы засунуть все файлы в один? Если это возможно))
  • 9 Августа 2009 00:06
    InfernuS
    А как сделать, чтобы как на этом сайте, при нажатии на кнопку вход все передается в обработчик enter.php, а при нажатии назад(особенно в opere) все возвращалось на форму входа. А то у меня в опере при нажатии назад выводится пустой экран обработчика enter.php и только при повторном нажатии форма входа.
  • 9 Августа 2009 09:22
    positive
    Возможно сделать обработчик прям в index.php, но если форма входа у нас будет на всех страницах, то не будем же мы и обработчик во все эти страницы вставлять. Нужно поставить редирект в обработчике, т.е. если нет переменных, то отправить на index.php
  • 9 Августа 2009 11:08
    InfernuS
    positive> Так у Евгения это реализовано. Зачем изобретать велосипед. Может он сделает урок по этой теме? Было бы очень полезно.
  • 9 Августа 2009 12:01
    InfernuS
    AHTOH> Что бы сделать напоминание пароля нужно делать гениратор случайного пароля и высылать его забывчивому юзеру. После чего надо сделать опцию профиль в его аккаунте и позволить ему сменить присланный пароль на тот который он пожелает. Positive> А вообще в базе хранить копию незашифрованного пароля не только не безопасно, но и не этично. Лично мне было бы не приятно узнать что админ того или иного сайта знает мой пароль. Ведь некоторые используют один пароль на многих ресурсах.
  • 9 Августа 2009 14:47
    AHTOH
    Востановление пароля я сделал, просто при регистрации как на многих сайтах нужно ответить на вопрос, если забыл, на странице надо ввести логин и ответ на этот вопрос, ну и конечно новый пароль. Но вот не порядок, у меня почему-то если авторизовался, то при переходе на главную страницу сайта, нету контента, тоесть только графика сайта, а то что в базе, не выводится, и ошибок нету никаких. Что может быть?
  • 9 Августа 2009 18:14
    Aleksandr
    АНТОН, дайте ссылку на сайт, посмотреть как регистрация сделана.
  • 22 Августа 2009 00:26
    Дима
    Большое спасибо!Замечательный урок.
  • 31 Августа 2009 20:36
    Алексей
    Здравтвуйте.У меня вопрос по графической защите от автоматической регистрации.Сделал для примера как у вас. Заметил одно обстоятельство , а именно если в тектовом поле менять местами изображение на картинке то скрипт всё равно принимает и пропускает. например на кртинке 34e56b ...я ввожу в текстовое поле 43e65b или 3465eb то скрипт всё принимает и пропукает.Почему так?
  • 31 Августа 2009 20:42
    Алексей
    я так понимаю что скрипт сравнивает изображение на картинке и любое сочетание символов в текстовом поле и если символы такие присутствуют то он пропускает..тогда нужно писать что введите любое сочетание символов с картинки..а то становится непонятно
  • 31 Августа 2009 21:05
    vitaliy
    Здравствуйте. Во-первых спасибо за статьи. Очень познавательно. А во-вторых, когда делал графическую защиту нашел один косячек в этом же сайте:) Мне не очень понравиловь нагромождение, которое приведено в статье для генерации кода и я решил сделать что-нибудь по-проще. Заглянул, как реализована графическая защита на самом сайте ruseller.com и удивился:) У вас нужно ввести сумму двух однозначных чисел. причем каждое число отображается отдельной картинкой. каждая картинка названа одной буквой латинского алфавита. т.е. просмотрев несколько раз страницу регистрации можно поставить однозначное соответствие букв(названия картинок) цифрам, которые нужно сложить. буквально за 3 минуты была составлена табличка: 1 a 2 b 3 g 4 n 5 k 6 i 7 s 8 w 9 p 0 y т.е. посмотрев названия картинок вполне можно понять, какие цифры нужно складывать, т.е. каким должен быть ответ. будь у меня злые намерения и немного больше опыта в написании ботов - непременно взялся бы за это :)
  • 1 Сентября 2009 20:46
    Евгений
    Ну если появится такой умный бот, то мы переделаем капчу :)
  • 6 Сентября 2009 17:57
    VeleslaV
    У меня возникла проблема... Капча почемуто не обновляется.. =( Жму обновить а картинка таже.. пробую ввести число с картинкиЮ а скрипт мне говорит. что я ввёл не правильно число.. В чём может быть проблема?
  • 11 Сентября 2009 10:38
    Ирина
    Все пишут что у всех все работает. Я скачала исходники в чистом виде. Создала таблицы какие нужно в б/д Решила протестировать через локалхост. Капча - у меня вообще не отображается. Вместо капчи надпись "рисунок". Аватор не могу поменять пишет Fatal error: Call to undefined function imagecreatefromjpeg() in C:\Program Files\Apache Group\Apache2\htdocs\test3\WWW\update_user.php on line 126. В чем тут может быть дело?
  • 11 Сентября 2009 11:54
    Ирина
    Ура! все заработало! Оказывается в php.ini надо было раскоментировать строчку extension=php_gd2.dll.
  • 19 Сентября 2009 00:11
    Blast
    Здравствуйте. Помогите пожалуйста решить проблему.Все работает отлично, но когда вывожу контент из базы данных на страничку, зарегистрировать пользователя могу, но session_start(); для пользователя не запускается. А без вывода информации из базы данных все работает.
  • 19 Сентября 2009 14:07
    Blast
    Разобрался.Подскажите пожалуйста не является ли это грубым нарушением если сессии проставлены на каждой странице.
  • 10 Ноября 2009 23:24
    Денис
    Народ помогите решить проблему if (действие) { exit ("текст"); } После строчки exit ("текст"); вобще перестают работать дальше все скрипты. Например пользователь что-то не так сделал срабатывает exit и всё что дальше (блоки,скрипты) перестают работать. Вопрос: Как прервать выполнение именно этого скрипта и продолжить дальше выполнение всех функций?
  • 21 Ноября 2009 15:34
    Dima
    Помогите плиз!!! Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\virtual\cs.energy-team.ru\save_user.php on line 199 Ошибка! Вы не зарегистрированы. (И качал уже готовый таже фигня!)
  • 7 Декабря 2009 14:42
    Max_Safonov
    Я поступил проще - убрал шифровку пароля. Все отлично работает... но вот какая напасть: после входа в аккаунт не выводится текст из базы!!! Кто знает, в чем проблема??? ЗЫ Проверял код раз семь...
    • 31 Января 2013 17:51
      ARANRUS
      У меня тоже самое было: <? echo $myrow["text"]; ?> но текст не выводился. Помогло это: исправил на <? echo $myrow3["text"]; ?> т.е. на всей странице поменял $myrow на $myrow3. После этого всё заработало.
      • 21 Ноября 2014 09:13
        k777ks
        помоги..у меня после регистрации пропадает текст...не знаю как решить эту проблему
  • 10 Декабря 2009 16:52
    Dagot
    Всем добрый вечер, у меня такая проблема, защита графическая не отображается, появляется рисунок и написано "изображение". как это исправить?
  • 27 Декабря 2009 14:24
    ntym
    Ребята, проблема с капчей на локалке работает, залил на сервер не работает, не отображается картинка зделал так как написано и все равно нет каритинки: // error_reporting(E_ALL); $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; define("code_dir", $DOCUMENT_ROOT."/code/my_codegen/"); //выше вариант, который надо использывать при расположении сайта в интернете, а не на ПК. //на локале /* $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; define("code_dir", "/my_codegen/"); */ Может чего пропустил?
  • 11 Января 2010 11:31
    Путный
    У меня тоже проблема с капчей возникла. Все также как у ntym раскомментировал. На хосте не работает. В логе ошибки пишет, что функция imagettftext неможет найти или открыть шрифты. ЧТО ДЕЛАТЬ???
  • 19 Января 2010 17:16
    Путный
    Да. Похоже здесь больше не ответят :-((
  • 22 Января 2010 20:28
    Trinithy
    Blast В предыдущих уроках говорилось,что ве на сессиях работает, без них не будет тебе счастья:)
  • 30 Января 2010 21:11
    Trinithy
    positive смысла нет стучать тебе в асю тебя никогда в онлайне нет :(
  • 11 Февраля 2010 16:22
    RexHunt
    для тех у кого не отображается капча, попробуйте так: в файле reg.php, вместо <img src="code/my_codegen.php"> напишите <? echo "<img src='code/my_codegen.php'>"; ?>
  • 15 Февраля 2010 23:05
    Сергей
    Сделал я сайт. У меня он разбит на 5 блоков (header, left, index, right and footer). Установил систему регистрации. Вывод изображения и имени посетителя отображается у правом блоке. Если я открываю сессию у самом начале правого блока, то мне выдает ошибку перед авкою пользователя (хотя вход был осуществлен и все работает): Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at T:\home\localhost\wenst\bloki\left.php:79) in T:\home\localhost\wenst\bloki\right.php on line 1 Если я открываю сессию у шапке сайта (header), то ошибки не выдает и пользователь без проблем заходит на сайт. Но когда пользователь авторизированый, то ОН НЕ ВИДЕТ КОММЕНТАРИЕВ и не пашет система оценки файлов. А если лазить по сайту не авторизированым то видно коментарии и оценка файлов работает. Помогите решить эту проблему, а то у меня скоро крыша поедит!!!
  • 15 Февраля 2010 23:06
    Сергей
    помогите....
  • 23 Марта 2010 08:13
    StR
    Не думаю, что хранение пароля в сессиях это хорошая идея...
  • 2 Апреля 2010 08:42
    JohnBraxton
    А кто подскажет где прописывать учетку к базе messages???
  • 14 Апреля 2010 18:43
    JohnBraxton
    Я разобрался.... В этом уроке ошибка!!! >>>"Далее необходимо создать базу, в которой будут храниться личные сообщения, назовем ее “messages”. Какие поля нам нужны для этого?"<<< Не базу нужно создавать а таблицу в базе регистрации... Но все равно спасибо автору!!!!!
  • 19 Мая 2010 21:48
    djnex
    Неучтён и ещё один момент. Если пользователь будет вводить свои данные больше минуты, или даже пользователь зайдёт на reg.php в 59 секунд всё быстро введёт и тыкнет зарегестрироватся то коды несовпадут! Бородатый скрипт, болт тебе
  • 2 Июня 2010 14:21
    Mihail
    Как сделать чтобы на странице пользователя отображались исходящие сообщения другим пользователям? а не только входящие
  • 18 Июля 2010 15:29
    kotor
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\localhost\www\kotor\tio1\page.php on line 74 Почитал комменты, видимо как люди уже как то решили это проблему, но тут решили не постить. Если не сложно - обьясните icq 486254964
  • 8 Августа 2010 18:39
    alex
    У меня вот какая парилка: Регистрацию прохожу нормально, при возвращении открываетса то самое окно, что и до неё, а в базе запись появляетса. Ктото здесь писал, что нужно удалить шифровку пароля. Сделал. Теперь регистрируюсь, перехожу по ссылке на главную, то самое,(даже вводил сверяясь с базой пароль и логин) только резко мигает окно(грузитса обработчик testreg) и говорит, что неизвестный символ save в файле testreg, примерно через 1 секунду пропадает и грузитса index.php, материтса что я гость.
  • 27 Августа 2010 12:22
    BlueWolf
    Нашёл уязвимость. Вместо аватара можно загрузить всё что угодно. dfg.gdgd.jpg.php - вот этот файл загрузился. Правда во время загрузки у меня появлялись ошибки но файл все равно загрузился
  • 10 Сентября 2010 17:04
    Yura
    Помогите, у меня вылезла ошибка: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\www\phpsite\www\phpblog\index.php:1) in C:\www\phpsite\www\phpblog\blogs\lefttd.php on line 3 в этой линии находиться session_start();
  • 8 Октября 2010 21:01
    ggreno
    Спасибо за урок! Работает идеально:)
  • 16 Октября 2010 02:16
    onzone
    Капча не правильно работает, такой тип регистрации не достаточно надёжен (сам начинал с неё), те кто не новичёк рекомендую пользоваться фреймворками или PEAR. Народ используйте регу эту только для обучения!
  • 16 Октября 2010 02:18
    onzone
    p.s много лишнего кода в реализации!
  • 17 Октября 2010 21:49
    Антон
    всем доброе время суток! А как сделать чтоб например на какой то из страниц ограничить доступ не автоматизированным пользователям
    • 21 Ноября 2010 18:36
      kot
      Проверяешь, существует ли переменная $_SESSION['login'] и $_SESSION['password']. Если существует, значит пользователь вошел и ему можно чтото там показывать; если нет, то нет)
  • 31 Октября 2010 17:31
    hexeditor
    Классно! Спасибо!
  • 7 Ноября 2010 14:30
    feike
    Регистрация проходит успешно, Но авторизироватся не выходит, "Извините, введённый вами логин или пароль неверный." в чём беда?
    • 21 Ноября 2010 18:39
      kot
      У меня была такая проболема из-за того, что в базе данных ограничение на количество символов в поле password "обрезало" зашифрованный пароль. Не жмотитесь и поставьте количество 50, или больше. Пароль в зашифрованомм виде значительно длиннее!!!
  • 6 Декабря 2010 00:19
    delphi
    пхп по умолчанию будет поставлять к ссылкам PHPSESSID, что - согласистесь - может не сильно понравится поисковику, который, по слухам, и так-то динамические ссылки не жалует, а тут вообще при каждом заходе - новый адрес! Если сессии используются для ограничения доступа к закрытому разделу сайта, то все просто поисковик и не должен его индексировать. Если же приходится показывать одну и ту же страницу как авторизованным, так и не авторизованным пользователям то возникнут проблммы с индексацией ?! Не так-ли ???
  • 22 Декабря 2010 12:03
    nasty88
    Подскажите пожалуйста,у меня выскакивает ошибка при создании файла allusers.php в строках do{printf ("<a href='page.phpid=%s'>%s</a><br>",$myrow['id'],$myrow['login']; } while($myrow = mysql_fetch_array($result)); в чем может быть проблема? спасибо заранее
  • 3 Января 2011 04:22
    Alex_Asall
    У Меня такая беда. Хочу использовать часть обработчика. Часть которая отвечает за обновление аватарки. Мне надо просто обновить картинки. функция unlink не работает. пишет что:
    Warning: unlink() [function.unlink]: Invalid argument in line 45
    Подскажите в чём проблема... ПЛЗ
    $img = "data/no_image.jpg";
    if (isset($_FILES['fupload']['name'])) //отправлялась ли переменная {
    if (empty($_FILES['fupload']['name']))
    {
    //если переменная пустая (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку
    $image = "data/no_image.jpg"; //можете нарисовать no_image.jpg или взять в исходниках
    $resultImg = mysql_query("SELECT image FROM datas WHERE id='$id'",$db);//извлекаем текущий изображения
    $myrowImg = mysql_fetch_array($resultImg);
    if ($myrowImg['image'] == $img) {//если аватар был стандартный, то не удаляем его, ведь у на одна картинка на всех.
    $ava = 1;
    }
    else {unlink ($myrowImg['image']);}//если изображение было своё, то удаляем его, затем поставим стандарт
    }
    else
    {
    //иначе - загружаем изображение пользователя для обновления
    $path_to_90_directory = 'data/';//папка, куда будет загружаться начальная картинка и ее сжатая копия
    if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения {	$filename = $_FILES['fupload']['name'];	$source = $_FILES['fupload']['tmp_name'];	$target = $path_to_90_directory . $filename;	move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory	if(preg_match('/[.](GIF)|(gif)$/', $filename)) {	$im = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия	}	if(preg_match('/[.](PNG)|(png)$/', $filename)) {	$im = imagecreatefrompng($path_to_90_directory.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия	}	if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {	$im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия	}
    // Создание квадрата 400x400
    // dest - результирующее изображение
    // w - ширина изображения
    // ratio - коэффициент пропорциональности
    $w = 400; // квадратная 400x400. Можно поставить и другой размер.
    // создаём исходное изображение на основе
    // исходного файла и определяем его размеры
    $w_src = imagesx($im); //вычисляем ширину
    $h_src = imagesy($im); //вычисляем высоту изображения // создаём пустую квадратную картинку // важно именно truecolor!, иначе будем иметь 8-битный результат $dest = imagecreatetruecolor($w,$w); // вырезаем квадратную серединку по x, если фото горизонтальное if ($w_src>$h_src) imagecopyresampled($dest, $im, 0, 0, round((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); // вырезаем квадратную верхушку по y, // если фото вертикальное (хотя можно тоже серединку) if ($w_src<$h_src) imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); // квадратная картинка масштабируется без вырезок if ($w_src==$h_src) imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
    $date=time(); //вычисляем время в настоящий момент.
    imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.
    //почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.
    $image = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.
    $delfull = $path_to_90_directory.$filename;
    unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.
    $resultImg = mysql_query("SELECT image FROM datas WHERE id='$id'",$db);//извлекаем текущее изображение
    $myrowImg = mysql_fetch_array($resultImg);
    if ($myrowImg['image'] == $img) {//если он стандартный, то не удаляем его, ведь у нас одна картинка на всех.
    $ava = 1;
    }
    else {unlink ($myrowImg['image']);}//если изображение было своё, то удаляем его
    }
    else {	//в случае несоответствия формата, выдаем соответствующее сообщение exit ("Изображение должено быть в формате <strong>JPG,GIF или PNG</strong>");	}
    }
    $resultUPD = mysql_query("UPDATE datas SET image='$image' WHERE id='$id'",$db);//обновляем изображение в базе
    if ($resultUPD=='TRUE') {//если верно, то отправляем на личную страничку
    echo "<p class='good' align='center'>Вы успешно обновили изменения!<br>";
    } }
  • 14 Января 2011 10:06
    JRipper
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in B:\home\guerilla.clan.ru\www\testreg.php on line 36 Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in B:\home\guerilla.clan.ru\www\testreg.php on line 60 Что это за ошибка и как её решить?
  • 6 Февраля 2011 16:50
    zorg84
    /*Огромная просьба подскажите что делать - у меня проблема с куками браузера всё работает кроме них выбивает ошибку warning: Cannot modify header information - headers already sent by (output started at Y:\home\localhost\www\phpsite\blocks\bd.php) in Y:\home\localhost\www\phpsite\testreg.php on line 89 потом нормальна загружается страница но не чего не сохранилась куках приходится лог и пароль при входе водить заново. Всё проверил вроде всё как надо вот часть php кода: //Далее мы запоминаем данные в куки, для последующего входа. //ВНИМАНИЕ!!! ДЕЛАЙТЕ ЭТО НА ВАШЕ УСМОТРЕНИЕ, ТАК КАК ДАННЫЕ ХРАНЯТСЯ В КУКАХ БЕЗ ШИФРОВКИ if (isset($_POST['save'])){ //Если пользователь хочет, чтобы его данные сохранились для последующего входа, то сохраняем в куках его браузера setcookie("login", $_POST["login"], time()+здесь девятки 7шт); setcookie("password", $_POST["password"], time()+ здесь девятки7шт);} } echo "<meta http-equiv='Refresh' content='0; URL=index.php'>";
    • 21 Июня 2011 17:08
      incore
      Ребята - ЗАПОМНИТЕ ЭТО ПРЕДУПРЕЖДЕНИЕ!!!А то намучаетесь как я в свое время :)
      warning: Cannot modify header information - headers already sent by (output started at Y:\home\localhost\www\phpsite\blocks\bd.php) in Y:\home\localhost\www\phpsite\testreg.php on line 89
      -Своими словами Хедер не может быть модифицирован потому что в bd.php уже стартонул вывод какой то информации.Заголовки могут отправлятся ТОЛЬКО ДО ВЫВОДА ЛЮБОЙ ИНФЫ - тоесть ДО ЛЮБОГО echo() и любого html тега...У тебя по идее стартует сессия но в файле bd.php уже раньше идет вывод какой то инфы...
  • 15 Марта 2011 05:14
    face2005
    все хорошо,но это только сырой материал; при внедрении его в сайт, у меня, допустим, в файле save_user.php, когда скрипт обрывается exit() заканчивается и не правая колонка и футтер уже не могут загрузиться/ как поступить? ЧТО ВСЕ ПЕРЕПИСЫВАТЬ? if else?
    • 8 Мая 2011 00:48
      trae
      Отличный урок)))) Всё пашит, большое спасибо)))))
  • 14 Мая 2011 17:25
    Виталий Южаков
    Подскажите пожалуйста, Как внедрить это все в дизайн? у меня когда срабатывает любой еxit ("Ошибка! Вы"... то после него ничего больше не выполняется....
    • 11 Июня 2011 22:05
      Malomuzh
      Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\moi-faily-php\save_user.php on line 177 Ошибка! Вы не зарегистрированы. Вот такая ошибка... Подскажите простыми словами что делать, я человек не опытный, голову ломаю уже довольно долго...
      • 4 Октября 2011 10:32
        Slonoritsar
        посмотри ошибку в 177 строке и учись пользоваться переводчиком!
    • 16 Июня 2011 02:13
      Malomuzh
      Толи я что то не догоняю, объясните, мы в файле testreg.php обращаемся в проверке к таблице oshibka, будьте любезны, где показано создание этой таблице или вообще упоминание, кроме того что она в коде...
    • 21 Июня 2011 16:49
      incore
      :))) Пацаны - не тупите! После функции EXIT() прекращается работа скрипта!!!Всё что идет после EXIT() НЕ ВЫПОЛНЯЕТСЯ.Или убирайте EXIT... Или попробуйте таким макаром
      exit(include('right.php');include('footer.php'))
      Но это не лучшее решение - может вёрстку нарушить.Лучше логику переписать.
      • 27 Июля 2013 23:28
        Віталій Гордій
        можна else{exit();}
  • 20 Июня 2011 10:12
    muha10
    Единственное, на аватарку когда указываю фотку, если она достигает примерно 5 mb, и выше, выдает ошибку, и не обрабатывается, после просто черный фон. Warning: imagecreatefrompng(avatars/SAM_0435.png) [function.imagecreatefrompng]: failed to open stream: No such file or directory in Z:\home\localhost\www\pk2\update_user.php on line 122 , а за ней уже и следующие около 4-ех ошибок из за нее ...
    • 21 Июня 2011 16:37
      incore
      при передачи файлов или фоток - в настройках PHP в конфиг файле php.ini есть директива:
      upload_max_filesize = 2M 
      и директива
      post_max_size = 8M
      Они влияют на размер отсылаемых файлов.Если будешь пытаться отослать больше то будет вылетать ошибка.Если хочешь больше - нужно менять размер в директивах.
  • 21 Июня 2011 19:29
    incore
    Народ или я чего то не понимаю - но это даже каптчей назвать трудно. Может я чего то упустил - но генерировать символы и не запихнуть их в JPG картинку(это делается двумя строчками кода) не имеет никакого смысла.При парсинге исходного кода робот легко и непринужденно вытянет эти символы. А из графического формата наврядли.Если такой подход - то лучше уже какую то арифметическую операцию, хотя тоже не надежно.За каптчу автору - минус...
  • 21 Июня 2011 19:32
    incore
    Если нужна норм. каптча - стучитесь incorelll@gmail.com И Вам откроют :)))
  • 28 Июня 2011 15:14
    KostyaKoz
    Кто-нибудь заметил что личные сообщения отправляются только на анг. языке? Русске игнорируются... просто не добавляются в базу...
    • 4 Октября 2011 10:30
      Slonoritsar
      ну дык сделай в базе многоязычную кодировку!
  • 2 Июля 2011 19:32
    shahin25
    Не могу создать кто онлайн помогите плиз!
  • 20 Июля 2011 11:18
    sanekt1997
    а как он насчёт безопасности???
  • 5 Августа 2011 13:14
    alextx
    Интересует вопрос: Например имеется страница index.php с таблицей в две ячейки, в которой инклюдятся menu.php (там выдаются определенные ссылки в зависимости от того, зашел ли пользователь) и stranica.php, которая инклюдит страницы в зависимости от того, какая ссылка была нажата. Например нажимаем в menu.php на ссылку "Моя страница" и stranica.php показывает page.php.(ну и так далее с post.php, all_users.php и др.). Обязательно ли в каждой странице, которые инклюдит stranica.php прописывать проверку на существование логина и пароля в сессиях? Или можно прописать эту проверку где-нибудь один раз (и где)?
  • 12 Августа 2011 05:52
    Slonoritsar
    Если у кого-то не отправляются лс, то назначьте id(11) первичный ключ. Советую код копировать из исходников, а не из уроков.
  • 14 Августа 2011 22:39
    satanenek
    Спасибо автору за уроки, пока все О.К. Учший учебник по РНР-!
  • 6 Октября 2011 11:16
    Jarptitsa
    Спасибо! я пока не встречала лучше уроков. Создала свой сайт. Теперь совершенствую.
  • 12 Октября 2011 19:55
    Артем Романько
    Нашел косяк в уроке: когда меняешь себе логин, в базе меняются логины авторов написанных тобой ЛСок! А вот все сообщения, которые тебе отправляли, ты больше не видишь(т.к. имя получателя со старого на новое мы не меняем). Нашел решение, в update_user.php: найдите такое: if ($result4=='TRUE') { mysql_query("UPDATE messages SET author='$login' WHERE author='$old_login'",$db); И ПОСЛЕ этих двух строк поставьте: mysql_query("UPDATE messages SET poluchatel='$login' WHERE poluchatel='$old_login'",$db); проверено - работает
  • 13 Октября 2011 17:04
    vchv
    Все супер! но не могу решить следующую проблему: когда меняю путь к папке в которой необходимо сохранить аватар пользователя выскакивает ошибка : Warning: move_uploaded_file(registr/avatars/logo.gif) [function.move-uploaded-file]: failed to open stream: No such file or directory in L:\home\localhost\www\avtomenedger.ru\registr\save_user.php on line 109 В строке 109 записано следующее: move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory все пробелы и прочее проверил!!! Помогите а то свихнусь
    • 18 Октября 2011 11:25
      Slonoritsar
      нет такого файла или каталога - цитата из ошибки. создай этот каталог, права задай 777.
  • 6 Ноября 2011 23:55
    yurri_87
    здравствуйте, скопировал исходники, на странице page.php выдает: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\localhost\www\lichniykabinet\page.php on line 47. Подскажите, пожалуйста, с чем это связано! строка 47 содержит: if ($myrow['login'] == $login) {
    • 11 Ноября 2011 11:10
      Slonoritsar
      А ты переменные создал перед условием?
    • 18 Мая 2012 17:39
      Алекс Борник
      если вылетает ошибка: "Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in" надо просто убрать пробелы перед и после операторов HERE т.е. он должен быть написан сначала строки и после него не должно быть пробелов...
    • 27 Июля 2013 23:03
      Віталій Гордій
      Перевір, трохи нижчі чи вижчі рядки за 47, в мене буває що пише так, а помилка на наприклад 50
  • 15 Ноября 2011 11:48
    Lorens
    Спасибо большое за замечательные уроки! Все прекрасно работает, правдо в некоторых местах пришлось покопаться)) но сейчас все хорошо. Отлично написан урок, все понятно и расписано!
  • 16 Ноября 2011 09:02
    esque
    Парни, а как убрать капчу вообще чтобы ее не было?
    • 27 Июля 2013 22:59
      Віталій Гордій
      Забираєш код з капчою.
  • 23 Ноября 2011 00:53
    Tookie
    Здравствуйте, у меня проблема. На сайте не отображает my_codegen.php . Висит пустая форма с надписью "Изображение". В firebug выдало, что "Не возможно загрузить указанный URL ". В чем может быть проблема?
  • 23 Ноября 2011 02:56
    elgerd
    Все здорово получилось. Ошибки при создании могут быть при: 1. Не создали базу данных корректно (перепроверьте). 2. Не рекомендую использовать print <<<HERE т.к. он капризный,а в место него printf(" <a href 'www.....'> </a>");
    • 9 Декабря 2011 13:40
      Slonoritsar
      используй всегда echo или print
  • 19 Декабря 2011 19:29
    x2z72q
    подскажите что делать когда хочу зайти на мою страницу пишет "Пользователя не существует! Возможно он был удален." и когда хочешь зайти к другому пользователю тоже самое пишет ну и сообщения не могу отправлять... как это все исправить?
  • 19 Декабря 2011 22:46
    AnastaAra
    Люди, прошу вас, помогите мне. я пишу курсовую по созданию динамического сайта... допустила ошибки и не знаю как их исправить...(((( у кого доброе и понимающее сердце, кто готов мне помочь, отпишитесь Моя почта: AnastaAra@yandex.ru. Не оставайтесь равнодушными(((
  • 9 Января 2012 18:13
    sigrosigro
    imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
    Сжатые аватарки выходят очень плохого качества. Тут что то можно поменять, что бы этого избежать или где подправить.. Подскажите.
  • 4 Февраля 2012 21:06
    radjab
    помогите у меня проблема .у меня регестрация проходит нормально но когда пришу логин и пароль и пытаюсь зайти у меня появляется пустая страница с такими надписями Р’С‹ набрали логин или пароль неверно 3 раза. Подождите 15 РјРёРЅСѓС‚ РґРѕ следующей попытки.хоть правильный пароль хоть нет без разницы .файл testreg.php,
  • 7 Февраля 2012 15:18
    v_dmytro
    Спасибо за урок! :)
  • 10 Февраля 2012 10:26
    DamirKamilevich
    По поводу картинки при авторизации: А если пользователь будет долго заполнять регистрационную форму? Тогда ведь минуты или даже чаты изменятся и код не будет соответствовать картинке. $hours = date("H"); / час $minuts = substr(date("H"), 0 , 1);/ минута может лучше передавать переменные вместе с регистрационными данными?
  • 10 Февраля 2012 18:18
    balyuk9
    У меня не работает файл index.php в І части работает а втретей нет в чом проблема?
  • 11 Февраля 2012 04:22
    in9emix
    Благодарю за полезную информацию, почти на все свои вопросы нахожу ответы только на этом сайте и из ваших видео. Евгений Попов вам отдельное спасибо за ваш проект!
  • 14 Февраля 2012 00:48
    Серёга Криволай
    Скажите пожалуйста у меня после входа на главной странице выводится профиль а на остальных опять показывает блок с формой входа.То есть профиль отображается только на главной странице,как это исправить?
  • 27 Февраля 2012 19:21
    ygolkova
    Подскажите пожалуйста, можно ли, как факт, каким-то образом в таблицу users вносить данные из vkontakte, добавив ссылку "войти через vkontakte".
  • 5 Марта 2012 23:21
    yuraklecov
    после даблицы phpmyadmin к какому файлу относится CREATE TABLE messages ?
  • 29 Марта 2012 20:05
    Иван ...
    Почему когда я ввожу правильный код с картинки всё равно надпись что он не правильный?
  • 13 Июня 2012 21:13
    Карен
    Все работает
  • 1 Июля 2012 17:58
    maxooo
    Боюсь что не засыплю вас похвалами, скорее наоборот, одно использование md5 уже дает представления, на хабре еще дальше пошли ОНИ 2 раза md5 подряд использовали в своем уроке, со словами что это ломать 1000 лет.. Не самый лучший вариант набора функций подобран, также шаблонизация скорее номинальная. Боже мой вы три чудовищные по размеру станицы выложили, зачем вообще? Весь код понимается кручением колесика по кд. Даже с готовым решением масса проблем, помимо того что mysql чистый запрос написан только на добавление таблички, но и когда происходит проверка (регистрации или просто логин) и если ты не завел ручками себе на ПхпМайАдмин пользователя и еще подобрав мд5, то это еще не факт что ты зарегишься, вообщем потратил минут 10-15 на это бесполезное занятие.
  • 4 Июля 2012 13:25
    geometrik
    Здравствуйте! Всё отлично работает, только русский не отображается в mysql и при отправке сообщений между пользователями!Вместо русского "?????" mysql_query("SET NAMES 'cp1251'") - Не помогает! Подскажите, пожалуйста, как это исправить!
    • 15 Июля 2012 07:33
      Неподарок
      geometrik, мне помогло это - в файле bd.php пропиши mysql_query("SET NAMES 'cp1251'") после команды connect
  • 6 Июля 2012 14:59
    valentin_29
    Здравствуйте! А как сделать чтобы в page пользователь кроме входящих видел ещё отправленные письма?
  • 27 Июля 2012 22:08
    geka3331
    <? print <<<HERE У меня в этой функции не отображается форма, подскажите в чем дело, или альтернативу функции HERE. Спасибо!!! HERE; ?>
  • 13 Августа 2012 22:28
    JeiQst
    круто очень класно спасибо вам за уроки
  • 8 Октября 2012 12:18
    saifuddin
    Почему вы не используете PDO? Только написали пару статей о нем и все. Сейчас все на него переходят. Даже все книги 2012 года уже на PDO перешли.
  • 7 Ноября 2012 18:12
    emin_est
    на локальном сервере при регистрации пользователя генерирование кода проходит без проблем, но при расположении сайта в интернете, картинка с кодом исчезает. Пожалуйста помогите решить эту проблему... $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; define("code_dir", $DOCUMENT_ROOT."/code/my_codegen/"); - этот вариант не рабочий
  • 11 Ноября 2012 13:50
    igontarev
    Офигенный урок!
  • 24 Ноября 2012 00:50
    Gev4ik
    Знаете вам всем так классно блин. А у меня вообще не получаеться.. Такое чуство что я кривой. Не с регистрцией, не с поиском. Это пипец! Но, уроки мне очень понравились. :) Вроде создал дизайн, сделал все по уроку, но нечего. Все одно и тоже... Позор)
  • 25 Ноября 2012 21:49
    BigDog
    Всем привет, вроде всё получилось только, почему то сообщения не добавляются в БД, но пишет, что Ваше сообщение передано! Вы будете перемещены через 5 сек. Если не хотите ждать, то нажмите сюда. А когда я захожу в БД в таблице НОЛЬ ЗАПИСЕЙ, почему так ?
    • 6 Декабря 2012 23:58
      dosent
      BigDog, скорей всего ты в БД поставил для поля text значение integer, поменяй на text
  • 20 Декабря 2012 20:19
    Chane
    Как сделать так, чтобы после прихода нового сообщения пункт "Сообщения" выделялся жирным или чтобы возле него появлялся какой-то символ? В общем, чтобы было видно, что пришло новое сообщение.
  • 30 Декабря 2012 03:06
    Neopitnaya
    ПОМОГИТЕ!!!!! По первому уроку-всё работало, а теперь зарегистрироваться возможно, а войти- НЕТ! При этом в БД все значения есть: и зашифрованый пароль, и аватар... В чем причина?! Подскажите, пожалуйста! testreg.php отвечает: Извините, введённый вами логин или пароль неверный.
  • 1 Января 2013 10:58
    Neopitnaya
    С Наступившим всех! Ну сс... Кто же мне поможет в этом году с моим вопросом??
  • 5 Февраля 2013 01:11
    Clez_h
    Neopitnaya -> по моему тут уже был похожий случай, проверьте в СУБД длину значения password и выставьте 255
    • 18 Февраля 2013 17:54
      dark_ignorance
      Плииз помогите , ответе на мой вопрос ... Ниже ...
  • 5 Февраля 2013 15:22
    krashaen
    Всем привет!!! у меня такая ошибка вылазит если выбрать аватар больше 2 мегабайт. Подскажите пожалуйста как сделать чтобы выдовало не эту ошибку а окно или текст "размер вашей картинки слишком большой" Warning: imagecreatefromjpeg(avatars/DSC01924.JPG): failed to open stream: No such file or directory in z:\home\krash\www\update_user.php on line 126 Warning: imagesx(): supplied argument is not a valid Image resource in z:\home\krash\www\update_user.php on line 140 Warning: imagesy(): supplied argument is not a valid Image resource in z:\home\krash\www\update_user.php on line 141 Warning: imagecopyresampled(): supplied argument is not a valid Image resource in z:\home\krash\www\update_user.php on line 161 Warning: unlink(avatars/DSC01924.JPG): No such file or directory in z:\home\krash\www\update_user.php on line 172 Ваша аватарка изменена! Вы будете перемещены через 5 сек. Если не хотите ждать, то нажмите сюда.
    • 18 Февраля 2013 17:18
      dark_ignorance
      Здравствуйте, у меня нелепая проблема ... У меня не заливается база, из-за вот этого в каждой таблице TYPE=MyISAM AUTO_INCREMENT=8' at line 8 А в ручную лень прописывать каждую таблицу ((( Помогите плиз ... Зависит ли это из-за версии базы ? ( navicat ) например ?
      • 27 Июля 2013 22:57
        Віталій Гордій
        Лінь - буде нічого доброго не напишеш.
  • 5 Марта 2013 20:45
    fonKluv
    Спасибо классный урок все получилось, только сообщения почемуто можно только латынью писать, а русский шрифт не отображается ((. Как сделать чтобы русский шрифт передавался???
  • 23 Марта 2013 13:11
    vladimirrudnik
    Люди добрые помогите, при авторизации пишет следующие, Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\files\testreg.php on line 36 Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\files\testreg.php on line 60 Извините, введённый вами логин или пароль неверный. Что делать скажите плиз ?
  • 25 Марта 2013 16:44
    vladimirrudnik
    А нет спасибо разобрался, но вот беда что делать с "Извините, введённый вами логин или пароль неверный" всё побывал и 255 ставил в значение и ошибки в бд смотрел , что делать то ?
  • 29 Марта 2013 15:52
    vladimirrudnik
    Люди со всем разобрался, ошибок в коде и базе нет , значит ошибки у вас в БД, стучите в skype vovan13084 и вам ответят добрые люди =)
  • 11 Апреля 2013 12:04
    kameronden
    Пожалуйста подскажите, что не так... вроде все перепробовал... Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\home\localhost\www\test7\page.php on line 46
  • 10 Июля 2013 23:35
    b_b_bob
    ВСЕ ПОЛУЧИЛОСЬ, ВСЕ РАБОТАЕТ, ПИШИТЕ ЕСЛИ ЕСТЬ ВОПРОСЫ, Я СМОТРЮ МНОГИЕ НЕ МОГУТ РАЗОБРАТЬСЯ! http://vk.com/argyn_inc (Буду рад помочь)
  • 19 Июля 2013 15:59
    pasha57
    Ребят, как сделать, что бы после нажатия на кнопку Вход, пользователь попадал сразу на страницу page.php?
    • 27 Июля 2013 22:55
      Віталій Гордій
      Нічого не набираючи?/Если нечего не набирает?
  • 22 Июля 2013 13:22
    EuRo123
    кому нужно помочь пишите сюда san4ob148@gmail.com или в скайп san4o123123
  • 27 Июля 2013 22:52
    Віталій Гордій
    Шифруйте паролі: $password = sha1($password); $password = md5($password); $password = sha1($password);
    • 10 Августа 2013 16:51
      denis доброчинский
      добавти фото можно было много загружать на сайт
  • 18 Августа 2013 02:21
    b_b_bob
    ВСЕ ПОЛУЧИЛОСЬ, ВСЕ РАБОТАЕТ, ПИШИТЕ ЕСЛИ ЕСТЬ ВОПРОСЫ, Я СМОТРЮ МНОГИЕ НЕ МОГУТ РАЗОБРАТЬСЯ! http://vk.com/argyn_inc (Буду рад помочь)
  • 5 Октября 2013 17:40
    yuriy5022
    сообщения другому пользователю не высвечиваетс у другово пользователя
  • 2 Ноября 2013 09:58
    VinyFob
    author мы поменяли в таблице messages при изменении логина, а poluchatel забыли:)
  • 18 Ноября 2013 00:25
    Appleshout
    Помогите пожалуйста с такой проблемой: Переписал скрипт регистрации с 1-ого урока по 3-тий, остановился на генерировании случайного кода перед регистрацией, всё отлично, ошибок нет, вот только ни кода, ни картинки не видно. В следствии чего - регистрацию нового пользователя не пройти. До этого момента никаких капризов не возникало. Все пути к файлам перепроверил, синтаксис правильный, в чём может быть проблема?
  • 1 Декабря 2013 09:58
    immortalstrannik
    Какая то ошибка в файле update_user , у меня не загружает изображения, выдаёт ошибки Warning: imagecreatefromgif() [function.imagecreatefromgif]: 'avatars/Я.gif' is not a valid GIF file in S:\home\pisma.ru\www\update_user.php on line 129 Warning: imagesx() expects parameter 1 to be resource, boolean given in S:\home\pisma.ru\www\update_user.php on line 150 Warning: imagesy() expects parameter 1 to be resource, boolean given in S:\home\pisma.ru\www\update_user.php on line 151 Warning: imagecopyresampled() expects parameter 2 to be resource, boolean given in S:\home\pisma.ru\www\update_user.php on line 171 А в конце загружает чёрный квадрат, я от них избавился когда поменял в файле php.ini несколько строчек: upload_max_filesize = 8M max_file_uploads = 8 Ошибка исчезла, но по прежнему загружает чёрный квадрат. Помогите кто чем может, заранее благодарен.
  • 11 Января 2014 18:11
    anyta2911
    здрастауйте подскажите пожалуста сделала все как написано у меня писалась ошибка потом скачала исходники то когда регистрирусь пишет что вы успешно зарегистрировались можете зайти на главную страничку а когда регистрируюсь пишет что вы вели не правельный логин или пароль в чем ошибка помогите пожалуста очень классный урок и очень хочу себе сделать
  • 12 Января 2014 17:55
    sasharuan
    подскажите пож голова закипает как вывести контент после того как человек зарегелся. Уменя есть контент как у незарегестрированного а как только регестрация проходит контент исчезает?
    • 6 Июля 2014 13:01
      Krab007
      та же проблема ((
  • 24 Января 2014 22:16
    wwwwwwww21344 1d24s2
    Потому-что У*БАНЫ! НЕ РАБОТАЕТ НИ*УЯ СО ВТОРОЙ СТАТЬИ!
  • 25 Марта 2014 20:16
    den_pro8
    Вход не как не удаётся хоть и логин и пароль верные, но в БД все данные заносятся и картинки грузятся в нужную папку в чём проблема?
  • 20 Мая 2014 16:14
    Kletuss
    Буду весьма признателен если кто-то поможет мне. Делала по примеру но почему-то не работает. session_start(); include ("vklbd.php"); if (isset ($_GET ['id'])) { $id = $_GET['id']; } else { exit ("Вы зашли на страницу без параметра!"); } if (!preg_match ("|^[\d]+$|", $id)) { exit ("<p> Invalid request format! Check URL </p>"); } if (!empty ($_SESSION['user_name']) and !empty($_SESSION['pass'])) { Не в какую не хочет принимать параметр и пишет что"Вы зашли на страницу без параметра!"
  • 23 Мая 2014 01:10
    pladzuma
    такое вот выходит на всех страницах,чё делать не знаю
    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\site.com\www\index.php on line 36
  • 27 Июля 2014 02:32
    denispavloff
    Помогите справить ошибку Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\test3\save_user.php on line 199
    • 17 Августа 2014 12:39
      Sweet *_*
      Проверьте пожалуйста Вашу Базу данных(именно таблицу) на строке 199 Или саму базу, может там Вы ошиблись.
  • 30 Июля 2014 17:06
    Ximik20014
    Ребят я чайник) подскажите мне плиз) Вот я запускаю у меня в се норм но с верку огромная такая надпись-Warning: session_start(): Cannot send session cookie - headers already sent in C:\Program Files\MySQL\MySQL Server 5.6\index.php on line 3 Call Stack: 0.0008 338936 1. {main}() C:\Program Files\MySQL\MySQL Server 5.6\index.php:0 0.0009 338968 2. session_start() C:\Program Files\MySQL\MySQL Server 5.6\index.php:3 Warning: session_start(): Cannot send session cache limiter - headers already sent in C:\Program Files\MySQL\MySQL Server 5.6\index.php on line 3 Call Stack: 0.0008 338936 1. {main}() C:\Program Files\MySQL\MySQL Server 5.6\index.php:0 0.0009 338968 2. session_start() C:\Program Files\MySQL\MySQL Server 5.6\index.php:3 Warning: mysql_connect(): Access denied for user 'user'@'localhost' (using password: YES) in C:\Program Files\MySQL\MySQL Server 5.6\bd.php on line 2 Call Stack: 0.0008 338936 1. {main}() C:\Program Files\MySQL\MySQL Server 5.6\index.php:0 0.0014 341672 2. include('C:\Program Files\MySQL\MySQL Server 5.6\bd.php') C:\Program Files\MySQL\MySQL Server 5.6\index.php:5 0.0014 341856 3. mysql_connect() C:\Program Files\MySQL\MySQL Server 5.6\bd.php:2 Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in C:\Program Files\MySQL\MySQL Server 5.6\bd.php on line 3 Call Stack: 0.0008 338936 1. {main}() C:\Program Files\MySQL\MySQL Server 5.6\index.php:0 0.0014 341672 2. include('C:\Program Files\MySQL\MySQL Server 5.6\bd.php') C:\Program Files\MySQL\MySQL Server 5.6\index.php:5 0.0152 341904 3. mysql_select_db() C:\Program Files\MySQL\MySQL Server 5.6\bd.php:3. ЭТО НОРМАЛЬНО (НА САЙТЕ НЕ БУДЕТ ВИДНО?) И ЧТО МНЕ НАДО ДЕЛАТЬ? заранее спс!!)
    • 17 Августа 2014 12:35
      Sweet *_*
      Во-первых: Вам необходимо купить видеокурсы у Евгения Попова - там есть все ответы. Во вторых, чтобы перечислить все Ваши ошибки, нужно 1. Сменить кодировку на utf8 без BOM 2. Исправьте там где include ваш путь к bd.php 3. Исправить базу данных( ваш файл - bd.php)(проверьте правильно ли Вы написали данные логин пароль и т.д)
      • 20 Августа 2015 17:04
        alex3c04
        Самое главное не забыли посоветовать купить курсы...
  • 17 Августа 2014 12:25
    Sweet *_*
    Я исправил удалить комм пож
    • 20 Февраля 2015 18:48
      nevus
      при логине зарегистрированного пользователя выдаёт:Извините, введённый вами логин или пароль неверный. Подскажите,что не так
  • 1 Декабря 2014 22:45
    Prytula
    Подскажите где ошибка в файле testreg.php???
    Выдает:
    Подключение к базе ОВА.php установлено!
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in R:\home\ОВА.php.ru\www\registration\testreg.php on line 36
    Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given in R:\home\ОВА.php.ru\www\registration\testreg.php on line 60
    Извините, введённый вами логин или пароль неверный.
    ПАРОЛЬ И ЛОГИНА 100% ПРАВЕЛЬНЫЕ!!!
    
  • 12 Апреля 2015 10:36
    altymyshev_vk
    Друзья работайте на настоящем сервере ! Домен в зоне ru всего стоит 100 рублей, а сервер за месяц 60 рублей ( тарифный план СТАРТ 500 Мб пространства ) вот ссылка на где Вы можете зарегистрировать свой домен и хостинг http://hostline.ru/index/partner/id/91993 ( пожалуйста перейдите по полному точному адресу, просто мне потом дадут бонусы разные )
  • 15 Мая 2015 12:19
    Richardok
    помогите пожалуйста внедрить на сайт
  • 30 Июня 2015 18:03
    Kavery
    Всем привет! Помогите, пожалуйста. У меня такая ошибка в bd.php: Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u355405157/public_html/bd.php on line 2
  • 18 Августа 2015 02:01
    ArtyomS
    Здравствуйте, такой вопрос на счёт сообщений отправляемых пользователем - у меня при отправке всё хорошо - всё складно работает, но другой пользователь не получает их(( что я сделал не так?
    • 20 Августа 2015 17:00
      alex3c04
      А случилось то, что смотрящие за этой темой положили на ваши проблемы. Скрипт писался давно, с учётом старой версии БД и ранних версий php, отсюда и косяки. А что самое интересное никто ни чего не исправляет и на вопросы о проблемах в скрипте, молчат. Эй!!! Администрация данного сайта, вы если ведете проект, то хотябы комментарии наладте, сделайте так чтобы новые комментарии отображались в начале области комментирования, а не так чтобы километр надо было мотать с 2009 г. комментариев до хреналионного года новых комментариев. Скрипт действительно хорош, но вот поддержка...как всегда занята, наверное спасает мир, зарабатывая миллионы. Вы если обозвались сайтом для обучения... то обучайте, а так запихните неподдерживаемые темы в архив и не выпендривайтесь. Фух, я все сказал)))
  • 1 Февраля 2016 20:39
    weyner
    Всем привет, может кто-то уже сталкивался, как прикрутить уведомление о новом сообщении, у меня получилось сделать общие колличество сообщений, т.е на личной стр. Мы смотрим сообщения а на другой, только уведомление о новых. Добавил в базу сообщений столбец"status" прикрутиль значение 0 при получении, но не могу ни как ее обновить на значение на 1 те прочитано, принцип и логику понимаю, а реализовать не могу, может поможет кто....
  • 28 Мая 2016 16:32
    Timofey72
    Помогите В Личных Сообщениях показывает только Английский текст. Как сделать, чтобы показывался Русский?
^ Наверх ^