[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция в IE не работает
pantela
Есть самописный компонент для Joomla 1.5.х доски объявления.

При подаче объялвения через браузеры Опера и ФФ всё отлично. Идут данные запроса в базу + 5 изображения передются на сервер и в базе прописывается имена изображения в полях для объявления.

напр.
INSERT INTO `jos_as_ads` VALUES (1, 0, 0, '2010-08-11', '2011-08-11', 'Категория №1', 'Доп. информация 1111', 'd780bc5708a4d86029518377d21ff9ae.jpg', 'c90e3fc0ce21abfbbd1f8bce12033809.jpg', '24d314bafd134ce743cb02f20e8f6ce8.jpg', '48b89e0e2b9c89162988b005cf156546.jpg', '75385e00452fde4ee601854c64085abc.jpg');


Далле когда пытаюсь подасть объявление через браузер IE, тогда происходит баг, а точнее, объявление подаётся всё ок, вот только изображения не сервер не переливаются и в базу в поле изображения идёт NULL

напр.
INSERT INTO `jos_as_ads` VALUES (2, 0, 0, '2010-08-11', '2011-08-11', 'Категория №2', 'Доп. информация 2222 ', NULL, NULL, NULL, NULL, NULL);


Как я понял у меня проблемма в этой функции вроде:

function loadImages($images) {
$imgTypes = array('image/jpeg', 'image/gif', 'image/png');
$imgList = array();
$imgName = '';

for ($i=0; $i<count($images['name']); $i++) {
if (in_array(strtolower($images['type'][$i]), $imgTypes)) {
$imgName = md5($images['name'][$i].mt_rand()).'.'.strtolower(array_pop(explode('.', $images['name'][$i])));
if (copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)) {
$imgList[] = $this->resizeImage(AS_ADS_IMG_PATH.$imgName, AS_ADS_IMG_PATH.$imgName);
}
}
}


if (!count($imgList))
return false;
else
return
$imgList;
}


т.к. когда я её вырезаю,

for ($i=0; $i<count($images['name']); $i++) {
if (in_array(strtolower($images['type'][$i]), $imgTypes)) {
$imgName = md5($images['name'][$i].mt_rand()).'.'.strtolower(array_pop(explode('.', $images['name'][$i])));
if (copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)) {
$imgList[] = $this->resizeImage(AS_ADS_IMG_PATH.$imgName, AS_ADS_IMG_PATH.$imgName);
}
}
}



таже проблема просиходит и в ОПЕРЕ и ФФ. - помоему логично я рассуждаю.

Думаю может JS мешяют друг-другу, хотя врятли, т.к. я вырезал все JS файлы страницы - и итога не было.

Могу выложыть файлы которые отвечают за добавления объявления, если этого кода не достаточно.

Просто странно что бы IE ругался бы на php код. sad.gif blink.gif

Или всё же проблемма у меня в другом может быть. unsure.gif
4 день ковиряю что только не пробовал...
спс.Ув.



Спустя 5 минут, 3 секунды (12.08.2010 - 06:35) ZSH написал(а):
нет нелогично PHP скрипт вообще не причем копай JS

Спустя 4 минуты, 53 секунды (12.08.2010 - 06:40) pantela написал(а):
Я тоже думал что JS , мне тоже так подсказали, но у меня вобще нету JS-ов. я даже удалил их всё. и тоже самое ОПЕРА и ФФ работает а ИЕ глучит...

Есть ещё варианты?

Спустя 3 минуты, 43 секунды (12.08.2010 - 06:43) ZSH написал(а):
покаж код формы добавления изображения

Спустя 5 минут, 6 секунд (12.08.2010 - 06:49) pantela написал(а):
<?php

defined('_JEXEC') or die( 'Restricted access' );

$model = $this->model;

?>

<form name="ads_addsrv" onsubmit="return validForm();" action="index.php?option=com_as_ads" method="post" enctype="multipart/form-data">
<
table cellspacing="0" cellpadding="0" border="0" class="ads_add">
<
tbody>
<
tr>
<
td><small><font color="red">*</font></small> Категори</td>
<
td nowrap="nowrap">
<
select name="tip_servisa" class="inputbox">
<
option value="0">-выберите-</option>
<?php getAdsServiceTypeList(); ?>
</select>
</
td>
</
tr>
<
tr>
<
td><small><font color="red">*</font></small> Доп. инфо</td>
<
td nowrap="nowrap">
<
textarea name="dop_info" cols="50" rows="6" class="inputbox"></textarea>
</
td>
</
tr>
<
tr>
<
td nowrap="nowrap">Изображение</td>
<
td>
<
input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<
input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<
input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<
input type="file" name="adsphoto[]" value="" class="inputbox" /><br />
<
input type="file" name="adsphoto[]" value="" class="inputbox" />
</
td>
</
tr>
</
tbody>
</
table>
<
input type="hidden" name="option" value="com_as_ads" />
<
input type="hidden" name="task" value="ads_addsrv" />
<
br />
<
center><input type="submit" name="ads_submit" class="ads_submit" value="Добавить" /></center>
</
form>


