Перейти к содержимому


Партнерская программа Kredov

Проверка URL в поле формы

#1 alex19rus

alex19rus
  • Пользователь
  • 273 сообщений
  • Репутация: 5
0

Отправлено 24 Июнь 2011 - 07:29

Привет все!
Помогите решить такую проблему...
Есть поле формы:

<input type='text' name='name' value='http://' size='30' maxlength="200" />
В нее пользователь будет вводить URL картинки.
Нужно, чтобы после ввода адреса картинки при правильном вводе урл показалась та самая картинка, а если урл не верный написать что то типо "картинка не найдена".

Как такое сделать?

 

 

  • 0

#2 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 24 Июнь 2011 - 07:55

<?php
if (!$_POST['submit']) {
?>
<form action='<?PHP echo $_SERVER['REQUEST_URI'] ?>' method='POST'>
<input type='text' name='url' />
<input type='submit' name='submit' />
</form>
<?php
} else {
if (empty($_POST['url'])) {
header('Location: '.$_SERVER['HTTP_REFERER'].'');
die('dsfsd');
exit();
} else {
if (!preg_match("/(.png)|(.jpg)|(.jpeg)|(.gif)/i", $_POST['url'], $rez2)) { // добавите нужные форматы
header('Location: '.$_SERVER['HTTP_REFERER'].'');
exit();
} else {
echo '<img src='.$_POST['url'].'>';
}
}
}
?>


Можно ещё сделать через image/jpg, но я так не делал никогда
  • 0


#3 alex19rus

alex19rus
    Topic Starter
  • Пользователь
  • 273 сообщений
  • Репутация: 5

Отправлено 24 Июнь 2011 - 08:27

Banderas, спасибо, а можно как то без кнопки, чтобы ввел урл и картинка ниже появилась?
  • 0

#4 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 24 Июнь 2011 - 08:30

Banderas, спасибо, а можно как то без кнопки, чтобы ввел урл и картинка ниже появилась?

Это JavaScript, а я программирую на PHP и Delphi. Может yury подскажет...
  • 0


#5 alex19rus

alex19rus
    Topic Starter
  • Пользователь
  • 273 сообщений
  • Репутация: 5

Отправлено 24 Июнь 2011 - 08:47

ага... yury, вы где? :D А как вообще правильно сформулировать фразу для поиска, чтобы я поискал такой js ?
  • 0

#6 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 24 Июнь 2011 - 09:40

Сам точно не знаю.. можно через AJAX все это дело оформить :D
Дерзайте!
  • 0


#7 yury

yury
  • Пользователь
  • 629 сообщений
  • Репутация: 176

Отправлено 24 Июнь 2011 - 19:32

ага... yury, вы где? :D А как вообще правильно сформулировать фразу для поиска, чтобы я поискал такой js ?

alex19rus,
если хочется, чтобы просто не было кнопки, то делаем все практически так, как рассказал Banderas,
только убираем кнопку submit (Запрос на сервер будет отсылаться по нажатию [Enter]. Так можно сделать, если в нашей форме единственный элемент input)
и, на всякий случай, не прячем текстовое поле, чтоб адрес другой картинки можно было сразу ввести:
<form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="post">
<input type="text" name="url" value="<?php echo isset($_POST['url']) ? $_POST['url'] : ''; ?>" size="30" maxlength="200" />
</form>
<?php
if (isset($_POST['url'])){
if ($_POST['url'] == '') {
echo 'Пустой запрос';
} else {
if (preg_match("/(.png)|(.jpg)|(.jpeg)|(.gif)/i", $_POST['url'], $rez2)) { // добавьте нужные форматы
echo '<img src="'.$_POST['url'].'" alt="" />';
} else {
echo 'Картинка не найдена';
}
}
}
?>

А если хочется _без_перезагрузки_страницы_ опрашивать сервер на предмет наличия картинки по вводимому в текстовое поле адресу, то это только Ajax-ом можно.
Чистый JS тут не поможет, он только локально у клиента на компьютере работает.

В Ajax-е я не спец, но почитать можно что-то вроде такого
"JSHttpRequest: динамическая подкачка данных без перезагрузки страницы" _http://dklab.ru/lib/JsHttpRequest/
  • 0

#8 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 25 Июнь 2011 - 12:21

Что-то мне кажется, что предложенное решение не совсем корректно :D
По условию, насколько я понял его, ведь нужно проверять не расширение файла, а реальное наличие его по ссылке.

Нужно, чтобы после ввода адреса картинки при правильном вводе урл показалась та самая картинка, а если урл не верный написать что то типо "картинка не найдена".

В предложенном решении проверяются расширения и, если расширение совпадает с предложенными в регулярке - показываем файл, не совпадает - не показываем. Но ведь может быть вполне так, что получено имя графического файла, которого нет на сервере, но регулярку введенное пройдет, а сама картинка показана не будет.
По-моему, вполне логично сделать следующее:
1) получить все файлы в массив из каталога с картинками;
2) прицепить при этом к ним имя сервера и каталога;
3) проверить на совпадение полученное с тем, что есть в массиве.
Вот вариант:
<?php

if($_POST['submit']){
$dir = 'img/'; // каталог с картинками
$read = opendir($dir);
while(false !==($file = readdir($read))){
if(!is_dir($file)) $files[] = 'http://'.$_SERVER['SERVER_NAME'].'/'.$dir.$file;
}

//print_r($files);

if(in_array($_POST['name'], $files)){
echo '<img src="' .$_POST['name']. '" alt="" />';
}else{
echo 'Картинка не найдена';
}
}

?>

<form method="post">
<input type='text' name='name' value='http://' size='30' maxlength="200" />
<input type="submit" name="submit" value="Показать картинку" />
</form>

  • 0


#9 alex19rus

alex19rus
    Topic Starter
  • Пользователь
  • 273 сообщений
  • Репутация: 5

Отправлено 25 Июнь 2011 - 13:32

matroskin8, дело в том, что input полей много, а еще картинка будет находиться не у меня на сервере, а например на радикале...
  • 0

#10 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 25 Июнь 2011 - 13:44

alex19rus, тогда была некорректно поставлена задача :D . Условие поставленной задачи я процитировал:

Нужно, чтобы после ввода адреса картинки при правильном вводе урл показалась та самая картинка, а если урл не верный написать что то типо "картинка не найдена".

В таком случае правильно было так описать:

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


  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru