Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать проверку POST , цифры или буквы.
 
 автор: TrEK   (17.02.2011 в 22:04)   письмо автору
 
 

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

<?php
$s 
= ...;
if (
is_numeric($s)) { 
  echo 
'в $s содержится число';
} elseif (
is_string($s)) {
  echo 
'в $s содержится строка';
} else {
  echo 
'в $s какая-то другая фигня: ' gettype($s);
}
?>


Как-то так.. но есть одно но: если написать просто 192 или просто ya - тогда все норм.
Но если написать 192.168.1.1 - тогда строка не будет определена как айпи, и выдаст что это буквы.
При вводе ya.ru опять получаем точки.
То есть надо так , что при 192.168.1.1 и т.п выводило что это айпи, а при ya.ru , 25.ya.ru и .т.п - что это доменное имя.

  Ответить  
 
 автор: sim5   (17.02.2011 в 22:15)   письмо автору
 
   для: TrEK   (17.02.2011 в 22:04)
 

А разве 192.168.1.1 это номер, что вы пытаетесь проверить is_numeric($s)?

Вот говорил всегда, и буду говорить - мануал читать надо, а в нем описывается функция ip2long(), после применения которой уже можно будет проверять IP это или нет.

  Ответить  
 
 автор: TrEK   (18.02.2011 в 00:57)   письмо автору
 
   для: sim5   (17.02.2011 в 22:15)
 

Все , сделал:

<?php
$post
=$_POST['ip'];
$ip   gethostbyname('$post');
$long ip2long($ip);

if (
$long == -|| $long === FALSE) {
    echo 
'Invalid IP, please try again';
} else {
    echo 
$ip   "\n";           // 192.0.34.166
    
echo $long "\n";           // -1073732954
    
printf("%u\n"ip2long($ip)); // 3221234342
}
?>


Спасибо за подсказку.

  Ответить  
 
 автор: TrEK   (18.02.2011 в 13:35)   письмо автору
 
   для: sim5   (17.02.2011 в 22:15)
 

Хорошо, это есть...
А как орагнизовать проверочку , ввел ли я доменное имя... и выводить одно.. а если айпи- то другое.

<?php
if ($_POST gethostbyname) {} else {}
?>


как-то так?

  Ответить  
 
 автор: sim5   (18.02.2011 в 13:58)   письмо автору
 
   для: TrEK   (18.02.2011 в 13:35)
 

Во первых:
= это присваивание, а ни как не условие "на равно".
Во вторых на gethostbyname РНР вас обматерит и будет прав.
Ну и в третьих, уж коли вы читали мануал, пробовали пример из него, то какие могут быть вопросы?
Если после проверки функцией ip2long(var) вам возвращается число, то значит вы получили IP, в противном случае проверить, если функция ip2long вернет число из значения полученного функцией gethostbyname(var), то вы получили доменное имя, иначе вам прислали брак.

  Ответить  
 
 автор: TrEK   (18.02.2011 в 15:32)   письмо автору
 
   для: sim5   (18.02.2011 в 13:58)
 

<?php
$post 
$_POST['post'];
$long1 ip2long($post);
if (empty(
$long1)) {echo "HOST";} else {echo "IP";}
?>


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

  Ответить  
 
 автор: sim5   (18.02.2011 в 15:51)   письмо автору
 
   для: TrEK   (18.02.2011 в 15:32)
 

И работает?

  Ответить  
 
 автор: TrEK   (18.02.2011 в 19:22)   письмо автору
 
   для: sim5   (18.02.2011 в 15:51)
 

Да, конечно.

  Ответить  
 
 автор: sim5   (18.02.2011 в 20:33)   письмо автору
 
   для: TrEK   (18.02.2011 в 19:22)
 

НУ зачем же так врать? ) Вот глядите:
<?
$long1 
ip2long('ля-ля-ляля');
echo empty(
$long1) ? "HOST" "IP";
Что у вас получается? Никак HOST? А это разве он? Я вам условие СЛОВАМИ написал, то которое надо проверить, а вы....

  Ответить  
 
 автор: TrEK   (18.02.2011 в 21:08)   письмо автору
 
   для: sim5   (18.02.2011 в 20:33)
 

Все у меня получается... ))

Перед этим условием у меня условие проверки стоит на ваилдность вводимого:

<?php
..
..
..
$post=$_POST['ip'];
$ip gethostbyname($post);
$long ip2long($ip);
$long1 ip2long($post);
#if (!empty($long1)) {echo "IP";} else {echo "HOST<br>";}
if (empty($post)) {echo "Enter ip-addres or host, please!<br>";} 
else { 
// If enter data
     
if ($long == -|| $long === FALSE) { /*check for validate data*/ echo 'Invalid IP, please try again<p>';}
     else { 
/*pass validate data*/
          
if (empty($long1)) { /* if enter domain name */ echo "HOST<br>"; } else { /* if enter ip */ echo "IP<br>";}
          }
     }
..
..
..
?>


Как Вам такое? ))
п.с. Никакое "тра-ля-ля" при этом не проходит...

  Ответить  
 
 автор: sim5   (18.02.2011 в 21:31)   письмо автору
 
   для: TrEK   (18.02.2011 в 21:08)
 