Просто старнно что в ОПЕРЕ и в ФФ всё ок а ИЕ глучит... unsure.gif

Спустя 4 минуты, 15 секунд (12.08.2010 - 06:53) ZSH написал(а):
<form name="ads_addsrv" onsubmit="return validForm();" action="index.php?option=com_as_ads" method="post" enctype="multipart/form-data">

убери атрибут onsubmit и попробуй

Спустя 7 минут, 23 секунды (12.08.2010 - 07:00) pantela написал(а):
Нет тоже самое ...

Спустя 9 минут, 31 секунда (12.08.2010 - 07:10) ZSH написал(а):
попробуй IE перегрузить после удаления onsumbit - бывает у него подругому никак из кэша не вычистиш.

страницу обновлял хоть? smile.gif

Спустя 4 минуты, 47 секунд (12.08.2010 - 07:14) pantela написал(а):
конечно обнавил, нет не помогает.

вот ту функцию которую я написал в первом посте,как нибудь можно вычислить до кокого шага идёт процесс добавления объявления.

или 100% причина в форме ?

Спустя 7 минут, 59 секунд (12.08.2010 - 07:22) ZSH написал(а):
100% не в PHP
вставь гденить в PHP :

echo '<pre>';
print_r($_FILES);
print_r($_POST);
echo '</pre>';


потм отправь форму и покажеш что написало

Спустя 8 минут, 45 секунд (12.08.2010 - 07:31) linker написал(а):
Во-первых, кто так учил копировать залитые файлы?
copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)

Для этого есть специальная функция
if (is_uploaded_file($images['tmp_name'][$i]))
{
move_uploaded_file($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName);
}

Во-вторых, IE очень привередлив и ему очень надо перед каждым
<input type="file" ...>
указывать еще одно скрытое поле
<input type="hidden" name="MAX_FILE_SIZE" value="ЗДЕСЬ РАЗМЕР В БАЙТАХ">

Спустя 1 минута, 48 секунд (12.08.2010 - 07:33) pantela написал(а):
linker - Щас полностью попробую твои методы.


ZSH - Хмм у меня вить идёт процесс добавления через функцию и помот перенаправляется автоматом на другую страницу куда и передаётся только АД добавленного объявения. Вроде так мне не вынести то что ты хочешь,

т.к. выдало:
Array
(
)

Array
(
)



даже через Оперу когда всё работает тоже выдало
Array
(
)

Array
(
)



Кудато в другое мето надо вставить

P.S. Знаю так тупо обсуждаем, 100 причин может быть... но хз... что делать не знаю просто уже. unsure.gif

Спустя 6 минут, 57 секунд (12.08.2010 - 07:40) ZSH написал(а):
при приеме exit(print_r($_FILES));

Спустя 15 минут, 1 секунда (12.08.2010 - 07:55) pantela написал(а):
linker
через:
if (is_uploaded_file($images['tmp_name'][$i]))
{
move_uploaded_file($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName);
}

Всё тоже самое не принимает ИЕ фото... А кокое отличие от моего huh.gif

Эту чатсь не очень понял sad.gif
Цитата
Во-вторых, IE очень привередлив и ему очень надо перед каждым
<input type="file" ...>
указывать еще одно скрытое поле
<input type="hidden" name="MAX_FILE_SIZE" value="ЗДЕСЬ РАЗМЕР В БАЙТАХ">


У меня напр. 3 поля
<input type="file" name="adsphoto[]" value="" class="inputbox" />
<
input type="file" name="adsphoto[]" value="" class="inputbox" />
<
input type="file" name="adsphoto[]" value="" class="inputbox" />


получается так что ли

<input type="hidden" name="adsphoto[1]" value="">
<
input type="file" name="adsphoto[]" value="" class="inputbox" />
<
input type="hidden" name="adsphoto[2]" value="">
<
input type="file" name="adsphoto[]" value="" class="inputbox" />
<
input type="hidden" name="adsphoto[3]" value="">
<
input type="file" name="adsphoto[]" value="" class="inputbox" />


Просто adsphoto[] у меня вить определяется со следушей страницы где проиходит с controller.php где запросы вроде:

