|
|
|
| Существуют массивы вида:
$a=array('элемент1','элемент2','элемент3');
$b=array('элемент21','элемент22','элемент23');
$c=array('элемент31','элемент32','элемент33');
|
Необходимо сформировать строку вида:
$string="('элемент1','элемент21','элемент31'),('элемент2','элемент22','элемент32'),('элемент3','элемент23','элемент33')";
|
Вроде ничего сложного, но не могу допереть. Подскажите! | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 07:57)
| | И где же многомерность?
<?
$string = '('.implode(',', $a).'),('.implode(',', $b). //и т.д.
|
| |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 11:28)
| | Таким образом получится строка:
<?
$string="('элемент1','элемент2','элемент3'),('элемент21','элемент22','элемент23'), и т.д"
|
А по условию нужно не так (см. выше). | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 12:10)
| | И чем ваше условие отличается от приведенного? | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 12:18)
| | В моём примере в первых скобках идут первые элементы каждого из массивов, во второрых - вторые и т.д.
В Вашем примере в первых скобках идут ВСЕ элементы первого массива, во второых ВСЕ - второго и т.д.
Интересно найти принципиальный способ решения задачи т.к. массивов может быть больше. | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 12:27)
| | и.д. в комментариях, это значит, что писать одно и тоже много раз мне просто лень, и думаю, если у вас знания есть есть хоть минимальные, вы сами без труда закончите строку кода, добавив в конце закрывающую скобку. Нежели из примера трудно понять принцип формирования строки?
Что касается много массивов, то откуда и из чего они у вас плодятся... | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 12:35)
| | Речь идёт о загрузке изображения через HTML-форму и занесении данных о нём в базу MySQLi. При загрузке предоставляется возможность добавить подпись к изображению и одновременно создаётся его миниатюра. Данные о местоположении изображения, его миниатюры и сама подпись должны сохраняться в базе. Поскольку реализована возможность одновременной загрузки нескольких файлов указанные данные представляют собой массивы.
Именно тут у меня и проблемма, не могу представить их в виде строки корректного запроса SQL. Получается как в Вашем примере, а надо чтобы сначала шли первые ключи потом вторые и т.д.
Как-то у меня туманно получается, но лучше объяснить не могу. | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 12:53)
| | Элементы формы на клиенте, это массив, и получаете вы форму как массив параметров. А это означает, что при грамотном именовании полей формы у вас никак не получится куча разрозненных массивов. | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 07:57)
| | возможно так?
foreach ($a as $key=>$value) {
$string[] = "('".$value."','".$b[$key]."','".$c[$key]."')";
}
echo implode(",",$string);
|
| |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 07:57)
| | Полное решение:
<?php
//Вводим функцию транспонирования 2d массива, я ее честно нагуглил
function array_transpon($f_array)
{
if (!is_array($f_array)) return "ERROR в функции array_transpon(). Аргумент - не массив.";
foreach ($f_array as $row => $cval)
{
if (is_array($cval)) foreach ($cval as $col => $val) $new_array[$col][$row] = $val;
else $new_array[0][$row] = $cval;
}
return $new_array;
}
//Берем данные
$a = array('элемент1','элемент2','элемент3');
$b = array('элемент21','элемент22','элемент23');
$c = array('элемент31','элемент32','элемент33');
//Собираем 2d массив из данных
$a2d = array($a, $b, $c);
//Транспонируем (оборачиваем вокруг главной диагонали)
$a2d = array_transpon($a2d);
//Создаем одномерный массив для частей строк
$strA = array();
//Каждую строку массива превращаем в просто строку с форматированием и кладем в массив строк
foreach($a2d as $as) $strA[] = "('" . implode("','", $as) . "')";
//Массив строк превращаем в строку с разделителем запятой
$str = implode(",", $strA);
echo $str;
//('элемент1','элемент21','элемент31'),('элемент2','элемент22','элемент32'),('элемент3','элемент23','элемент33')
?>
|
| |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2012 в 13:20)
| | И для чего все это, если автор пишет, что он получает и из чего? | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 13:31)
| | Скучно... | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2012 в 13:33)
| | Ну это еще не повод писать бог знает что и для чего, да еще выдавая за готовое решение. Начинать надо с того, чтобы подумать над представлением элементов формы, и ваше решение совсем не к месту. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 13:37)
| | Решение писать я начал раньше, чем, автор что-то написал о конкретном применении. Задача, выданная в старте топика, решена в общем виде.
А вот формы, их верное именование и обработка последующих массивов – уже другая задача. И решается в другой ветке обсуждения. | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2012 в 13:42)
| | Решение как раз и надо предлагать исходя из условий, и это не какая либо иная ветка обсуждения, это корень всего обсуждения. Впрочем, и ваше решение страдает излишеством. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 13:45)
| | Страдает, еще бы не страдать. Зато высшая математика пригодилась впервые в жизни... через 10 лет после окончания университета. Хоть какой-то вин. | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2012 в 13:52)
| | Понятно ) Ну а что же тогда забываем о математике и не пишем:
$a = $a + $b + $c ... ? | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 13:53)
| | Сложение векторов?! | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2012 в 13:59)
| | Это объединение массивов. Вы же все равно формируете строку в цикле, почему тогда не сделать один массив и использовать всего один проход по нему?
Ну это так, к слову, и можно забыть. Над формой надо сперва подумать, а затем уже заниматься обработкой ее данных. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 14:04)
| | да не, здесь же три массива, причем объединять их в строки надо поиндексно, а не подряд. Толку-то от сложения? | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2012 в 14:06)
| | Это вам надо почитать о функции array_merge(), в ней объясняется поведение при сложении в зависимости от ключей массивов.
А объединить массивы, это значит один в конец другого, а так как известно число элементов каждого массива, и которое одинаково для всех, то при формировании строки в цикле не составит труда знать в каком месте поставить скобки. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 14:21)
| | Вот этим и отличается решение в частном и в общем случае. Известен или неизвестен ли заранее размер. | |
|
|
|
|
|
|
|
для: DJ Paltus
(18.10.2012 в 14:29)
| | Конечно известен, если речь идет о формировании строки для многострочного запроса. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 14:37)
| | Проблемма ещё и в том, что имя изображения извлекается из массива $_FILES, а подпись из $_POST. И как связать изображение с именно его подписью если при закачке одного из файлов произойдёт сбой или пользователь укажет недопустимый файл???
Вот код формы:
<form action="" method="POST" enctype="multipart/form-data">
<label>Выберите файл:</label><br />
<input type="file" name="image[]">
<textarea name="caption[]" cols="100" style="width:350px;"></textarea><br />
<hr />
<input type="file" name="image[]">
<textarea name="caption[]" cols="100" style="width:350px;"></textarea><br />
<hr />
<input type="file" name="image[]">
<textarea name="caption[]" cols="100" style="width:350px;"></textarea><br />
<hr />
<input type="submit" name="go" value="Закачать">
<hr>
</form>
|
| |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 16:44)
| | А вы выведите массивы $_POST и $_FILES на экран, и сможете заметить, что индексы элементов массива будут соответствовать порядку элементов в форме.
Возникает вопрос - откуда у вас взялись три массива (в примере первого поста) при такой организации формы? | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 16:52)
| | При загрузке изображения автоматически создаётся его миниатюра в другой папке с именем [имя_изображения_суффикс]. Один массив с именами изображений, второй с именами миниатюр, третий подписи к изображениям. | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 16:58)
| | Тогда не массивы в цикле надо создавать, а одну строку для многострочного запроса. Но надо определиться с приоритетами, тем более вы спрашиваете о сбоях.
Что первично наличие именно трех изображений или сколько автор пожелает?
Как поступать хотите при ошибке загрузки одного/двух изображений при наличии подписи к ним - возвращать всю форму назад или только то, что не загружено?
В общем надо определиться с механизмом диалога с пользователем, с вашими всеми условиями, а уж потом рисовать код загрузки. И делать это надо не просто implode(), этого мало, нужно еще экранировать и заключать в кавычки строки. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 16:52)
| | >А вы выведите массивы $_POST и $_FILES на экран, и сможете заметить, что индексы элементов массива будут соответствовать порядку элементов в форме.
>Возникает вопрос - откуда у вас взялись три массива (в примере первого поста) при такой организации формы?
Да, и массивы я вывел. Проблемма (ещё раз пишу) в ситуации, когда с одним из загружаемых пользователем изображений возникнут проблеммы (к примеру, оно будет иметь недопустимый формат). В этом случае файлы на сервере созданы не будут, как следствие в массивах с именами изображения и его миниатюры будет меньше элементов чем в массиве с подписями. | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 17:03)
| | Да попробуйте уже. Файлы созданы не будут. Но форма-то заполнена и передана! Кто сказал, что индекс не пройдет? | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 17:03)
| | В массиве не будет меньше элементов, если вы определитесь с условиями, о которых я говорил выше. Кроме этого, у вас явно чего-то не достает - надо полагать, что ваши изображения существуют не сами по себе, а к чему-то привязаны, например, к пользователю его загружающему. А если так, то кроме этих трех значений должно быть еще одно значение - id пользователя, если вы хотите делать многострочный запрос. Иначе не получится, если сперва запрос, а потом привязка, например, занесение добавленных записей в таблицу связей, так как в этом случае в сможете узнать id только последней записи из многостраничного запроса.
Взять и что-то сразу посоветовать конкретное вам, как это сделать, нельзя, так как неизвестно многое. Ваша задача должна решаться комплексно, как составляющая из нескольких макро задач: диалог с пользователем основывающийся на ваших условиях, а он может предполагать или нет временное хранение удачно загруженного; связь загруженного с родителем, которая будет определять метод добавления в базу; непосредственная подготовка данных, включая создание малых копий изображений; и т.п.. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 17:44)
| | Нет, речь идёт о загрузке картинок в фотогалерею, они не привязаны к пользователю, id задаётся автоматически.
В принципе, у меня есть идея кода для выполнения этой задачи. Проблемма в том, что всем этим делом занимается пользовательский класс (мой), два массива (имя файла и имя миниатюры) создаются в protected-функции загружающей файлы, функция вызывается в цикле из public-функции, массив $_POST циклически обрабатывать не надо, поэтому он обрабатывается в public-функции. Но как в public-функции вызвать массивы созданные в protected??? | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 18:22)
| | Переписывайте класс, тем более он ваш, что хотите делайте, но вы сперва определитесь с тем, что вам надо. Вот вы пишите, а что если изображение не того формата? Действительно, а что, как вы реагировать на это собираетесь?
Я не в курсе того, что за идеи у вас, а гадать дело не благородное. А именно от ваших действий будет зависеть обработка. Выбросите вы свой класс на время куда либо в угол, напишите отдельный код, который полностью будет выполнять все задачи при этой загрузке. А загрузка нескольких файлов, это именно цикл, но вот вопрос какой? Если даже и галерея, то разве это означает, что все ее фото свалены в одну большую кучу, не привязаны ни к чему? Это не галерея, это куча неструктурированного мусора.
Классы хороши там, где они действительно нужны, и очень хорошо, если вы понимаете, что это такое. В противном случае писать класс, ради класса, в котором сами разобраться не можете, ну это... | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 18:34)
| | Вобщем класс я переписал. Массивы формируются как надо. Вот код обработки:
<?
foreach($_POST['caption'] as $index){
$caption[]=$index;
}
$files=$this->_files;
$mini=$this->_miniatures;
$record1=array(); $record2=array(); $record3=array();
if (count($files)==count($mini) && count($caption)==count($mini)){
$n=(count($files)-1);
for ($i=0;$i=$n;$i++){
$record1[]="'".$files[$i]."'";
$record2[]="'".$mini[$i]."'";
$record3[]="'".$caption[$i]."'";
}
$allrec="(".implode(',',$record1)."),(".implode(',',$record2)."),(".implode(',',$record3).")";
print $allrec;
}
|
Массивы $files, $mini и $caption - это имена файлов, имена миниатюр и подписи соответственно
Но при отправке данных через форму выдаёт: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes) in J:\xampp\htdocs\mysite\includes\FotoClass.php on line 96
Понимаю, что мой код не идеален, но я университетов не кончал, php месяц как учу. Подскажите, что не так? | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 19:11)
| | И зачем вам нужно три массива? Я вам вроде бы уже говорил, что строковые данные приходящие извне нужно обязательно экранировать перед помещением в базу - mysql_real_escape_string().
Ошибка означает, что превышен размер памяти отведенный на эти операции, и они определяются в phhp.ini - upload_max_filesize и post_max_size.
Если только начали изучать РНР, то что вы сразу в ООП, не рановато ли, не понимая и не зная многого? | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 19:26)
| | Сия цифра равна 128Мб, т.е. на обрабатку цикла выполняющего обход трёх массивов по два строковых значения в каждом не хватает ТАКОГО размера памяти??? Я, вероятно что-то недопонимаю...
В базу я ещё ничего не пытался поместить, я только хотел вывести после вышеприведённого кода но указанная ошибка помешала. Как её исправить??? | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 19:34)
| | У вас загружается три графических файла, а это могут быть внушительные размеры. Один из указанных выше параметров определяет максимальный размер загружаемого файла, другой максимальный размер массива POST. Кроме этого, оперируя графикой, нужно помнить еще и о доступной оперативной памяти, которой тоже может не хватать. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 19:42)
| | Просто перед этим я выключил блок
<?
$record1=array(); $record2=array(); $record3=array();
if (count($files)==count($mini) && count($caption)==count($mini)){
$n=(count($files)-1);
for ($i=0;$i=$n;$i++){
$record1[]="'".$files[$i]."'";
$record2[]="'".$mini[$i]."'";
$record3[]="'".$caption[$i]."'";
}
$allrec="(".implode(',',$record1)."),(".implode(',',$record2)."),(".implode(',',$record3).")";
print $allrec;
}
|
и вывел массивы $files? $mini и $caption. Все было нормально: создлись файлы, миниатюры и всё отобразилось как я и ожидал. А после включения указанного кода появилась эта ошибка. Строка указанная в ней (96) соответствует строке кода
<?
$record3[]="'".$caption[$i]."'";
|
Не понимаю... | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 19:53)
| | Ошибка гласит, что память исчерпана, а это означает, что она у вас забита под завязку. Почему, сказать трудно, не видя общей картины. Например, вы не освобождаете память при создании копий изображений, а так как у вас оно не одно, и в цикле все происходит, плюс переменные, данные, а это все тоже память... | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 20:04)
| | Я удаляю ресурсы изображений и миниатюр через imagedestroy. Нужно делать что-то ещё? | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 20:14)
| | Ну что вам сказать, если трудно судить по этому участку кода? Что за переменная captoin, что за размер ее и т.д., я же не знаю... Проверьте отдельно ее. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 20:18)
| | $caption - это массив содержащий подписи к изображениям (короткие строки текста). | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 20:14)
| | Вот снова выключил упомянутый блок кода, - всё работает: изображения создаются, миниатюры тоже, все массивы корректно отображаются... никаких ошибок.
Значит дело в этом коде :( | |
|
|
|
|
|
|
|
для: dozent
(18.10.2012 в 20:19)
| | Я вам уже говорил - классы в помойку (на время). Опишите всю задачу полностью, ведь вы на поставленные вам вопросы так и не ответили, а значит решаете задачу методом склеивания чего-то с чем-то, что вполне может вылиться в ошибку.
Напишите просто, обычном кодом, отрепетируйте, а уж только потом оформляйте хоть классами, хоть чем угодно.
Если caption это еще массив, то несложно его проверить. Расход памяти можно контролировать на каждом участке кода, если невозможно определить узкое место проверкой отдельных данных. | |
|
|
|
|
|
|
|
для: confirm
(18.10.2012 в 20:29)
| | В принципе разобрался с обходом массива.
Задача была сформировать из трёх (или более) массивов строку вида:
('первый_элемент_первого_массива','первый_элемент_второго_массива','первый_элемент_третьего_массива'),('второй_элемент_первого_массива','второй_элемент_второго_массива','второй_элемент_третьего_массива') и т.д.
Сделал так:
<?
foreach($_POST['caption'] as $index){
$caption[]=$index;
}
$files=$this->_files;
$mini=$this->_miniatures;
if (count($files)==count($mini) && count($caption)==count($mini)){
$allrec='';
foreach ($files as $i =>$num){
$record1="'".$num."'";
$record2="'".$mini[$i]."'";
$record3="'".$caption[$i]."'";
$allrec.="(".$record1.",".$record2.",".$record3.")";
}
$host='localhost';
$db='church';
$user='changer';
$psw='writer';
$conn=new MySQLi($host,$user,$psw,$db) or die ('Невозможно открыть источник.');
$sql="INSERT `images`(`files`,`mini`,`caption`) VALUES ".$conn->real_escape_string($allrec);
$result=$conn->query($sql);
/*строка 108*/ $r=$result->affected_rows;
print($sql.$r);
|
Теперь друга проблемма.
На выходе получил:
Notice: Trying to get property of non-object in J:\xampp\htdocs\mysite\includes\FotoClass.php on line 108
INSERT `images`(`files`,`mini`,`caption`) VALUES ('Kir_1.jpg','Kir_1_thumb.jpg','первая подпись')('SS100357_20.jpg','SS100357_20_thumb.jpg','вторая подпись')
Т.е., насколько я вижу, SQL-запрос сформирован корректно, но записи в базу вставлены не были... Не могу постичь почему??? | |
|
|
|
|
|
|
|
для: dozent
(20.10.2012 в 13:56)
| | Вам говорили, и вы должны были прочесть о том, что функция real_escape_string(), это для обработки данных. А вы что обрабатываете?
<?
$s = '("aaa","bbb","ccc")';
echo mysql_real_escape_string($s).'<br>';
$s = '("'.mysql_real_escape_string('a"aa').'",
"'.mysql_real_escape_string('bbb').'",
"'.mysql_real_escape_string('ccc').'")';
echo $s.'<br>';
| Во что превратиться msql выражение после вашего экранирования? | |
|
|
|
|
|
|
|
для: confirm
(20.10.2012 в 15:50)
| | Вобщем изменил код на такой:
<?
foreach($_POST['caption'] as $index){
$caption[]=$index;
}
$files=$this->_files;
$mini=$this->_miniatures;
if (count($files)==count($mini) && count($caption)==count($mini)){
$allrec='';
foreach ($files as $i =>$num){
$record1="'".$num."'";
$record2="'".$mini[$i]."'";
$record3="'".$caption[$i]."'";
$allrec[]="(".$record1.",".$record2.",".$record3.")";
}
$allrecords=implode(',',$allrec);
$host='localhost';
$db='church';
$user='changer';
$psw='writer';
$conn=new MySQLi($host,$user,$psw,$db) or die ('Невозможно открыть источник.');
//$allrecords=mysqli_real_escape_string($conn,$allrecords);
$sql="INSERT `church`.`images`(`files`,`mini`,`caption`) VALUES $allrecords";
mysqli_query($conn,$sql);// or die('запрос не выполнен.');
$r=mysqli_affected_rows($conn);
print($sql.$r);
}
|
Всё работает, записи вносятся в базу. Но если включить
<?$allrecords=mysqli_real_escape_string($conn,$allrecords);
| , то mysqli_affected_rows($conn); возвращает -1 ???
Не объясните, где я туповат? | |
|
|
|
|
|
|
|
для: dozent
(20.10.2012 в 16:46)
| | Вам сколько раз еще повторить, что экранировать надо данные, а не SQL выражение, чтобы вы это поняли? Если $num, это вложенный массив массива $files, то зачем ключ $i в его проходе?
<?
$allrec='';
foreach ($files as $num) $allrec .= "('".implode("','" array_map('mysql_real_escape_string', $num))."'),";
$allrec = rtrim($allrec, ',');
echio $allrec; //проверяем, вот так должны выглядеть строки параметров запроса,
//а не так как вы над ними издеваетесь.
|
| |
|
|
|
|
|
|
|
для: confirm
(20.10.2012 в 17:03)
| | Сделал так:
<?
$host='localhost';
$db='church';
$user='changer';
$psw='writer';
$conn=new MySQLi($host,$user,$psw,$db) or die ('Невозможно открыть источник.');
foreach($_POST['caption'] as $index){
$caption[]=$index;
}
$files=$this->_files;
$mini=$this->_miniatures;
//if (count($files)==count($mini) && count($caption)<=count($mini)){
foreach ($files as $i=>$num){
$record1="'".mysqli_real_escape_string($conn,$num)."'";
$record2="'".mysqli_real_escape_string($conn,$mini[$i])."'";
$record3="'".mysqli_real_escape_string($conn,$caption[$i])."'";
$allrec[]="(".$record1.",".$record2.",".$record3.")";
}
$allrecords=implode(',',$allrec);
$sql="INSERT `church`.`images`(`files`,`mini`,`caption`) VALUES $allrecords";
mysqli_query($conn,$sql);// or die('запрос не выполнен.');
|
Работает!
$num - это не вложенный массив массива $files. $files, $mini и $caption - это одномерные массивы, содержащие: имена файлов изображений, миниатюр и подписи к ним; соответственно. Отсюда и необходимость (на мой взгляд) в ключе $i.
Скажите, теперь всё правильно? | |
|
|
|
|
|
|
|
для: dozent
(20.10.2012 в 18:14)
| | Бардак какой-то, а не код, что еще можно сказать. Вы втюрились в объекты, ради объектов, при этом совсем не понимая многих вещей. У вас нет решения задачи вашей, у вас склеивание кусов чего-то, в чем вы сами путаетесь. У вас даже именование переменных совсем не отражают их сути.
Еще раз напоминаю - вы не ответили не на один поставленный вам вопрос. А ведь загрузка файлов, которые требуют проверки и реакции на эту проверку, да еще сопутствующих данных для этих файлов, это диалог с пользователем в первую очередь. У вас его нет. У вас вообще ничего нет по большому счету, сейчас вы что-то сляпали, заработало, на том и остановились.
А ведь этот диалог, загрузку, обработку, работу над ошибками, можно написать одним единственным циклом, даже без привлечения для этого функций! И в этом единственном проходе можно было разобраться, что лишнее, что необходимо добавить, найти места узкие. И только после это, с пониманием того, что вы делаете, можно уже писать нечто разделенное на фрагменты, если только в этом есть необходимость, или если эти фрагменты универсальны и могут использовать и в других местах.
Вот этого у вас как раз и нет - понимания. | |
|
|
|
|
|
|
|
для: confirm
(20.10.2012 в 18:44)
| | Абыдно, да...:(((
Вообще, это меня один знакомый попросил. У них сайт какой-то христианской общины и когда происходят какие-нибудь события (встречи, приезды деятелей, праздники там всякие) они выкладывают фотки с этих мероприятий на сайт в фотогалерею. По существу это, как вы и писали свалка, фотки ни к чему не привязаны, просто добавленные последними отображаются первыми. Вот и всё. С заливкой всего этого дела на хостинг у них проблеммы (университетов тоже не кончали, с компами не на ты). Вот он и попросил сделать ему что-то вроде панели админа с возможностью загрузки файлов (чтоб просто выбрал их в полях, добавил подпись и ткнул "Закачать", а дальше всё само). Смею надеяться, что с поставленной задачей я справился: фотки сохраняются, миниатюры делаются и всё это вместе с подписями заносится в базу, о чем вылезает уведомление. Выполняется проверка на соответствие mime-типа файлов и на недопустимость повтора имён в директории.
Конечно код не идеален, так я и не проффи... пока. Хотелось бы улучшить , я надеюсь, это впереди!
А ООП я использовал не из-за восторженных чувств, а потому что не знаю как еще предать переменные (в моём случае массивы) из одной функции в другую, кроме как через свойства класса. | |
|
|
|
|
|
|
|
для: dozent
(20.10.2012 в 20:02)
| | Нет у вас никакого ООП по большому счету. Но не в этом дело.
Не сможете научиться видеть задачу, разбивать ее на составляющие, и только потом находить для нее инструменты, значит так и останетесь на стадии "пока". Ваш код это полный бардак, в котором добрая часть лишнее, именно потому, что это не решение задачи, которую вы не видите, а куски по наитию. | |
|
|
|
|