Автор Тема: Галерия - част 2  (Прочетена 44903 пъти)

0 Потребители и 2 Гости преглежда(т) тази тема.

Did0_

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 101
Re: Галерия - част 2
« Отговор #30 -: 13 Март 2012, 18:51:16 »
Дидо, след като в таблицата в базата данни catalog_id ти е равно на 0, значи нещо не ти е наред с бутона, с който избираш категория. На пръв погледни ми се наби един изпуснат знак равно:
Код: PHP
  1. echo '<option value' . $v['catalog_id'] . '>' . $v['name'] . '</option>';
трябва да го направиш
Код: PHP
  1. echo '<option value="' . $v['catalog_id'] . '">' . $v['name'] . '</option>';

Когато в html не задаваш стойност (value) на селек, за стойност се приема стринга, който стой между отварящия и затварящия таг. На тебе това ти е името на категорията. И когато тръгнеш да качваш снимката ти подаваш стринг към integer поле и затова се получава 0.
братле мн ти благодаря колко тъпа грешка мн ме дразнят тия правописни грешки :)))

HanKrum

  • Гост
Re: Галерия - част 2
« Отговор #31 -: 13 Март 2012, 19:27:00 »
братле мн ти благодаря колко тъпа грешка мн ме дразнят тия правописни грешки :)))
...ами ползвай среда за разработка, а не редактор!

Did0_

  • Full Member
  • ***
  • Благодарности
  • -Казани: 3
  • -Получени: 1
  • Публикации: 101
Re: Галерия - част 2
« Отговор #32 -: 13 Март 2012, 20:13:16 »
ползвам Net Beans ама понеже пиша html в php и е в '' и ми го зачита като текст...

HanKrum

  • Гост
Re: Галерия - част 2
« Отговор #33 -: 13 Март 2012, 20:28:06 »
ползвам Net Beans ама понеже пиша html в php и е в '' и ми го зачита като текст...
:) затова аз не смесвам кодове :)

bgludost

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 41
Re: Галерия - част 2
« Отговор #34 -: 30 Април 2012, 18:40:55 »
Имам проблем с създаването на новата папка за потр които ще качва в нея снимки. Като се опитам да кача снимка през IE с разширение jpeg ми показва , че файла не е снимка, макар че съм му задал в кога да разпознава jpeg като снимка. А като се опитам да кача същата снимка със същия код през firefox нямам съобщение за грешка и си ми създава папка с user_id на потребителя. Защо IE не ми разпознава разширението на снимката ?
Код: PHP
  1. <?php
  2.  
  3. include 'common.php';
  4. if ($_SESSION['is_logged'] === true) {
  5.     //proverqvame dali ima ime snimkata
  6.     if ($_FILES['user_pic']['tmp_name'])
  7.     {  
  8.         //proverqvame za golemina na snimkata v kb
  9.         if($_FILES['user_pic']['size']>2097152)
  10.         {
  11.           echo  $err[]= 'Snimkata e po golqma ot 2mb !';
  12.         }
  13.         //proverqvame za typa(razshirenieto)na snimkata
  14.         if($_FILES['user_pic']['type']!='image/gif' &&
  15.            $_FILES['user_pic']['type']!='image/jpeg' &&
  16.            $_FILES['user_pic']['type']!='image/jpg')
  17.         {
  18.            
  19.            echo $err[]= 'Faila ne e snimka!';
  20.         }
  21.        
  22.         //proverqvame dali e izbrana papka (grupi)
  23.         if(!$_POST['folder']>0)
  24.         {
  25.           echo  $err[]= 'Molq izberete papka';
  26.         }
  27.         //proverqvame dali ima nqkakva greshka v $err[] i ako nqma izpylnqvame kachvaneto
  28.         if(count($err)==0)
  29.         {
  30.             //proverqvame dali papkata systestvuva i ako ne q syzdavame
  31.             if(!is_dir('user_pics'.DIRECTORY_SEPARATOR.$_SESSION['user_id']))
  32.             {
  33.                 //syzdavame papkata
  34.                 mkdir('user_pics'.DIRECTORY_SEPARATOR.$_SESSION['user_id']);
  35.             }
  36.         }
  37.          
  38.     }

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Галерия - част 2
« Отговор #35 -: 30 Април 2012, 18:51:37 »
Използвай и чичо Гугъл за такива често срещани проблеми - > http://stackoverflow.com/questions/3954052/problem-with-content-type-image-jpeg-in-ie

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Галерия - част 2
« Отговор #36 -: 30 Април 2012, 19:01:24 »
Така, забрави го това с проверката на MIME type. Лесно могат да те преметнат с някой скрипт, който лъже, че е с определ MIME, а всъщност е с друг. Проверявай разширението на файла, в нета има много примери - аз ще ти там един елементарен:
Код: PHP
  1. // името на файла е 'име.на.файл.jpeg'
  2. $getExt = explode('.', strtolower($_FILES['user_pic']['name']));
  3. $ext = end($getExt);//последния елемент на масива getExt е разширението
  4. $allowed_ext = array('jpg', 'jpeg', 'gif'); //пускаме файлове, които са с това разширение
  5. if(in_array($ext, $allowed_ext)) {
  6.        //файлът е снимката с разширение jpg || jpeg || gif
  7. } else {
  8.       //файлът не е снимка
  9. }

И още нещо, това за DIRECTORY_SEPARATOR е пълна глупост, слагай си наклонена напред "/" и не се плаши.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Галерия - част 2
« Отговор #37 -: 30 Април 2012, 19:19:59 »
Така, забрави го това с проверката на MIME type. Лесно могат да те преметнат с някой скрипт, който лъже, че е с определ MIME, а всъщност е с друг. Проверявай разширението на файла ..

Така биха го преметнали още по-лесно, нищо не пречи на човек да си преименува разширението от file.php на file.gif ? По-добре да си използва и двете проверки - за разширение и за mime type. Аз ще дам един пример за проверка за разширение с регулярен израз за същтите типове споменати по-горе:

Код: PHP
  1. if(preg_match('/\.(jpe?g|gif)$/i',$_FILES['user_pic']['name'])) {
  2.     // проверка за mime type и другия код...
  3. }

borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: Галерия - част 2
« Отговор #38 -: 30 Април 2012, 19:42:09 »
@abcd Прави си, ама ако го преименува от php на нещо друго ако web сървъра е настроен правилно, няма да изпълни скрипта. Друг е въпроса примерно ако се намери някаква дупка в сигурността и да се преименува файла локално, ама то при наличие на нещо такова всичко вече така или иначе си е заминало :)
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

