14:50

php

Псих
Существует ли в php такой тип переменных, как множество?



У меня такая задача:

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

Ещё идея - создать строку с допустимыми символами и проверять каждый символ логина на наличие в строке.



Как лучше поступить?



UPDATE:



Ещё одна проблема. Не работает функция session_start(); Пишу в Dreamweaver. Если ставлю кодировку windows-1251, то всё работает, если Юникод, то нет. Из-за чего такая проблема? Из-за русского Денвера или из-за моего непонимания?



Ошибка:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at z:\home\cw\www\registracija.php:1) in z:\home\cw\www\page1.php on line 2

Комментарии
06.05.2007 в 15:07

149ea694a792f3ad2caaf77077a0df58 Спорящая с богом
Копайте в направлении регулярных выражений. Кажется, в РНР они тоже есть.
06.05.2007 в 15:13

WAAAAAAAAAGH!!!!!!1111ONEONE
PCRE в пхп поддерживаются. Можно решить задачу одной строчкой
06.05.2007 в 15:30

Псих
Караидель, буду искать, спасибо.



> Можно решить задачу одной строчкой

Vj_o-oy, как?
06.05.2007 в 15:36

WAAAAAAAAAGH!!!!!!1111ONEONE
Для красоты 2 строчки:



$AllowedSymbols = "abcd ";

echo preg_match("/[^$AllowedSymbols]/s","abbccc");

вместо "abbccc" лепишь то, где ищешь, $AllowedSymbols пояснять не буду )

если preg_match - 0, то все хорошо, иначе есть лишние символы

06.05.2007 в 16:18

Псих
Vj_o-oy, интересно вышло =) Спасибо.
06.05.2007 в 19:48

и это пройдет.. (c) надпись на кольце Соломона
RTFM. помогает ;)

во первых manual

во вторых чтоб долго не искал Синтаксис регулярных выражений

ну и в третьих полезно Функции для работы с регулярными выражениями
07.05.2007 в 16:54

Псих
Ещё одна проблема. Не работает функция session_start(); Пишу в Dreamweaver. Если ставлю кодировку windows-1251, то всё работает, если Юникод, то нет. Из-за чего такая проблема? Из-за русского Денвера или из-за моего непонимания?



Ошибка:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at z:\home\cw\www\registracija.php:1) in z:\home\cw\www\page1.php on line 2
07.05.2007 в 19:01

WAAAAAAAAAGH!!!!!!1111ONEONE
сессию нужно начинать до первого вывода (echo), иначе оно не работает
07.05.2007 в 19:55

Псих
Vj_o-oy, знаю. Вывожу до первого.
07.05.2007 в 20:00

WAAAAAAAAAGH!!!!!!1111ONEONE
Crazy Wizard (output started at z:\home\cw\www\registracija.php:1) - это ни о чем не говорит?
07.05.2007 в 20:23

Псих
Vj_o-oy, нет. А что это?

Вот текст файла:

<?php

session_start();

?>


Файл этот сохранил 2 раза. 1 раз с выставленной кодировкой windows-1251, второй раз с юникодом. Файл, сохранённый в юникоде выдаёт ошибку, первый нет. Но мне надо писать именно в юникоде..
07.05.2007 в 21:42

WAAAAAAAAAGH!!!!!!1111ONEONE
оно говорит, что у тебя на первой же строчке файла registracija.php идет выдача данных. поэтому он не может на второй строке page1.php начать сессию.
07.05.2007 в 21:52

Псих
И что же делать? Текст файла я приводил выше, явной отправки данных там нету..
07.05.2007 в 22:01

WAAAAAAAAAGH!!!!!!1111ONEONE
Crazy Wizard без понятия. вообще юникод не должен был оказывать какого-либо влияния на англицкие символы, только на кириллицу
07.05.2007 в 22:11

Псих
Vj_o-oy, кое кто подкинул идею, что мешают какие-то скрытые символы, вроде конца строки и т.п... Такое может быть?
07.05.2007 в 22:18

WAAAAAAAAAGH!!!!!!1111ONEONE
Crazy Wizard

файл вида:



<? session_start(); ?>



будет подразумевать вывод \n а потом начало сессии. этого может хватить
07.05.2007 в 22:30

Псих
но в моём файле первая строка, это "<?php"..
29.05.2007 в 23:24

Мало ли что эволюция, - приговаривал мастодонт, топча неандертальцев.
Если старт сессии объявлялся где-то раннее - интерпретатор ругнется.

или же если хотя бы один пробел идёт до старта.)



что касается проверки - к примеру можно использовать подобное условие



if( !( preg_match("/^([a-z0-9]*)$/i", $username) ) ) {

die();



}



опять же к вопросу о регулярных выражениях - в PHP поддерживаются две модели regexp-ов :

нативная POSIX и PCRE ( Perl-style). Почитать подробней можно здесь:



http://phpclub.ru/detail/article/simple_regular