[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс аплоад
nugle
Есть класс как вывести его в цикле или что?мне нужно чтобы вместо $i подставлялось 20 разных значений
как это сделать?

class uploadImg
{
private $uploaddir = 'images';



function uploadTest()
{
if($this->type() == true && $this->size() == true && $this->movement() == true)
return true;
}

private function type()

{
$types = array('jpg','jpeg','gif','png');
$typefile = explode('.', $_FILES['uploadfile'.$i]['name']);

foreach ($types as $key => $value)
{
foreach($typefile as $key2 => $value)
{
if($types[$key] == $typefile[$key2])
{
$mess = true;
break;
}

}
}


if($mess != true)
$mess = false;

return $mess;


}

private function size()
{
$size = 1024*1024*10;

if($_FILES['uploadfile'.$i]['size'] < $size)
$mess = true;
return $mess;
}

private function movement()
{
$destination = $this->uploaddir.'/'.$_FILES['uploadfile'.$i]['name'];
if (move_uploaded_file($_FILES['uploadfile'.$i]['tmp_name'], $destination))
return true;

}


}




Спустя 1 день, 3 часа, 10 минут, 17 секунд (29.03.2011 - 20:15) nugle написал(а):
доделал не много класс, но он почему то добавляет только одну картинку, ребят подскажите в чём дело?


<?php
class
uploadImg
{
public function uploadTest()
{
if($this->type() == true && $this->size() == true && $this->movement() == true)
return true;
}

public function cycle()
{
for($i=1; $i<=20; $i++)
{
return $i;
}

}


public function createImg()
{
if(!empty($_FILES['uploadfile'.$this->cycle()]['name']))
{
if($i == 1)
{
$img .= $_FILES['uploadfile'.$this->cycle()]['name'];
}
else
{
$img .= '\n'.$_FILES['uploadfile'.$this->cycle()]['name'];
}

}

return $img;
}

public function createImgUrl()
{
if(!empty($_FILES['uploadfile'.$this->cycle()]['name']))
{
if($i == 1)
{
$url .= './images/'.$_FILES['uploadfile'.$this->cycle()]['name'];
}
else
{
$url .= '\n./images/'.$_FILES['uploadfile'.$this->cycle()]['name'];
}

}

return $url;
}


private $uploaddir = 'images';


private function type()

{
$types = array('jpg','jpeg','gif','png');
$typefile = explode('.', $_FILES['uploadfile'.$this->cycle()]['name']);

foreach ($types as $key => $value)
{
foreach($typefile as $key2 => $value)
{
if($types[$key] == $typefile[$key2])
{
$mess = true;
break;
}

}
}


if($mess != true)
$mess = false;

return $mess;


}

private function size()
{
$size = 1024*1024*10;

if($_FILES['uploadfile'.$this->cycle()]['size'] < $size)
$mess = true;
return $mess;
}

private function movement()
{
$destination = $this->uploaddir.'/'.$_FILES['uploadfile'.$this->cycle()]['name'];
if (move_uploaded_file($_FILES['uploadfile'.$this->cycle()]['tmp_name'], $destination))
return true;

}


}



вызывается так

<?php
require './config/connectDB.php';
require './class/uploadImg.php';

$sub = isset($_POST['sub']) ? $_POST['sub'] : false;

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Вставка изображений</title>
<
script src="js/jquery.js" type="text/javascript"></script>
<
script src="js/upload.js" type="text/javascript"></script>
<
link href="css/uploadImg.css" rel="stylesheet" type="text/css" />
</
head>

<
body>

</
body>
<
form enctype="multipart/form-data" action="" method="post">
<
div id="uploadBut">
</
div>
<
div class="plus">
Добавить еще один файл
</div>
<
input type="submit" name="sub" />
</
form>


<?php


$obj = new uploadImg();
if($obj->uploadTest() == true)
{


$sql = "insert into images (url,img) values ('".$obj->createImgUrl()."','".$obj->createImg()."')";
$result = mysql_query($sql) or die(mysql_error.'<br />'.$sql);

if($result)
echo 'Файл загружен успешно!';


}
elseif($obj->uploadTest() == false && $sub)
echo 'Файл не был загружен!';


?>

</html>

Спустя 12 часов, 4 минуты, 1 секунда (30.03.2011 - 08:19) linker написал(а):
Вот это вот
public function cycle()
{
for($i=1; $i<=20; $i++)
{
return $i;
}
}
всегда будет возвращать значение 1.

Спустя 5 минут, 55 секунд (30.03.2011 - 08:25) nugle написал(а):
Я уже заметил(

а как можно иначе сделать?ну я думаю, что хочу добиться понятно!

Спустя 1 час, 27 минут, 38 секунд (30.03.2011 - 09:53) linker написал(а):
$_FILES - это массив, а значит у него имеется внутренний указатель. Значит смещая его мы можем пройти по всем элементам от начала и до конца: reset(), next(). Когда достигнут конец next() вернет false.

Спустя 22 минуты, 55 секунд (30.03.2011 - 10:16) nugle написал(а):
а в цикле выводить?

Спустя 10 минут, 8 секунд (30.03.2011 - 10:26) linker написал(а):
Конечно.

Спустя 3 минуты, 11 секунд (30.03.2011 - 10:29) nugle написал(а):
public function cycle()
{
for($i=1; $i<=20; $i++)
{
return next(FILES);
}
}


так?

Спустя 25 минут, 54 секунды (30.03.2011 - 10:55) alex12060 написал(а):
$_FILES

Спустя 3 часа, 9 минут, 16 секунд (30.03.2011 - 14:04) nugle написал(а):
)забыл. Щас попробуем

Спустя 30 минут, 53 секунды (30.03.2011 - 14:35) nugle написал(а):
alex12060
а как в методы подставлять? с $i было всё понятно, а тут как быть?

Спустя 3 часа, 11 минут, 10 секунд (30.03.2011 - 17:46) alex12060 написал(а):
public function cycle()
{
for($i=1; $i<=20; $i++)
{
return next($_FILES['uploadfile'][$i]);
}
}

Спустя 21 минута, 59 секунд (30.03.2011 - 18:08) nugle написал(а):
alex12060
и что получиться?
$_FILES['uploadfile'][1]
$_FILES['uploadfile'][2]
и т.д.

а вызывать мне надо с name или size, типа
$_FILES['uploadfile1']['name']

Спустя 3 минуты, 44 секунды (30.03.2011 - 18:12) alex12060 написал(а):
Погоди, я пока не вникал. Сейчас перечитаю нормально...

Спустя 14 минут, 31 секунда (30.03.2011 - 18:27) alex12060 написал(а):
Поубирай все контетенации с переменной $i и оставь везде имя uploadfile
И сделай один метод, который будет поочередно вытаскивать из каждого файла информацию, как я показал выше.

Спустя 6 минут, 5 секунд (30.03.2011 - 18:33) nugle написал(а):
alex12060
ааа, не понимаю, допустим


public function cycle()
{
for($i=1; $i<=20; $i++)
{
return next($_FILES['uploadfile'][$i]);
}
}


public function createImg()
{
if(!empty($this->cycle()['name']))
{
if($i == 1)
{
$img .= $this->cycle();
}
else
{
$img .= '\n'.$this->cycle()['name'];
}

}

return $img;
}


так ошибка

Спустя 7 минут, 58 секунд (30.03.2011 - 18:41) alex12060 написал(а):

for($i=1; $i<=20; ++$i)
{
return next($_FILES['uploadfile']['name'][$i]);
}

Спустя 3 минуты, 19 секунд (30.03.2011 - 18:44) nugle написал(а):
alex12060
а мне помимо нейм еще сайз и tmp_name нужно, для каждого метод создавать?

Спустя 16 минут, 19 секунд (30.03.2011 - 19:00) alex12060 написал(а):
Тут надо многое менять, попробую написать класс, исходя из твоего.

Спустя 20 минут (30.03.2011 - 19:20) nugle написал(а):
z просто только учусь с классами, буду очень благодарен)