bgludost

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 41
Re: Галерия - част 2
« Отговор #39 -: 30 Април 2012, 20:05:22 »
Така както каза Avalanche се получават нещата както трябва и при IE и firefox.
abcd може ли да ми покажеш къде точно в кода трябва да променя file.php на file.gif и как да си направя проверката, за да мога да пробвам и по твоя начин :)

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Галерия - част 2
« Отговор #40 -: 30 Април 2012, 20:36:40 »
Цялата проверка, която съм ти дал може да се замени от 3-та реда код, които abcd е постнал, просто не ме бива с регулярните изрази :)

@abcd Не е проблем да си правиш и проверка на MIME тип, но наистина е проблем ако разчиташ само на нея.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: Галерия - част 2
« Отговор #41 -: 30 Април 2012, 21:51:07 »
Код: PHP
  1.     if(preg_match('/\.(jpe?g|gif)$/i',$_FILES['user_pic']['name'])) {
  2.         // проверка за mime type и другия код...
  3.     }
  4.  

A защо не правите проверка за nonspace character преди точката, защото така лесно може да се вкара файл с празно име в базата и след това почваш да си скубеш косите ( както казва Стилгар :) )

Код: PHP
  1. $regEx = /\S*\.(jpe?g|gif)$/i;
  2.  
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Галерия - част 2
« Отговор #42 -: 30 Април 2012, 22:02:08 »
@abcd Не е проблем да си правиш и проверка на MIME тип, но наистина е проблем ако разчиташ само на нея.

Да, както и само на проверката за разширение, съчетани мисля, че ще се постигне някакво ниво на защита. :) При тези добавки на firefox за промяна на хедърите(лично съм тествал), съм абсолютно съгласен, че неможе да се разчита само на mime type.

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

Така както каза Avalanche се получават нещата както трябва и при IE и firefox.
abcd може ли да ми покажеш къде точно в кода трябва да променя file.php на file.gif и как да си направя проверката, за да мога да пробвам и по твоя начин :)

