IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Проверка на сочетание символов (http://www.imho.ws/showthread.php?t=46558)

Psionic Vision 21.12.2003 05:18

Проверка на сочетание символов
 
Как проверить три последних символа строки - и если они не являются, скажем jpg или gif - выдать alert box?

hempsmoke 21.12.2003 05:39

Neo
методом?

Psionic Vision 21.12.2003 05:59

Javascript

RaZEr 21.12.2003 06:08

mystr.indexOf("jpg",mystr.length-3)

Psionic Vision 21.12.2003 06:48

А конкретней? Не понимаю, как применять :confused:

RaZEr 21.12.2003 08:32

mystr переменная со строкой.

Psionic Vision 21.12.2003 18:56

вот так?
forms.text1.value.indexOf("jpg gif arj",forms.text1.value.length-3)

RaZEr 21.12.2003 19:00

Нет, только одно расширение.

Psionic Vision 21.12.2003 21:11

А если нужно несколько расширений?
И как потом обрабатывать эту функцию? В смысле как, если ни одно из расширений не верно, выдать, к примеру, alert('no')

Добавлено через 2 часа и 2 минуты:
Итак, я сделал это следующим способом.

if((document.forms.upload.file.value.lastIndexOf(".jpg")==-1) && (document.forms.upload.file.value.lastIndexOf(".gif")==-1) && (document.forms.upload.file.value.lastIndexOf(".jpeg")==-1) && (document.forms.upload.file.value.lastIndexOf(".JPG")==-1) && (document.forms.upload.file.value.lastIndexOf(".GIF")==-1) && (document.forms.upload.file.value.lastIndexOf(".JPEG")==-1))
{
alert("Допустимые расширения файлов: JPG JPEG GIF DOC TXT PM6.");
return false;
} else {
}

Все, можно самому себе ставить 5.

hempsmoke 22.12.2003 01:32

а если имя jpg1.php? ;)

Добавлено через 9 минут:
я так и не понял :почему тебе indexOf не подошел?

Psionic Vision 22.12.2003 02:04

Потому что я не понял как его применять. А какая разница?

hempsmoke 22.12.2003 02:35

а разница в том, что str.indexOf("jpg",str.length-3) сравнивает только последние три символа твоей строчки. а lastIndeOf только последнее вхождение по всей строчке...
в первом случае файл 23jpg.php спокойно загрузится в твою директорию и последствия будут непоправимы :) , а во втором вариант 23jpg.php не прокатит. тебе же это надо было? а ты сдеал совсем не то...
Удачи!

V0iD 22.12.2003 02:47

А можно вопрос? Зачем нужна проверка на javascript? Ведь Neo в любом случае должен сделать проверку расширения в скрипте закачки. Со страницы можно убрать весь javascript, и тогда, если нет проверки в скрипте, любой файл спокойно закачается... Так почему бы не оставить одну проверку в скрипте?

Psionic Vision 22.12.2003 02:54

Вложений: 1
hempsmoke
Ну ясно. Расскажи мне тогда, если не лень, как изменить мой отрезок кода так, чтобы использовалась фукция indexOf, а то я так и не понял куда ее писать

V0iD ,
В том то и дело что у меня в скрипте нет проверки. Скрипт-то php, а я не знаю как реализовывать проверку на php. Если знаешь - то скажи. Вот мой скрипт (прикладываю)

hempsmoke 22.12.2003 03:22

Цитата:

V0iD:
Зачем нужна проверка на javascript
сказано - сделано!

Neo
вот, вроде работаеть...
Код:

<html>
<body>
<script>
function check()
{
  str=document.forms.upload.upload.value;
  k=str.indexOf("jpg",str.length-3);
  if (k==-1) alert("НЕ фига! это не jpg картинка");
  else document.write("картинка загружена");
}
</script>
<form name="upload">
<input type="text" name="upload">
<input type="button" onClick="check()" value="Проверить">
</form>
</body>
</html>

;)

Psionic Vision 22.12.2003 03:57

