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


Конкурс "Лучший отзовик"
× Быстрый вопрос
Пользователь месяца
ShowPrint ShowPrint 1-й за Март
Очков активности: 1 152 1 тема, 61 сообщение, 12 баллов репутации
Сайт: ShowPrint.ru
ТОП самых активных за этот месяц
  • Фотография Андрей WPMasterKZ
    #1

    Андрей WPMasterKZ (wpmaster.kz)
    Очков активности: 525 Вне конкурса за определение пользователя месяца

  • Фотография Vmir
    #2

    Vmir
    Очков активности: 396 3 темы, 24 сообщения, 8 баллов репутации

  • Фотография OlgaGetman
    #3

    OlgaGetman
    Очков активности: 351 Вне конкурса за определение пользователя месяца

  • Фотография ShowPrint
    #4

    ShowPrint (ShowPrint.ru)
    Очков активности: 204 Вне конкурса за определение пользователя месяца

  • Фотография Mandarin
    #5

    Mandarin
    Очков активности: 76.5 2 темы, 11 сообщений, 3 балла репутации

  • Фотография maxnik
    #6

    maxnik (konovalovpavel.ru)
    Очков активности: 66 1 тема, 19 сообщений, 2 балла репутации

  • Фотография re-search
    #7

    re-search
    Очков активности: 49.5 7 тем, 12 сообщений, 1 балл репутации

  • Фотография Strazh
    #8

    Strazh
    Очков активности: 37.5 1 тема, 22 сообщения, 1 балл репутации

  • Фотография pozitron123
    #9

    pozitron123
    Очков активности: 36 2 темы, 6 сообщений, 2 балла репутации

  • Фотография Constantine
    #10

    Constantine
    Очков активности: 33 3 темы, 13 сообщений, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 27.03.2019
  • Яндекс выдача: 18.04.2019
Топ 5 участников по репутации


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

#1 alex19rus

alex19rus
  • Пользователь
  • 280 сообщений
  • Репутация: 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

I'm web-developer 

Magento one love!



#3 alex19rus

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

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

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

#4 Banderas

Banderas
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

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

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

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

I'm web-developer 

Magento one love!



#5 alex19rus

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

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

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

#6 Banderas

Banderas
  • Неактивные
  • 1 168 сообщений
  • Репутация: 1

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

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

I'm web-developer 

Magento one love!



#7 yury

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

Отправлено 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
  • Пользователь
  • 280 сообщений
  • Репутация: 5

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

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

#10 matroskin8

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

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

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

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

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

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


  • 0


#11 yury

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

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

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

matroskin8,
вы правы, я не обратил внимание, что у Banderas-а не проверяется наличие запрашиваемого файла, а только расширение, указанное в запросе.
Можно проверять и расширение.
Но важнее не забыть проверить собственно наличие файла на удаленном сервере.
Мне известны два способа такой проверки:
1. Проверка через функцию fopen()
if (@fopen($url, "r")) {
echo 'Файл есть';
} else {
echo 'Файла нет';
}
Минус: если файл большой, то проверяться будет небыстро.
2. Проверка через функцию get_headers()
$headers = get_headers($url);
if (strpos($headers[0], '200')) {//если файл существует, то в первой строке заголовков будет "HTTP/1.1 200 OK"
echo 'Файл есть';
} else {
echo 'Файла нет';
}
Минус: если на удаленном сервере вместо выдачи сообщения об ошибке 404 настроен редирект при обращении к несуществующим файлам, то проверка не сработает

С учетом вышесказанного уточненный код будет, примерно, таким:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<title>tst</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<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)) { //добавьте нужные форматы
//первый вариант проверки
if (@fopen($_POST['url'], "r")) {
//второй вариант проверки (чтобы выбрать его, раскомментируйте 2 следующие строки и закомментируйте предыдущую)
// $headers = get_headers($_POST['url']);
// if (strpos($headers[0], '200')) {
echo '<img src="'.$_POST['url'].'" alt="" />';
} else {
echo 'Картинка не найдена';
}
} else {
echo 'Недопустимое расширение у файла';
}
}
}
?>
</body>
</html>

  • 0

robot

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


Похожие темы

  Название темы Автор Статистика Последнее сообщение

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