Защита от пробела

Ms

Новичок
Защита от пробела

Существует некая форма с одним текстовам полем.

<form>
<input type="text" name="text" />
<input type="submit" />
</form>

После её заполнения, пользователь сбрасывается на страницу-обработчик введённых данных.
Как проверить ввёл ли пользователь что-либо кроме пробелов.

1) Как это проверить на php?
Функция empty не спасает.
В принципе, можно действовать следующим образом: убрать из переменной все пробелы, и потом проверить на empty.
Но, мне кажется, что должен быть более короткий путь проверки.

2) Как это провериь на javascript?
 

Фанат

oncle terrible
Команда форума
Это же надо, по каким мизерным поводам люди в форум пишут.
вызов одной функции в 4 буквы им уже слишком сложным кажется. оптимизации требует.

А ведь копнуть скрипт этого оптимизатора - там в сотни раз более кривого кода - тонны.
А тут одна функция бельмом на глазу стала. просто житься от нее никакого нету - надо искать способ проще.
 

Ms

Новичок
Фанат

Как ты навреное догадался, чёрта лысового я понял из твоих высказываний, а решил задачу таким образом:

function nonempty($ms){
if(empty($ms)){
$q=FALSE;
}
else{
$smms=str_replace(' ','',$ms);
if(empty($smms)){
$q=FALSE;

}
}
if(!isset($q)){$q=TRUE;}
return($q);
}

И на эту функцию проверяю все входящие данные
 

untied

Сдвинутый новичок
Автор!
Дык помимо пробела есть еще знаки табуляции. А в поле <TEXTAREA>, к примеру, нужно еще и перевод строки отслеживать.

Пиши проверочную функцию на JavaScript!
 

Фанат

oncle terrible
Команда форума
asm уже ответил
if(!trim($ms)) полностью отвечает задаче.
 

Moses Fender

Guest
Автор оригинала: untied
Пиши проверочную функцию на JavaScript!
Зря ворошить старое. Но промолчать что-то не получается.
JavaScript помогает. Поможет и тут. А в потенциально опасных случаях - проверять всеж-таки надо на стороне сервера. Доверяться JavaScript нельзя. Никто же не мешает злоумышленнику обойти эту проверку и отправить гадкую строку, которая может навредить.
 

untied

Сдвинутый новичок
Я обычно проверяю дважды: и JavaScript-ом и PHP-скриптом.
Первая проверка для удобства. К примеру, если чел забыл ввести какое-нибудь поле в форме (или вбил туда пробелы), то ему сразу window.alert(...)
Проверка в PHP-скрипте, как обычно, нужна для безопасности.

Если проверять только в PHP-скрипте, то возможна такая ситуация. Посетитель заполнял форму (к примеру, написал очень умное и длинное высказывание в форум), забыл заполнить свой e-mail и нажал кнопку "Отправить". Скрипт ему выдал сообщение об ошибке. Посетитель нажал кнопку "Назад", оба! -- а введенное умное и длинное высказывание пропало (я обычно запрещаю кэширование страниц, выдаваемых скриптами). Естественно, можно решить такую проблему сессиями или вторичным выводом формы с указанием неправильно заполненных полей. Но проще всего сделать это на JavaScript.
 

Фанат

oncle terrible
Команда форума
Посетитель нажал кнопку "Назад",
проблема не в проверке, а в проверяющем.
кто тебе мешает вместое с сообщением об ошибке вывести и заполненную форуму?
Чтобы НЕ ПРИШЛОСЬ нажал кнопку "Назад"?
 

untied

Сдвинутый новичок
Originally posted by Фанат
кто тебе мешает вместое с сообщением об ошибке вывести и заполненную форуму?
Лень, вот что мешает! :D
Я ж говорю, на следующей странице (когда посетитель неправильно заполнил форму и нажал кнопку "Отправить") можно снова вывести уже заполненную форму и, к примеру, красным выделить поля, которые он неверно заполнил. Но это скучный подход какой-то (опять же ждать надо, когда страница загрузится, а на ней, оказывается, вместо ожидаемого результата будут какие-то глупые сообщения об ошибках; меня такая ситуация обычно бесит :D ).
 

Фанат

oncle terrible
Команда форума
мда, плохо быть тормозом.
вопросов к тебе больше нет.
 

Ms

Новичок
Тогда, функция должна выглядеть так:
PHP:
function nonempty($ms){
	if($ms==0){
		$q=TRUE;
	}
	elseif(empty($ms)){
		$q=FALSE;
	}
	else{		
		$smms=trim($ms);
		if(empty($smms)){
			$q=FALSE;
		}
	}
	if(!isset($q)){$q=TRUE;}
	return($q);
}
 

Фанат

oncle terrible
Команда форума
Господи, ну надо же быть тками слепым и глухим.
обхясни, чем твоя трёхэтажная функция лучше, чем то, что я написал в одну строчку?
чего ты за свою empty уцепился?
 

Sir_J

Guest
В догонку
на js trim можно имитировать так str.replace(/^\s+/,'').replace(/\s+$/,'')
 

Фанат

oncle terrible
Команда форума
Sir_J
ему не трим нужен.
ему всего лишь проверить на пустоту.
так что достаточно и одного реплейса.
 

Ms

Новичок
И так, третье издание многострадальной функции
PHP:
function nonempty($ms){
	if(trim($ms)){
		$q=TRUE;
	}
	elseif($ms=='0'){
		$q=TRUE;
	}
	else{
		$q=FALSE;
	}
	return($q);
}
 
Сверху