Ну, молодец. тебе 5.
Буду еще очень признателен, если расскажешь, как разрешить более одного расширения. Спасибо

hempsmoke 22.12.2003 04:48

Neo
введи массив из расширений аля var ext = new Array ("jpg", "gif");
и запхай проверку indexOf в нее..
переварил? ;)

Psionic Vision 22.12.2003 04:51

Вот так?

<script>
function check()
{
var ext = new Array ("jpg", "gif");
str=document.forms.upload.upload.value;
k=str.indexOf(ext,str.length-3);
if (k==-1) alert("НЕ фига! это не картинка");
else document.write("картинка загружена");
}
</script>

hempsmoke 22.12.2003 05:02

прости меня, милок.. :) - я забыл про цикл сказать!

<script>
var ext = new Array ("jpg", "gif");
function check()
{
for (i=0;i<=ext.length-1;i++)
{
str=document.forms.upload.upload.value;
k=str.indexOf(ext[i],str.length-3);
if (k==-1) alert("НЕ фига! это не картинка");
else document.write("картинка загружена");
}
}
</script>

Psionic Vision 22.12.2003 05:57

Опять ты кое что забыл... Алерт бокс выкидывается ровно столько раз, сколько есть объектов в массиве.. к чему бы это?

Добавлено через 4 минуты:
а вот так все работает как задумано:

...
var ext = new Array ("jpg", "gif");
for (i=0;i<=ext.length-1;i++)
{
str=document.forms.upload.upload.value;
k=str.indexOf(ext[i],str.length-3);
if (k==-1) {
alert("НЕ фига! это не картинка");
return false;
} else {
document.write("картинка загружена");
}
}
...

Добавлено через 3 минуты:
Хотя нет... так она не пропускает даже когда картинка есть картинка... Что я не так сделал?

V0iD 22.12.2003 17:44

А вот как в скрипте:
[OOPS. Глупость была :), звиняюсь...]

Psionic Vision 22.12.2003 18:18

Почему глупость? Разве то что ты написал - не рабочее? Я еще даже не успел проверить.

V0iD 22.12.2003 19:08

Вот это не глупость, это я проверил...
было:
PHP код:

//проверяем, пришел ли файл
if ( !empty($file)){
echo 
"<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value=' Сообщение отослано. Спасибо!'></form>"
;
sendmsg($to$subject$text$from$file$types);}
else {
echo 
"<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value=' '></form>"
;}
//echo "<br>".empty($HTTP_POST[2]); 

стало:
PHP код:

//проверяем, пришел ли файл
if ( !empty($file)){
$filename $HTTP_POST_FILES[file][name];
preg_match("/.*\.(.*)/"$filename$result);
$result $result[1];
if ( (
$result == "jpg") or ($result == "gif") or ($result == "txt") ) {
echo 
"<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value=' Сообщение отослано. Спасибо!'></form>"
;
sendmsg($to$subject$text$from$file$types);
}
}
else {
echo 
"<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value=' '></form>"
;
}
//echo "<br>".empty($HTTP_POST[2]); 

Фишка в том была, что в $file хранится только tmp-имя файла, а не настоящее...

Psionic Vision 22.12.2003 20:16

Теперь этот блок ваще ничего на экран не выводит... Даже пустую input строку.
Вернее вся форма на месте, но статусной строки нет и в помине. ни если файл правильный, ни если неправильный...

Добавлено через 1 минуту:
По-моему, там вложенный блок IF, и соотвественно должно быть два раза else {}? Но где точно - не знаю

CEO 22.12.2003 20:54

если файл не пуст {
| если расширение jpg, gif, txt
| {
| отсылка
| }
}
иначе:{}
Neo: else там помоему стоит наместе, т.е относится к первому IF...

Кстати, помоему количесвто IF можно уменьшить:
-------------------------------------------------------------------
$filename = $HTTP_POST_FILES[file][name];
preg_match("/.*.(.*)/", $filename, $result);
$result = $result[1];
if (( !empty($file))&( ($result == "jpg") or ($result == "gif") or ($result == "txt") ) )
{
echo "<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value=' Сообщение отослано. Спасибо!'></form>";
sendmsg($to, $subject, $text, $from, $file, $types);
}
else {
echo "<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value=' '></form>";
}
--------------------------------------------------------------------