function ads_addsrv() {
$model =& $this->getModel( 'as_adsaddsrv' );
$post = JRequest::get( 'post' );
$files = JRequest::get( 'files' );
$images = $files['adsphoto'];
$imgCount = 1;

$obj = new stdClass();
$obj->publish = 0;
$obj->ads_view = 0;
$obj->date_start = date('Y-m-d');
$obj->date_end = date('Y-m-d', strtotime('+365 day'));
$obj->tip_servisa = $post['tip_servisa'];
$obj->dop_info = $post['dop_info'];
$imgNames = $model->loadImages($images);

if ($imgNames) {
foreach ($imgNames AS $img) {
eval('$obj->photo'.$imgCount.' = $img;');
$imgCount++;
}
}


if ($id = $model->adsAdd($obj)) {
$this->setRedirect( 'index.php?option=com_as_ads&view=as_adsmessage&adsid='.$id );
} else {
$this->setRedirect( 'index.php?option=com_as_ads&view=as_adslistsrv' );
JError::raiseWarning(500, JText::_('Error'));
}
}



ZSH
Елси я в правильном месте встаил тогда мне выдало
Array ( ) 1

Спустя 4 минуты, 25 секунд (12.08.2010 - 07:59) linker написал(а):
pantela
Млин, ну я же написал как.
<input type="hidden" name="MAX_FILE_SIZE" value="8096000"><input type="file" name="adsphoto[]" value="" class="inputbox" />
<input
type="hidden" name="MAX_FILE_SIZE" value="8096000"><input type="file" name="adsphoto[]" value="" class="inputbox" />
<input
type="hidden" name="MAX_FILE_SIZE" value="8096000"><input type="file" name="adsphoto[]" value="" class="inputbox" />
value="8096000" - это размер в байтах, можно заменить на свое

Спустя 3 минуты, 11 секунд (12.08.2010 - 08:03) pantela написал(а):
linker
Нет результата sad.gif
одно не понял почему name="MAX_FILE_SIZE" вроде надо имя поля присваивать...

ладно кчёрту обучение ,сделать бы щас как нибуь sad.gif

Спустя 10 минут, 56 секунд (12.08.2010 - 08:13) ZSH написал(а):
в index.php
echo '<pre>';
print_r($_FILES);
print_r($_POST);
echo '</pre>';


а редирект закоментируй

if ($id = $model->adsAdd($obj)) {
echo 'загрузилось'; //$this->setRedirect( 'index.php?option=com_as_ads&view=as_adsmessage&adsid='.$id );
} else {
echo 'ошибка'; //$this->setRedirect( 'index.php?option=com_as_ads&view=as_adslistsrv' );
//JError::raiseWarning(500, JText::_('Error'));

}

Спустя 4 минуты, 1 секунда (12.08.2010 - 08:18) linker написал(а):
Можешь показать print_r($images) что там внутрях?

Спустя 8 минут, 31 секунда (12.08.2010 - 08:26) ZSH написал(а):
$files = JRequest::get( 'files' );
$images = $files['adsphoto'];


походу там должен быть $_FILES['adsphoto']

можно для теста принудительно
$images = $_FILES['adsphoto']; хотя при чем здесь браузеры?
Мож IE массив както формирует по другому sad.gif

P.S. а версия IE какая?

Спустя 1 минута, 3 секунды (12.08.2010 - 08:27) pantela написал(а):
Уже что то... rolleyes.gif

Вывел:
print_r($_FILES);
print_r($_POST);
print_r($images);


в IE
Array
(
[
adsphoto] => Array
(
[
name] => Array
(
[
0] => aed167308e14570923573009f1a56121.jpg
[1] => bc81bf3488b0cb123ae40d54f3ef1375.png
[2] => 24d314bafd134ce743cb02f20e8f6ce8ab2.jpg
[3] => 3f5460c6f0c0c127c06021dea9f28694.jpg
[4] => 701e2fae8816df90092c250e7d890e46.jpg
)

[
type] => Array
(
[
0] => image/pjpeg
[1] => image/pjpeg
[2] => image/pjpeg
[3] => image/pjpeg
[4] => image/pjpeg
)

[
tmp_name] => Array
(
[
0] => Z:\tmp\php572.tmp
[1] => Z:\tmp\php573.tmp
[2] => Z:\tmp\php574.tmp
[3] => Z:\tmp\php575.tmp
[4] => Z:\tmp\php576.tmp
)

[
error] => Array
(
[
0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
)

[
size] => Array
(
[
0] => 15562
[1] => 27082
[2] => 30849
[3] => 25127
[4] => 14455
)

)

)

Array
(
[
tip_servisa] => 4
[dop_info] => dasdas
[option] => com_as_ads
[task] => ads_addsrv
[ads_submit] => Добавить
)
Array
(
[
name] => Array
(
[
0] => aed167308e14570923573009f1a56121.jpg
[1] => bc81bf3488b0cb123ae40d54f3ef1375.png
[2] => 24d314bafd134ce743cb02f20e8f6ce8ab2.jpg
[3] => 3f5460c6f0c0c127c06021dea9f28694.jpg
[4] => 701e2fae8816df90092c250e7d890e46.jpg
)

[
type] => Array
(
[
0] => image/pjpeg
[1] => image/pjpeg
[2] => image/pjpeg
[3] => image/pjpeg
[4] => image/pjpeg
)

[
tmp_name] => Array
(
[
0] => Z:\tmp\php572.tmp
[1] => Z:\tmp\php573.tmp
[2] => Z:\tmp\php574.tmp
[3] => Z:\tmp\php575.tmp
[4] => Z:\tmp\php576.tmp
)

[
error] => Array
(
[
0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
)

[
size] => Array
(
[
0] => 15562
[1] => 27082
[2] => 30849
[3] => 25127
[4] => 14455
)

)



OPERA
Array
(
[
adsphoto] => Array
(
[
name] => Array
(
[
0] => f123de76f45a15592155353ec3e48651.jpg
[1] => f3f35953f737212349e86f427caea5f7.jpg
[2] => d525830f430680702856d34ed50801d0.jpg
[3] => c90e3fc0ce21abfbbd1f8bce12033809.jpg
[4] => c85adec41b1cf083d95198c9ef0e1a21.jpg
)

[
type] => Array
(
[
0] => image/jpeg
[1] => image/jpeg
[2] => image/jpeg
[3] => image/jpeg
[4] => image/jpeg
)

[
tmp_name] => Array
(
[
0] => Z:\tmp\php577.tmp
[1] => Z:\tmp\php578.tmp
[2] => Z:\tmp\php579.tmp
[3] => Z:\tmp\php57A.tmp
[4] => Z:\tmp\php57B.tmp
)

[
error] => Array
(
[
0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
)

[
size] => Array
(
[
0] => 31778
[1] => 28769
[2] => 26434
[3] => 31928
[4] => 14401
)

)

)

Array
(
[
tip_servisa] => 3
[dop_info] => dasdsad
[option] => com_as_ads
[task] => ads_addsrv
[ads_submit] => Добавить
)
Array
(
[
name] => Array
(
[
0] => f123de76f45a15592155353ec3e48651.jpg
[1] => f3f35953f737212349e86f427caea5f7.jpg
[2] => d525830f430680702856d34ed50801d0.jpg
[3] => c90e3fc0ce21abfbbd1f8bce12033809.jpg
[4] => c85adec41b1cf083d95198c9ef0e1a21.jpg
)

[
type] => Array
(
[
0] => image/jpeg
[1] => image/jpeg
[2] => image/jpeg
[3] => image/jpeg
[4] => image/jpeg
)

[
tmp_name] => Array
(
[
0] => Z:\tmp\php577.tmp
[1] => Z:\tmp\php578.tmp
[2] => Z:\tmp\php579.tmp
[3] => Z:\tmp\php57A.tmp
[4] => Z:\tmp\php57B.tmp
)

[
error] => Array
(
[
0] => 0
[1] => 0
[2] => 0
[3] => 0
[4] => 0
)

[
size] => Array
(
[
0] => 31778
[1] => 28769
[2] => 26434
[3] => 31928
[4] => 14401
)

)


Как я понял тут отличие в "[type] => Array"

Спустя 2 минуты, 58 секунд (12.08.2010 - 08:30) ZSH написал(а):
function loadImages($images) {
$imgTypes = array('image/jpeg','image/pjpeg', 'image/gif', 'image/png'); // добавь тип
$imgList = array();
$imgName = '';

for ($i=0; $i<count($images['name']); $i++) {
if (in_array(strtolower($images['type'][$i]), $imgTypes)) {
$imgName = md5($images['name'][$i].mt_rand()).'.'.strtolower(array_pop(explode('.', $images['name'][$i])));
if (copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)) {
$imgList[] = $this->resizeImage(AS_ADS_IMG_PATH.$imgName, AS_ADS_IMG_PATH.$imgName);
}
}
}


if (!count($imgList))
return false;
else
return
$imgList;
}

Спустя 1 минута, 29 секунд (12.08.2010 - 08:32) linker написал(а):
Ну вроде все на месте. Смотри, в базе тоже должно быть все гуд.

Спустя 7 минут, 2 секунды (12.08.2010 - 08:39) pantela написал(а):
Офигеть... blink.gif

Тип добавил 'image/pjpeg', теперь всё ок.

Ну я не знаю как вас отблагодарить, 4 дня маюсь... а тут токой косяк, большое вам спасибо.

Вот только почему IE определяет так тип странно... huh.gif хотя кчёртку, тускай будет главной работает.

linker
Токой вопрос

Цитата
Во-первых, кто так учил копировать залитые файлы?
copy($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName)

Для этого есть специальная функция
if (is_uploaded_file($images['tmp_name'][$i]))
{
    move_uploaded_file($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName);
}


Почему желательно делать через функцию move_uploaded_file ? я так понимаю на прямую так переносится, а у меня типо копирования происхоит.
Но у меня тут водяной знак содится на изображение + сжатие, моэет поэтому у меня так сделанно ? rolleyes.gif

Спустя 4 минуты, 42 секунды (12.08.2010 - 08:43) linker написал(а):
Нет, не поэтому, потому что сжатие и водяной знак делаются уже после копирования. Просто так положено для работы с загружаемыми файлами, а is_uploaded_file() нужно для секьюрити. Хотя, для move_uploaded_file() не нужно такой проверки. Вместо copy() пиши просто
move_uploaded_file($images['tmp_name'][$i], AS_ADS_IMG_PATH.$imgName);

Спустя 6 минут, 36 секунд (12.08.2010 - 08:50) ZSH написал(а):
встречал я гдето что move_uploaded_file не работала типа доступа не хватало на перемещение файла, тоесть как я понял при перемещениии она удаляет и временного хранилища файл а php не разрешает

хотя хрен его знает почему не разбирался особо заменил на copy.

Спустя 1 минута, 31 секунда (12.08.2010 - 08:51) pantela написал(а):
linker
Ок спасибо переделаю. Но получается через move_uploaded_file для секрити чего шелла типо что бы не залили? или я уже мозги вам крою )))


