Мод — Фотографии пользователей

При помощи этого мода , Ваши пользователи смогут загружать свои фотки себе в профиль . Так же есть страница на которой выводяться все фотки пользователей разом .
При загрузке , если фото больше размеров 800х600 пикселей , оно автоматом уменьшается (Размер можно изменить) , максимальный вес фотки 500 кб (тоже можно изменить). Поддерживаемые форматы — JPG, JPEG, GIF, PNG .
Модераторы и выше , могу удалять фотки пользователей на странице Фоток или из профиля пользователя .
Вообщем мод простенький , ничего сложного и мутного .

Для начала создайте папку photo в корне сайта , права на папку CHMOD 777 .
Далее создайте файл foto.php , в него впишите —

<?php
require "include/bittorrent.php";
dbconn();
loggedinorreturn();
function bark($text) {
stdhead("Ошибка");
stderr("Ошибка" , $text);
stdfoot();
die();
 
}
 
$act = $_GET['act'];
 
if(empty($act)) bark("Произошла ошибка", "");
 
////////////////////////////////////////////////////////////
//Добавление фотографии
/////////////////////////////////////////////////////////////
if($act == "add") {
 define ("MAX_SIZE","500"); // размер в кб !
 
 function getExtension($str) {
         $i = strrpos($str,".");
         if (!$i) { return ""; }
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
 }
 
	$errors=0;
	$image =$_FILES["foto"]["name"];
	$uploadedfile = $_FILES['foto']['tmp_name'];
	$ifilename = md5($CURUSER['id']) . substr($_FILES['foto']['name'], strlen($_FILES['foto']['name'])-4, 4);
    $sql = sql_query("SELECT photo FROM users WHERE id=".sqlesc($CURUSER['id'])." ");
    $arr = mysql_fetch_array($sql);
 
    if($arr[photo]) {
         @unlink("photo/".$arr['photo']."");
     }
 	if ($image) 
 	{
 
 		$filename = stripslashes($_FILES['foto']['name']);
  		$extension = getExtension($filename);
 		$extension = strtolower($extension);
 
 
 if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
 		{
 
		bark("Неверное имя фотографии (не картинка).");
 			$errors=1;
 		}
 		else
 		{
 
 
 $size=filesize($_FILES['foto']['tmp_name']);
 
if ($size > MAX_SIZE*1024)
{
        bark("Слишком большой размер картинки (макс.500kb)");
	$errors=1;
}
 if ($errors == "0"){
    $sql = sql_query("SELECT photo FROM users WHERE id=".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__);
    $arr = mysql_fetch_array($sql);
    if($arr[photo]) {
    @unlink("photo/".$arr['photo']."");
	@sql_query("UPDATE users SET photo = '' WHERE id=".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__);
	 }
}
if($extension=="jpg" || $extension=="jpeg" )
{
$uploadedfile = $_FILES['foto']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
 
}
else if($extension=="png")
{
$uploadedfile = $_FILES['foto']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
 
}
else 
{
$src = imagecreatefromgif($uploadedfile);
}
 
echo $scr;
 
 
define(MAX_WIDTH, 600); // ширина
define(MAX_HEIGHT,400); // высота
list($width,$height)=getimagesize($uploadedfile);
 
$scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height);
 
if ($scale < 1) {
if (($width > MAX_WIDTH) OR ($height > MAX_HEIGHT)) {
$new_width = floor($scale*$width);
$new_height = floor($scale*$height);
 
$tmp = imagecreatetruecolor($new_width, $new_height);
 
imagecopyresampled($tmp, $src, 0, 0, 0, 0,$new_width, $new_height, $width, $height);
}
} else {
$newwidth = $width;
$newheight = $height;
$tmp=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
}
$filename = "photo/". $ifilename;
 
 
imagejpeg($tmp,$filename,100);
imagedestroy($src);
imagedestroy($tmp);
}
}
else 
    bark("Вы не выбрали фотографию");
 
 if(!$errors) {
    sql_query("UPDATE users SET photo=".sqlesc($ifilename)." WHERE id=".sqlesc($CURUSER['id'])." ") or sqlerr(__FILE__, __LINE__);
	header("Location: my.php");}
}
 