Спустя 13 часов, 52 минуты, 17 секунд (31.03.2011 - 09:13) linker написал(а):
Не там ты цикл вставляешь.
public function cycle()
{
return next($_FILES);
}

public function createImg()
{
while(($File = $this->cycle()) !== false)
{
...
}
}

Спустя 6 часов, 42 минуты, 49 секунд (31.03.2011 - 15:55) nugle написал(а):
сделал так


<?php
/*
Задачей данного класса является загрузка изображений
с проверками:

1. на формат,
2. на размер.

Если данный файл прошёл все проверки, класс должен будет сохранить файл в директории images
*/

// $_FILES['uploadfile']['name'];
// $_FILES['uploadfile']['size'];
// $_FILES['uploadfile']['type'];
// $_FILES['uploadfile']['tmp_name'];


class uploadImg
{
public function uploadTest()
{
if($this->type() == true && $this->size() == true && $this->movement() == true)
return true;

}

public function cycle($meth)
{

for($i=1; $i<=20; $i++)
{

if($meth == 'name')
{
if($i==1)
{
return reset(current($_FILES));
}
else
{
return reset(next($_FILES));
}
}

elseif($meth == 'size')
{
if($i==1)
return end(current($_FILES));
else
return
end(next($_FILES));
}
elseif($meth == 'tmp_name')
{
if($i==1)
{
$arr = current($_FILES);
$arr2 = next($arr);
$arr2 = next($arr);
return $arr2;
}
else
{
$arr = next($_FILES);
$arr2 = next($arr);
$arr2 = next($arr);
return $arr2;
}
}

else
return
$arr;

}
}


public function createImg()
{

if($i == 1)
{
$img .= $this->cycle('name');
}
else
{
$img .= '\n'.$this->cycle('name');
}


return $img;
}

public function createImgUrl()
{

if($i == 1)
{
$url .= './images/'.$this->cycle('name');
}
else
{
$url .= '\n./images/'.$this->cycle('name');
}


return $url;
}


private $uploaddir = 'images';


private function type()

{
$types = array('jpg','jpeg','gif','png');
$typefile = explode('.', $this->cycle('name'));

foreach ($types as $key => $value)
{
foreach($typefile as $key2 => $value)
{
if($types[$key] == $typefile[$key2])
{
$mess = true;
break;
}

}
}


if($mess != true)
{
$mess = false;
}

return $mess;


}

private function size()
{
$size = 1024*1024*10;

if($this->cycle('size') < $size)
$mess = true;


return $mess;
}

private function movement()
{
$destination = $this->uploaddir.'/'.$this->cycle('name');
if (move_uploaded_file($this->cycle('tmp_name'), $destination))
return true;


}


}