hempsmoke 22.12.2003 21:12

в ход пошло php?

Psionic Vision 22.12.2003 21:24

CEO
hempsmoke
Не работает. И первом, и во втором (сокращенном) вариантах пишет, что недопустимый формат файла. Я поставил вот этот отрезок:

PHP код:

$filename $HTTP_POST_FILES[file][name];
preg_match("/.*.(.*)/"$filename$result);
$result $result[1];
if (( !empty(
$file))&( ($result == "jpg") or ($result == "gif") or ($result == "txt") ) )
{
echo 
"<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value=' Сообщение отослано. Спасибо!'></form>"
;
sendmsg($to$subject$text$from$file$types);
}
else {
echo 
"<form name='bt'><input size=100 name='statusline' type='text' style='font-weight:bold; color: white;
background-color: #686898; border-style: none;' value='Недопустимый формат'></form>"
;



CEO 22.12.2003 21:47

Neo :Проверь что получилось в результате
preg_match("/.*.(.*)/", $filename, $result); Аттто она какая-то подозрительная
После $result = $result[1];
Напиши echo $result.

Psionic Vision 22.12.2003 21:56

Щас...

Добавлено через 5 минут:
Не, ничего не меняется. Хоть с echo $result;, хоть без нее всегда одно и тоже сообщение в статусной строке

smap 22.12.2003 22:13

мдя :) Neo я тебя ща скрипт пишу, щас полностью выложу
одно могу сказать с html, php и JavaScript у тебя плоховато :)
особено с Html такая муть ........

CEO 22.12.2003 22:15

Neo :echo $result; -- должна была вывести содержимое переменной $result, а раз не выводит значит в ней ничего нет и поэтому все что до else автоматически не срабатывает. Почему в $result ничего не оказалось? Мне тоже хотелось бы это узнать. Посмотрим может автор сумейт ответить на этот вопрос...

V0iD 22.12.2003 22:15

Гм очень странно. Возможно HTTP_POST_FILES не работает. Попробуй сделать
PHP код:

var_dump($HTTP_POST_FILES); 

он должен поместить некоторую информацию туда о файле при его загрузке...
(может PHP старый? Потому что на домашней машине у меня самый последний...)

smap 22.12.2003 22:24

мдя :)

<input name="file" type="file">

$file_name - это то что вам надо :)

Добавлено в ту же минуту:
ща выложу полный скрипт ждёмс пока :)

CEO 22.12.2003 22:25

Дурацкая мысль посетила мою голову... NEO: а ты вообще файл к форме прикрепляешь хоть какой-нибудь?

Добавлено в ту же минуту:
smap :Давае его суда. Оччень интересно!

smap 22.12.2003 22:29

написал, осталось только протестить :)

Psionic Vision 22.12.2003 23:22

smap
ну скрипт не я писал. я его скачал в инете... так что это не у меня с html плохо...

Добавлено через 26 минут:
smap
ну, чего же не выкладываешь?

smap 22.12.2003 23:35

вообщем всё работате только вот почту почемуто не отсылает.. вот сижу тут тестью, так что народ ждём еще немного :)

принципи можете самной потестить.. или хотябы посмотреть чё получаеться :)

http://chartclub.samara.ws/neo/neo.php

CEO 22.12.2003 23:52

Neo Не выкладывает, т.к. с формой помоему, как я и говорил -- все впорядке, в т.ч. и с <input name="file" type="file">.

V0iD 22.12.2003 23:53

Да, дай лучше сорс посмотреть :)

Psionic Vision 23.12.2003 00:00

smap
не отсылает потому что ты из выпадающего списка убрал мылы.... почему бы тебе сорц в самом деле не выложить?


Часовой пояс GMT +4, время: 01:27.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.