А чего же вы пишите тогда половину? А приведенное сейчас... ну что могу сказать - плохо, ибо записать можно и проще:
<?
echo is_numeric(ip2long($post)) ? "IP" is_numeric(ip2long(gethostbyname($post))) ? "HOST" "Халтура";
Мнений конечно может быть много, но на мой взгляд, условная операция (тернарная ) более удобнее и лаконичнее, да и "читаемость" ее не такая и сложность. А вот в ваших if { else if {else.... ногу сломать можно. К тому же, даже беглый взгяд на ваш код, говорит, что будет неменуемо ошибка (скобки фигурные некомплект), и коли вы выставляете свое для "запуска/проверки", уж пишите без ошибок.

PS. Вы уже успели убрать "мусор" из if скоба еlse скобка... и т.п..

  Ответить  
 
 автор: TrEK   (18.02.2011 в 21:34)   письмо автору
 
   для: sim5   (18.02.2011 в 21:31)
 

Ну видите ли, я все делею путем проб и ошибок :)
Половину пишу, так как меня интересовал лишь один момент.. на проверку "буквенности", а не валидности домена и айпи...
Если получается.. пусть и более громоздкий код, чем мог бы быть... но всё же, работает :)


А свой код я коректировал, старался привести в приличный читабельный вид.. перед тем, как на тот пости появится ответ. Вроже успел :)) Проверте... )

п.с. За более лаконичное решение спасибо!

  Ответить  
 
 автор: sim5   (18.02.2011 в 21:40)   письмо автору
 
   для: TrEK   (18.02.2011 в 21:34)
 

Вы не берете во внимание то (или не знаете об этом), что существует конструкци if else elseif, да еще сдабривая код свой приличным числом скобок, ну это бомба.

Спасибо не надо, ибо условную операцию вы у себя уже применяли, вот только не знаю, сами или где-то кто-то..... Вы уж задумывайтесь над тем, что вам предлагают, а не просто копируйте, тогда и прок будет. Ведь не всегда вам могут предложить золото, не исключено, что и железо попадется. ;-)

  Ответить  
 
 автор: TrEK   (18.02.2011 в 21:52)   письмо автору
 
   для: sim5   (18.02.2011 в 21:40)
 

Про if else elseif знаю... но сделал так как мог :) И так как работало :)
А спасибо за то, что Вы подсказали мне ip2long(), атк как до этого даже не слышал про такую функцию. От нее и начал отталкиватся.

  Ответить  
 
 автор: sim5   (18.02.2011 в 21:57)   письмо автору
 
   для: TrEK   (18.02.2011 в 21:52)
 

Я вам могу дать куда более ценный совет - если у вас до сих пор нет мануала по РНР, скачайте его. Формат CHM имеет вкладку поиска, а набрав в ней ip, уж точно могли бы найти и функции, и прочее в мануале применительно к нему.
А искать подсказки на форуме типа "есть ли такая функция, которая .... ?" и т.п., либо писать "велосипед", когда существует встроенная функция, а вы не поинтересовались есть ли, это не есть гут. ;-)

  Ответить  
 
 автор: TrEK   (18.02.2011 в 22:03)   письмо автору
 
   для: sim5   (18.02.2011 в 21:57)
 

Я согласен с Вами в плане "Писать велосипед" , но если я не имею понятия , что есть функция попроще ... и даже не представляю что ее можно применить ))
Тогда мануал мне не поможет.. только вот такие Ваши советы.. и советы других более знающих людей.
Все прийдет с опытом.

  Ответить  
 
 автор: sim5   (18.02.2011 в 23:03)   письмо автору
 
   для: TrEK   (18.02.2011 в 22:03)
 

Так ни у кого не будет понятий, пока в "каталог" функций языка не заглянешь. Вот я сейчас для интереса задал поиск в мануале по ip, и результат:

ip2long
Функции сокетов
curl_setopt
....
и т.д.

Как видите функция, о которой вы "не имели понятия" первая в списке. Щелкаем ее и попадаем в описание оной, которое гласит:
ip2long - конвертирует строку, содержащую адрес (IPv4) Internet Protocol, в подходящий адрес.
и т.д..

В РНР много функций, и как бы вы не хотели, вам придется изучать их самому, ибо по всем получить подсказки (указывать, что вот есть такое) просто не возможно в принципе. А что еще более важное, так это надо учиться находить среди этого инструментария необходимую функцию для решения той или иной задачи. А подсказки вас этому не научат, они дают вам конкретный ответ, на конкретный вопрос, для этого и форум. Но ради бога учитесь сами находить, ищите и пробуйте, ошибайтесь и исправляйте ошибки, но учитесь, иначе...

  Ответить  
 
 автор: TrEK   (21.02.2011 в 19:06)   письмо автору
 
   для: sim5   (18.02.2011 в 23:03)
 

А где можно этот мануал взять? Есть ссылочка? Буду следовать Вашим советам :)
Я так понял здесь мне тоже желательно посидеть - http://softtime.ru/bookphp/gl1_1.php

  Ответить  
 
 автор: sim5   (21.02.2011 в 19:13)   письмо автору
 
   для: TrEK   (21.02.2011 в 19:06)
 

На русском ранее можно было и с официального сайта скачать, сейчас русского там нет, но в сети можно найти. Можете и онлайн справочником пользоваться: http://www.php.su/functions/

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования