Изображения загружаются в неправильном порядке

nonipiter

Пользователь
Регистрация
01.01.70
Сообщения
2
Реакции
0
Баллы
1
Адрес
San Marino
Я знаю, что это старый сценарий (старый способ ведения дел). Скрипт работает, однако изображения загружаются не в том порядке. Я не совсем уверен, но мне кажется, что они загружают от последнего к первому, а не от первого к последнему. Что заставляет его это делать?
Изображения загружаются в неправильном порядке
Код:
if (count($_FILES['pic']['tmp_name']))
{
$ipval = ipval();
$uploaderror = 0;
$uploadcount = 0;
$errorMessages = array();
foreach ($_FILES['pic']['tmp_name'] as $k=>$tmpfile)
{
if ($tmpfile)
{
$thisfile = array("name"=>$_FILES['pic']['name'][$k],
"tmp_name"=>$_FILES['pic']['tmp_name'][$k],
"size"=>$_FILES['pic']['size'][$k],
"type"=>$_FILES['pic']['type'][$k],
"error"=>$_FILES['pic']['error'][$k]);
if ($_FILES['pic']['size'][$k] > $pic_maxsize*1000)
{
$errorMessages[] = $thisfile['name'] . " - " . $lang['ERROR_UPLOAD_PIC_TOO_BIG'];
$uploaderror++;
}
elseif (!isValidImage($thisfile))
{
$errorMessages[] = $thisfile['name'] . " - " . $lang['ERROR_UPLOAD_PIC_BAD_FILETYPE'];
$uploaderror++;
}
else
{
$newfile = SaveUploadFile($thisfile, "{$path_escape}{$datadir['adpics']}", TRUE, $images_max_width, $images_max_height);
if($newfile)
{
$sql = "INSERT INTO $t_adpics
SET adid = $adid,
picfile = '$newfile'";
mysql_query($sql);
if (mysql_error())
{
...
Код (разметка):
 

ibzgoba

Пользователь
Регистрация
29.08.12
Сообщения
3
Реакции
0
Баллы
1
@deathshadow, сценарий не мой. Мне бы хотелось сесть и написать другой сценарий, более легкий. Я просто не могу. Возможно, когда-нибудь я найму кого-нибудь, чтобы он вместе со мной просмотрел сценарий и кое-что изменил.

На самом деле, в сценарии, который я использую, он перечисляется. Другой пример с пустым [] я вытащил из исходного сценария, но спасибо, что указали на него. Как я уже сказал, я выбрал неправильный путь. Потратил 3 дня, пытаясь разобраться. Каким-то образом я упустил тот факт, что проблема была не в загрузке, а в том, что другой скрипт с p.picfile КАК файл picfile получал изображения. Это было как бы случайно (почти всегда последнее изображение, а не первое).
 

ISR1

Пользователь
Регистрация
05.03.12
Сообщения
3
Реакции
0
Баллы
1
Когда вы говорите HTML-код, вы имеете в виду код входного файла? Это выглядит следующим образом:
Код:
 <?php for ($i=1; $i<=$pic_count; $i++) { ?> <input type="file" name="pic[]" size="100"><br> <?php } ?>
Код (разметка):
 

crazylama

Пользователь
Регистрация
29.10.15
Сообщения
4
Реакции
0
Баллы
1
Если вас беспокоит порядок, ДАЙТЕ ИМ ПРИКАЗ вместо автоматического []

Код:
<?php
for ($i = 0; $i < $pic_count; $i++) echo '
<input type="file" name="pic[', $i, ']" size="100"><br>';
?>
Код (разметка): ... конец проблемы. Заставит их индексироваться 0.. ($pic_count - 1)

Кроме того, избегайте начинать с одного... на самом деле такие вещи, как FOR, не предназначены для работы.

В наши дни я видел много людей, слепо полагающихся на []; интересно, я думаю, что знаю, что происходит. В некоторых браузерах, если у вас есть несколько type="file" и вы выбираете их не по порядку, [] заполняется в том порядке, в котором вы их заполнили!

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

Конечно, если вы не заполните некоторые из них, остерегайтесь пробелов! В этом случае Foreach — ваш друг.

О, и что вы передаете переменные в строке запроса? Вызывает тревогу... как и запрос с таким большим количеством соединений в целом... удаляет реляционные базы данных из реляционных баз данных.
 

monpasye

Пользователь
Регистрация
01.01.70
Сообщения
2
Реакции
0
Баллы
1
Кто-то предложил сделать так:

«Один из способов обеспечить согласованность порядка — отправить на сервер при загрузке другую переменную, содержащую массив имен файлов по порядку, а затем основывать свой порядок INSERT на этом массиве, а не на порядке массива $_FILES».

Не знаю, как это сделать. Кто-нибудь знает?
 

elektrik-skazochnik

Пользователь
Регистрация
05.02.11
Сообщения
3
Реакции
0
Баллы
1
Мне интересно, не проблема ли проблема не в том, как загружаются изображения, а, поскольку я вижу, что порядок постоянно меняется на обратный, возможно, мне нужно изменить некоторый код в скрипте, который их обслуживает: ASC вместо DESC. Но я еще не уверен.
 

Елена3

Пользователь
Регистрация
06.03.12
Сообщения
3
Реакции
0
Баллы
1
Если дело в том, что они всегда находятся в прямо противоположном порядке, то это весьма вероятный сценарий. Если бы то, что вы сказали в начале, было правдой, можно было бы ожидать какой-то случайности или использования array_reverse() в сценарии.
 

UkrGroup

Пользователь
Регистрация
11.03.11
Сообщения
3
Реакции
0
Баллы
1
@PoPSiCLe мне нужно сказать ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ $t_adpics p ON a.adid = p.adid И p.isevent = '0' сортироваться по ASC, а все остальное по DESC (который уже есть). Не уверен, что знаю как. Я перепробовал все что угодно, ничего не помогало. острый это то, что следует использовать, чтобы разобраться. Когда я добавляю ЗАКАЗАТЬ ПО picid ASC где-нибудь там это просто выдает мне ошибку. Как правильно иметь два ORDER BY?

Код:
"SELECT a.*, ct.cityname, UNIX_TIMESTAMP(a.createdon) AS timestamp, feat.adid AS isfeat,
COUNT(*) AS piccount, p.picfile AS picfile, scat.subcatname, scat.catid, cat.catname
FROM $t_ads a
INNER JOIN $t_featured feat ON a.adid = feat.adid AND feat.adtype = 'A' AND feat.featuredtill >= NOW()
INNER JOIN $t_cities ct ON a.cityid = ct.cityid
INNER JOIN $t_subcats scat ON a.subcatid = scat.subcatid
INNER JOIN $t_cats cat ON scat.catid = cat.catid
LEFT OUTER JOIN $t_adpics p ON a.adid = p.adid AND p.isevent = '0'
WHERE $visibility_condn
$loc_condn
GROUP BY a.adid
ORDER BY a.createdon DESC
LIMIT $latest_featured_ads_count";
Код (разметка): PS Думаю, мне еще нужно добавить этот picid где-то там после SELECT.
 

ramires1

Пользователь
Регистрация
20.09.10
Сообщения
4
Реакции
0
Баллы
1
Просто измените строку ORDER BY на:
Код:
ORDER BY a.picid ASC, a.createdon DESC
Код (разметка): Разумеется, предполагается, что picid является частью таблицы, имеющей псевдоним a. Если это не так, вам придется добавить его, прежде чем он станет доступен.
 

SilverOK

Пользователь
Регистрация
01.01.70
Сообщения
3
Реакции
0
Баллы
1
Опубликуйте свой HTML/PHP-код. Вы, должно быть, что-то делаете, чтобы их перепутать. Согласно стандарты:
 
Сверху Снизу