но всё равно 1 картинка добавляется

вызываю так


if ($sub)
{
$uploadImg = new uploadImg();

if($uploadImg->uploadTest() == true)
{
$sql = 'insert into images (`url`,`img`) values ("'.$uploadImg->createImgUrl().'","'.$uploadImg->createImg().'")';
$result = mysql_query($sql) or die(mysql_error().'<br />'.$sql);
echo 'Картинки успешно загружены';
}
elseif($uploadImg->uploadTest() == false)
echo 'Ничего не загрузилось!';
}

Спустя 17 минут (31.03.2011 - 16:12) T1grOK написал(а):
Это очень кривой код! Читай про область видимости переменных, у тебя почти в каждом методе этот косяк.

Спустя 6 минут, 11 секунд (31.03.2011 - 16:19) nugle написал(а):
T1grOK
про private, public, protected? в чём ошибки?

Спустя 2 часа, 10 минут, 11 секунд (31.03.2011 - 18:29) T1grOK написал(а):
Ты указал модификаторы доступа - это несколько не то, но тоже надо знать. Я вот о чем:

public function createImg()
{

if($i == 1)
{
$img .= $this->cycle('name');
}
else
{
$img .= '\n'.$this->cycle('name');
}


return $img;
}

Например в этом методе. Переменной $i тут нет и быть не может. Она здесь не объявлена. То есть у тебя данная переменная(которой собственно и нет) локальная и используется только в пределах данного метода.
Можешь проверить(если не веришь), добавь в начале этого метода

if(!isset($i)){
echo 'переменная не объявлена';
}else{
echo 'О! Есть переменная';
}

Готов поспорить что выведет первое сообщение. Учись отлаживать свой код, проверяй переменные выводя их значения в браузер, добавляй условия для проверки правильности каких-либо переменных, проверяй тип данных и т.д.

Спустя 13 минут, 2 секунды (31.03.2011 - 18:42) nugle написал(а):
Я извеняюсь,, химичил, забыл убрать, спасибо что подсказал

Спустя 17 часов, 46 минут, 58 секунд (1.04.2011 - 12:29) alex12060 написал(а):
for($i=1; $i<=20; $i++)


В массивах счет начинается с 0


else {
return reset(next($_FILES));
}


Запись ни о чем.

В общем, я тебе уже говорил, парси картинки так:

$_FILES['name']['type'][$i];

И не надо химичить c next() prev() reset()

Спустя 29 минут, 20 секунд (1.04.2011 - 12:58) nugle написал(а):
та была старая версия, вот


<?php

// $_FILES['uploadfile']['name'];
// $_FILES['uploadfile']['size'];
// $_FILES['uploadfile']['type'];
// $_FILES['uploadfile']['tmp_name'];


