Есть вот такой совершенно не замечательный код. Пользователь в зависимости от преключателя option может выбрать один из двух сетов картинок, каждая из которых является ссылкой на исполнение. PHP: <? if ($myinfo->option==1) { $ob="1.jpg,2.jpg,3.jpg,4.jpg,5.jpg";$ob=explode(',',$ob); }else{ $ob="1.jpg,2.jpg,3.jpg,4.jpg,5.jpg";$ob=explode(',',$ob); } foreach ($ob as $key=>$value) { ?> <a href="main.php?setimage=<? echo $value; ?>"><IMG SRC="http://localhost/photos/<? echo $myinfo->option; ?>/<? echo $value; ?>");'></a> <? } ?> Вопрос первый - где в этом коде закрыть дыру, из за которой пользователь подставив в конечную ссылку http://localhost/main.php?setimage=свой_код Может подставить туда что угодно, парралельно имея возможность полазить внутри моих файлов. Вопрос второй - как в этом коде поставить проверку, которая бы, например, после каждых 7 изображений (ну когда их станет больше) делала бы перенос строки. А то всё время переносятся поштучно...
Это чё? Если $myinfo->option равно единице, то делаем ..., иначе делаем то же самое? Перенос: PHP: <? if ($key%7 == 0){ echo '<br />'; } Если ключ кратен семи (7, 14, 21 и т.д.), то делаем перенос. Проверяй $_GET['setimage'] на существование файла в каталоге photos. Также проверяй эту переменную на две точки в содержании, иначе могут написать что-то типа такого: http://localhost/main.php?setimage=../../пароли.txt
Пока на странице рыба - выглядит одинаково. А по замыслу - option - номер папки в которой лежат фото. А далее - перечень обьектов в папке в код, и он в зависимости от опции выдаёт в эфир пачку картинок с ссылками. В идеале хотелось бы это как то оптимизировать, чтобы оно само хавало картинки, заброшенные в папку и выдавало их на экран по тому же условию - но пока не знаю как это сделать. Определенный тупик еще вызывает задание - в будущем часть этих фото должна будет быть доступной пользователю, если выполняется option2, option3 etc как дополнительные условия... Сильно ли проблемно написать подобный код?
Lopar, листинг директории проще всего (да и правильнее всего) сделать функцией glob(): PHP: <? print_r(glob('photos/*.jpg')); Apple, в скобках в ифах у меня тока такое: PHP: <? if ($some or ($var = func())){} // или if (($some 1 and $some2) or $some3) Отрицание за скобку выношу крайне-крайне редко. Хотя и вариант с == 0 мне тоже никогда не нравился, но твой вариант с вынесением отрицания за скобку не нравится ещё больше.
имеется код. PHP: foreach (glob("img/path/".$option."/*.jpg") as $ob) {echo $ob."<br>";} На выход получаю: img/path/0/1.jpg img/path/0/2.jpg img/path/0/3.jpg img/path/0/4.jpg img/path/0/5.jpg А нужно получить только сами файлы - 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg Есть такой выход?
Apple, не, ты споришь не о том. Я вообще никогда не делаю $a == 0, это глупо (хотя бы в контексте PHP с его игрищами с типами) и как-то не пришей пи**е рукав. Но ($a % 2) == 0 мне кажется приемлемей (не лучше, не красивше и не удобней, а приемлемей), чем if (!($a % 2)). Lopar, читай мануал, в том числе про basename().
Всем спасибо. Финальный код превратился в: Передающая часть PHP: <? foreach (glob("img/path/".$option."/*.jpg") as $ob) { $value = basename($ob); ?> <a href="main.php?setimage=<? echo $value; ?>"><IMG SRC="http://localhost/<? echo $ob; ?>"></a> <? if(!(basename($ob,".jpg") % 7)) {echo"<br>";} } ?> Принимающая проверка PHP: <? if ($_REQUEST['setimage'] && file_exists("img/path/".$option."/".$_REQUEST['setimage'])) { %ВыводФотографии% } ?> 1. Стоит ли ставить проверку на две точки, если проверка на существование файла привязана насмерть в папке? Тесты показали что две точки не проходят, но мало ли... 2. Стоит ли (и возможно ли) всю эту систему еще упростить, или дальше некуда?