Нещата се получават защото всичко става на ниво сървър, не зависи от браузъра.
На въпроса ти: никъде в кода ти, просто ако имаш един файл от тип .doc,който няма нищо общо с изображение, примерно pic.doc и го преименуваш на pic.jpg и го ъплоуднеш(приемаме че размера му е в рамките на допустимото) то той ще се качи безпроблемно, ще мине успешно проверката за разширение на файла.Затова трябва да направиш и втора проверка за mime type.А проблема с IE се оправя лесно като добавиш "image/pjpeg" към проверките които правиш за mime type. 

A защо не правите проверка за nonspace character преди точката, защото така лесно може да се вкара файл с празно име в базата и след това почваш да си скубеш косите ( както казва Стилгар  )
Код: PHP
  1. $regEx = /\S*\.(jpe?g|gif)$/i;

Даа правилна забележка,но може би имаш предвид :

Код: PHP
  1. $regEx = /\S+\.(jpe?g|gif)$/i;


Разбира се може да се направи и още по-точна филтрация с regex, но това мисля че е достатъчно.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: Галерия - част 2
« Отговор #43 -: 30 Април 2012, 22:10:04 »
Цитат
Даа правилна забележка,но може би имаш предвид
 $regEx = /\S+\.(jpe?g|gif)$/i;
M-м-м, да :)
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

minimalvoice

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 60
    • Уеб съвети за начинаещи
Re: Галерия - част 2
« Отговор #44 -: 29 Септември 2012, 23:49:16 »
Не мога да създам thumb изображения. Upload код:
<?php

include 'common.php';
if (
$_SESSION['is_logged'] === true) {
    if (
$_FILES['user_pic']['tmp_name']) {
        if (
$_FILES['user_pic']['size'] > 2097152) {
            
$err[] = 'Файла е над 2mb';
        }
        if (
$_FILES['user_pic']['type'] != 'image/gif' &&
                
$_FILES['user_pic']['type'] != 'image/jpeg' &&
                
$_FILES['user_pic']['type'] != 'image/pjpeg') {
            
$err[] = 'Файла не е снимка';
        }
        if (!
$_POST['folder'] > 0) {
            
$err[] = 'Изберете папка';
        }
        if (
count($err) == 0) {
            if (!
is_dir('user_pics' DIRECTORY_SEPARATOR $_SESSION['user_id'])) {
                
mkdir('user_pics' DIRECTORY_SEPARATOR $_SESSION['user_id']);
            }
            
$name time() . '_' $_FILES['user_pic']['name'];
            if (
move_uploaded_file($_FILES['user_pic']['tmp_name'], 'user_pics'.DIRECTORY_SEPARATOR.$_SESSION['user_id'].DIRECTORY_SEPARATOR.$name)) {
                if(
$_POST['is_public']==1)
                {
                   
$public=1
                }
                else
                {
                    
$public=0;
                }
                
run_q('INSERT INTO pictures (pic_name,catalogie_id,comment,date_added,is_public) VALUES ("'.$name.'",'.(int)$_POST['folder'].',"'.addslashes($_POST['user_desc']).'",'.time().','.$public.')');
                
                
create_thumb('user_pics'.DIRECTORY_SEPARATOR.$_SESSION['user_id'].DIRECTORY_SEPARATOR.$name);
                
                
$succes true;
            } else {
                
$err[] = 'Грешка при копиране на файла. Моля опитайте отново';
            }
        }
    }


    
$folders fetch_all(run_q('SELECT * FROM user_catalogs WHERE user_id=' $_SESSION['user_id']));
    include 
'templates/header.php';
    include 
'templates/upload.php';
    include 
'templates/footer.php';
} else {
    
header('Location: index.php');
    exit;
}

function 
create_thumb($source,$thumb_width=100)
{
    
$fl=dirname($source);
    
$new_name='thumb_'.basename($source);
    
$img imagecreatefromjpeg($source);
    
$width imagesx($image);
    
$height imagesy($image);
    
$new_width $thumb_width;
    
$new_height floor$height * ( $thumb_width $width ) );
    
$tmp_image imagecreatetruecolor($new_width$new_height);
    
imagecopyresized$tap_img$img0000$new_width$new_height$width$height);
    
imagejpeg$tap_img$fl.DIRECTORY_SEPARATOR.$new_name);
    
}
?>
http://webtipsbg.info - Уеб съвети за начинаещи