elseif($act == "del") {
////////////////////////////////////////////////////////////
//Удаление фотографии
/////////////////////////////////////////////////////////////
$memcache_obj->delete('users_'.$CURUSER['id'],0);
$memcache_obj->delete('photo',0);
 
    $sql = sql_query("SELECT photo FROM users WHERE id=".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__);
    $arr = mysql_fetch_array($sql);
    if($arr[photo]) {
    @unlink("photo/".$arr['photo']."");
	@sql_query("UPDATE users SET photo = '' WHERE id=".sqlesc($CURUSER['id'])) or sqlerr(__FILE__, __LINE__);
	header("Location: my.php");
    }else {
        bark("Произошла ошибка в запросе!");
      }
} elseif($act == "deladmin")
{
	$id = (int)$_GET["id"];
 
	if(get_user_class() >= UC_MODERATOR)
	die('WTF ?');
    $sql = sql_query("SELECT photo FROM users WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__);
    $arr = mysql_fetch_array($sql);
    if($arr[photo]) {
    @unlink("photo/".$arr['photo']."");
	@sql_query("UPDATE users SET photo = '' WHERE id=".sqlesc($id)) or sqlerr(__FILE__, __LINE__);
	header("Location: photo.php");
    }else {
        bark("Произошла ошибка в запросе!");
      }
 
}
 else
 die('Че нах ???');
?>

Далее создайте файл photo.php , это будет фото галерея всех пользователей .

<?php
include "include/bittorrent.php";
dbconn();
gzip();
 
stdhead("Фотографии");
begin_main_frame();
?>
<link rel="stylesheet" type="text/css" href="fancybox/fancybox.css"/>
<script type="text/javascript" src="fancybox/fancybox.js"></script>
<script>
jQuery(document).ready(function() {
 jQuery("a.screen").fancybox({
 'overlayShow' : false,
 });
 });
 
</script>
<?
 
	begin_frame("Фотографии", true);
 
	$res1 = sql_query("SELECT COUNT(*) FROM users WHERE photo > '0'"); 
	$row1 = mysql_fetch_array($res1); 
	$count = $row1[0]; 
 
	$perpage = 9;
	list($pagertop, $pagerbottom, $limit) = pager($perpage, $count, $_SERVER["PHP_SELF"] . "?" ); 
	echo $pagertop; 
	$res = sql_query("SELECT id , username , class, photo FROM users WHERE photo > '0' $limit") or sqlerr(__FILE__, __LINE__);
	$perrow = 3; // Количество картинок в ряду
	$i = 0;
	echo '<table width="100%" cellspacing="5" cellpadding="5"><tr>';
	while($row=mysql_fetch_array($res)){
 
	echo "<td valign='center' align='center' class='brd' style='width:30%;padding:5px;'><noindex><a class=\"screen\" href=\"".$BASEURL."/photo/".$row['photo']."\"  >
	<img border=0 style='max-width:200px; max-height:160px' src=\"".$BASEURL."/photo/".$row['photo']."\" /></a></noindex><br>
	 Фото by <a href=userdetails.php?id=".$row['id'].">" .get_user_class_color($row["class"], htmlspecialchars_uni($row["username"]))."</a>";
	 if(get_user_class() =< UC_MODERATOR)
	 echo " - <a href='/foto.php?act=deladmin&id=".$row['id']."'>D</a>";
	 echo "</td>";
 
	$i++;
    if ($i == $perrow)
      {
        echo "</tr><tr>";
        $i = 0;
      }
 
}
echo '</tr></table>';
    echo $pagerbottom; 
end_frame();
end_main_frame();
stdfoot();
 
?>

Форма загрузки фоток , это вставте где нибудь в my.php

///////////////////////////////////////////
//////////////////////////////////////////
echo "<table width=100%  cellpadding='5'>";
	echo '<tr><td valign="center" style="width:300px;" align="center">';
	if($CURUSER['photo'] == "")
          print "<img src=\"pic/default_photo.png\" border=0 >";
		else {
		?><script type="text/javascript" src="fancybox/fancybox.js"></script>
	<script>
	jQuery(document).ready(function() {
		 	 jQuery("a.screen").fancybox({
			'overlayShow' : false,
 
			});
		 });
 
	</script>
<link rel="stylesheet" type="text/css" href="fancybox/fancybox.css"/>
<? 
           print "<a href=\"".$BASEURL."/photo/".$CURUSER["photo"]."\" class=\"screen\"><img border='0' alt='Фото by ".$CURUSER["username"]."' width=150 src='".$BASEURL."/photo/".$CURUSER["photo"]."' /></a> ";
		   print "<p>Вы можете удалить текущую фотографию .</p>
 
        <form action=\"foto.php?act=del\" method=post>
 
		<input class='btn' type='submit' value='Удалить'/>
        </form>
        ";
 
     }
 
	echo '</td><td valign="top" style="padding:5px">';
 
 
	echo '
	<h1>Загрузить личное фото</h1>
 
		<hr class=hr1>
		<p>Вы можете загрузить сюда только собственную фотографию расширения JPG, GIF и PNG. <br><b><font color="red">Загрузка постороннего изображения ЗАПРЕЩЕНА ! Фото должно быть персональным , на котором изображены Вы лично!</font></b><br />
		После загрузки , изображение будет автаматически уменьшено до размеров не превышающих 800 x 600 пикселей !<br>
		<font size=1>Размер файла не должен привышать более <b>500 KB</b>.<br></font></p>
		<form action="foto.php?act=add" method=post enctype="multipart/form-data">
		<input class="btn" type=file name="foto" size=40><input class="btn" type="submit" value="Загрузить"/>
		</form>';
	echo '</td></tr></table>';	
 
////////////////////////////////////////////
////////////////////////////////////////////

Ну и вывод фотки в деталях пользователя

 if($user["photo"])
{
?><script type="text/javascript" src="fancybox/fancybox.js"></script>
	<script>
	jQuery(document).ready(function() {
		 	 jQuery("a.screen").fancybox({
			'overlayShow' : false,
 
			});
		 });
 
	</script>
<link rel="stylesheet" type="text/css" href="fancybox/fancybox.css"/>
<? 
begin_frame("Фото");
    print("<table class=\"inlay\" width=\"100%\">\n");
    print("<tr>\n<td width=\"50%\" align='center'>\n");
    print ("<a href=\"".$BASEURL."/photo/".$user["photo"]."\" class=\"screen\"><img style='border:3px double #ccc;' alt='Фото by ".$user["username"]."' width=150 src='".$BASEURL."/photo/".$user["photo"]."' /></a>");
	if(get_user_class() =< UC_MODERATOR)
	 echo "<br /><a href='/foto.php?act=deladmin&id=".$id."'>Удалить Фото</a>";
    print("</td>\n<tr>\n</table>\n");
end_frame();
}

Запрос в базу , для создания поля —

ALTER TABLE `users` ADD `photo` VARCHAR( 100 ) NOT NULL AFTER `avatar` ;

Так же не забудте проставить код удаления фотки из папки , при удалении аккаунта пользователя и тому подобное .


Картинку в папку pic/

Для более удобного просмотра фоток , я использовал fancybox ! Скачать архив можно тут — http://fancybox.net/

Вот и все ! Будут ошибки , пишите .

Мод — Фотографии пользователей: 11 комментариев

  1. Dench

    Сделал все по инструкции, но верстка страницы смещается и при загрузке фото появляется ошибка «missing form data».

    Удалив в конце кода, верстка встает на место, исчезает ошибка, но фотка не загружается.

    Подскажите где посмотреть, что изменить? :wall:

    За мод спасибо! :yeah:

  2. webnet Автор записи

    В моде нигде ошибки такой нету . missing form data
    Ты что то не то делаешь парень !

  3. webnet Автор записи

    :wall:
    Так нахерам ты форму в форму вставляешь ?

  4. Dench

    Все, я разобрался. Вставлял я в my.php только не в то место. :pardon:

    Мои глупые сообщения можно удалить 😀

    Спасибо и удачи!

  5. XenonAndrei

    Огромное спасибо!Это мод я очень долго искал! :yeah:

  6. qwerty

    Всем привет, помогите пожалуйста выскакивает ошибка и за if(get_user_class() =< UC_MODERATOR)

    в userditails.php и photo.php убираю строку все нормально можете помочь что бы не нужно было убирать?

  7. Jon

    А что не так можно сделать? тут все расписано? я все сделал, он не загружает фото, в чем проблема?

  8. webnet Автор записи

    права на папку дал ? смотри лог ошибок , что там пишет

Комментарии запрещены.