class uploadImg
{
public function uploadTest()
{
if($this->type() == true && $this->size() == true && $this->movement() == true)
return true;

}

public function cycle($meth)
{

for($i=1; $i<=20; $i++)
{

if($meth == 'name')
{
if($i==1)
{
if(reset(current($_FILES)) === true)
{
$arr .= $arr2;
}
}

else
{

if($arr2 = reset(next($_FILES)) === true)
{
$arr .= $arr2;
return $arr;
}
}
}

elseif($meth == 'size')
{
if($i==1)
return end(current($_FILES));
else
return
end(next($_FILES));
}
elseif($meth == 'tmp_name')
{
if($i==1)
{
$arr = current($_FILES);
$arr2 = next($arr);
$arr2 = next($arr);
return $arr2;
}
else
{
$arr = next($_FILES);
$arr2 = next($arr);
$arr2 = next($arr);
return $arr2;
}
}

elseif($meth == 'type')
{
if($i==1)
{
$arr = current($_FILES);
$arr2 = next($arr);
return $arr2;
}
else
{
$arr = next($_FILES);
$arr2 = next($arr);
return $arr2;
}
}

}
}


public function createImg()
{
$img .= '\n'.$this->cycle('name');

return $img;
}

public function createImgUrl()
{
$url .= '\n'.$this->uploaddir.'/'.$this->cycle('name');

return $url;
}


private $uploaddir = 'images';


private function type()

{
$types = array('image/gif','image/jpeg','image/pjpeg');


if($this->cycle('type') == $types)
return true;




}

private function size()
{
$size = 1024*1024*10;

if($this->cycle('size') < $size)
return true;


}

private function movement()
{
$destination = $this->uploaddir.'/'.$this->cycle('name');
if (move_uploaded_file($this->cycle('tmp_name'), $destination))
return true;


}


}



Спустя 3 часа, 19 минут, 3 секунды (1.04.2011 - 16:17) inpost написал(а):
nugle
Меняй табуляторы на пробелы, вообще нереально читать такие скачки кода...

Спустя 3 минуты, 47 секунд (1.04.2011 - 16:21) nugle написал(а):
поменял

Спустя 3 минуты, 5 секунд (1.04.2011 - 16:24) inpost написал(а):
nugle
В чём вообще беда сейчас?

Спустя 6 минут, 59 секунд (1.04.2011 - 16:31) nugle написал(а):
беда в том, что

в этом месте

for($i=1; $i<=20; $i++)
{

if($meth == 'name')
{
if($i==1)
{
if(reset(current($_FILES)) === true)
{
$arr .= $arr2;
}
}

else
{

if($arr2 = reset(next($_FILES)) === true)
{
$arr .= $arr2;
return $arr;
}
}

return $arr;
}


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

Спустя 3 минуты, 34 секунды (1.04.2011 - 16:35) inpost написал(а):
nugle
А чем тебе foreach($_FILES) не подходит? $_FILES - это массив фотографий.

Спустя 4 минуты, 30 секунд (1.04.2011 - 16:39) nugle написал(а):
inpost
да
Незнаю, я просто пробывал, не получилось, а как нужно?

Спустя 17 минут, 51 секунда (1.04.2011 - 16:57) nugle написал(а):
вот конечный код с foreach


<?php

// $_FILES['uploadfile']['name'];
// $_FILES['uploadfile']['size'];
// $_FILES['uploadfile']['type'];
// $_FILES['uploadfile']['tmp_name'];


class uploadImg
{
public function uploadTest()
{
if($this->type() == true && $this->size() == true && $this->movement() == true)
return true;

}

public function cycle($meth)
{

foreach($_FILES as $key => $val)
{

if($meth == 'name')
{
return $_FILES[$key]['name'];
}
elseif($meth == 'size')
{
return $_FILES[$key]['size'];
}
elseif($meth == 'tmp_name')
{
return $_FILES[$key]['tmp_name'];
}
elseif($meth == 'type')
{
return $_FILES[$key]['type']; }

}
}


public function createImg()
{
$img .= '\n'.$this->cycle('name');

return $img;
}

public function createImgUrl()
{
$url .= '\n'.$this->uploaddir.'/'.$this->cycle('name');

return $url;
}


private $uploaddir = 'images';


private function type()

{
$types = array('image/gif','image/jpeg','image/pjpeg');

foreach($types as $key => $val)
{
if($this->cycle('type') == $types[$key])
return true;
}



}


private function size()
{
$size = 1024*1024*10;

if($this->cycle('size') < $size)
return true;


}

private function movement()
{
$destination = $this->uploaddir.'/'.$this->cycle('name');
if (move_uploaded_file($this->cycle('tmp_name'), $destination))
return true;


}


}



вот как вызываю

if ($sub)
{
$uploadImg = new uploadImg();

if($uploadImg->uploadTest() == true)
{
$sql = 'insert into images (`url`,`img`) values ("'.$uploadImg->createImgUrl().'","'.$uploadImg->createImg().'")';
$result = mysql_query($sql) or die(mysql_error().'<br />'.$sql);
echo 'Картинки успешно загружены';
echo $sql;
}
elseif($uploadImg->uploadTest() == false)
echo 'Ничего не загрузилось!';
}


пишет Картинки успешно загружены, но ничего не загружено,и в выводе $sql, показывает только первую картинку!

Спустя 5 минут, 41 секунда (1.04.2011 - 17:03) nugle написал(а):
ой, случайно, чёт форум подвсает ph34r.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.