как это сделать?
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()всегда будет возвращать значение 1.
{
for($i=1; $i<=20; $i++)
{
return $i;
}
}
Спустя 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 было всё понятно, а тут как быть?
а как в методы подставлять? с $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']
и что получиться?
$_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 нужно, для каждого метод создавать?
а мне помимо нейм еще сайз и 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 написал(а):
сделал так
но всё равно 1 картинка добавляется
вызываю так
<?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? в чём ошибки?
про private, public, protected? в чём ошибки?
Спустя 2 часа, 10 минут, 11 секунд (31.03.2011 - 18:29) T1grOK написал(а):
Ты указал модификаторы доступа - это несколько не то, но тоже надо знать. Я вот о чем:
Например в этом методе. Переменной $i тут нет и быть не может. Она здесь не объявлена. То есть у тебя данная переменная(которой собственно и нет) локальная и используется только в пределах данного метода.
Можешь проверить(если не веришь), добавь в начале этого метода
Готов поспорить что выведет первое сообщение. Учись отлаживать свой код, проверяй переменные выводя их значения в браузер, добавляй условия для проверки правильности каких-либо переменных, проверяй тип данных и т.д.
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 - это массив фотографий.
А чем тебе foreach($_FILES) не подходит? $_FILES - это массив фотографий.
Спустя 4 минуты, 30 секунд (1.04.2011 - 16:39) nugle написал(а):
inpost
да
Незнаю, я просто пробывал, не получилось, а как нужно?
да
Незнаю, я просто пробывал, не получилось, а как нужно?
Спустя 17 минут, 51 секунда (1.04.2011 - 16:57) nugle написал(а):
вот конечный код с foreach
вот как вызываю
пишет Картинки успешно загружены, но ничего не загружено,и в выводе $sql, показывает только первую картинку!
<?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 написал(а):
ой, случайно, чёт форум подвсает