linkerZSH
+1 по карме
rolleyes.gif спс.

вот только всёже почему IE видет тип pjpeg странно. По итогам гугла как я понял проблемма весьма актуальная, браузер глучит. ph34r.gif

Спустя 2 минуты, 52 секунды (12.08.2010 - 08:54) linker написал(а):
ZSH
Все рулится правами на папку, где хранятся временные файлы. Заливаются они туда под правами веб-сервера, если в папку запрещена запись, то никакого аплоада вообще не произойдет. Если файло залито нормально, то никаких проблем с move_uploaded_file() не будет, ессесно нужны права на запись в папку куда будет перемещаться файл.
P.S. Использовать для этого copy() - невалидно и противопоказано.

Спустя 1 минута, 51 секунда (12.08.2010 - 08:56) linker написал(а):
move_uploaded_file() проверяет, а действительно ли файл был залит по HTTP.
IE вообще редкая гадость.

Спустя 3 минуты, 11 секунд (12.08.2010 - 08:59) ZSH написал(а):
так это я то понял, но если у хостера параноя и не стоят права на папку tmp, а лежит она ниже корня то чего делать sad.gif

Спустя 4 минуты (12.08.2010 - 09:03) linker написал(а):
Это наиредчайшая паранойя, которая выливается в невозможность вообще в принципе аплоадить файлы.

Спустя 6 минут, 6 секунд (12.08.2010 - 09:09) pantela написал(а):
ну можно вьт вместо tmp создать самому ручками папку и её сделать как временной и в функции прописать её. rolleyes.gif

Спустя 9 минут, 54 секунды (12.08.2010 - 09:19) linker написал(а):
pantela
Для этого надо либо править php.ini, т.е. иметь к нему доступ. Либо указывать через .htaccess, но опять если в конфиге апача не прописано аля AllowOverride none. Либо через функцию init_set(), опять же если она не запрещена.

Спустя 2 минуты (12.08.2010 - 09:21) pantela написал(а):
Оффтоп ))

Но я тоже был близок к реению, я ещё в первом посту написал в коком касяк )) Значит не страшный нууб я tongue.gif ))

Спустя 3 минуты, 13 секунд (12.08.2010 - 09:24) Basili4 написал(а):
pantela

Быть нубом не страшно. страшно быть им и не признавать этого.

о Афоризм надо его в подпись smile.gif

Спустя 1 минута, 1 секунда (12.08.2010 - 09:26) linker написал(а):
Basili4
Это не нуб, это ламер уже.


_____________
Как сшить рюкзак
Быстрый ответ:

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