С 27 марта открыт новый форум. Текущий теперь является архивным. Возможности добавления топиков и ответов отсутствуют.
| Условие добавления: неравенство заполняемых полей | Григорий 22.03.2006 01:34 |
Добрый день.
Подскажите, как решить такую задачу:
Пользователь должен заполнить в форме 16 полей.
Каждое поле - формат "целое число" с максимальным количеством символов - 2.
Каким должно быть условие добавления, чтобы все эти 16 полей обязательно были с разними значениями причем в диапазоне от 1 до 16?
Т.е. я понимаю, что условие строится таким образом:
if()
{
$posting=0;
$warnText="какой-то текст";
}
Но как именно следует описать требуемое мне условие? Подскажите, пожалуйста.
Заранее признателен.
DiGGy 22.03.2006 09:59
Во-первых, ты не указал какое должно быть миниальное количество символов, и обязательны ли эти поля для ввода.
Во-вторых, тут 2 варианта решения проблемы, они зависят от имени твоих 16 полей.
1. Если присваивать имена полям типа INN, Recipe, Phone - т.е. наименования ничем не похожи между собой, то тебе придется делать проверку для каждого поля, итого 16 проверок (в примере указано регулярное выражение с условиям обязательного заполнения поля и как минимум 1 символ):
if (!ereg("^[0-9]{1,2}$",$f_INN)) {
$posting=0;
$warnText="какой-то текст";
}
2. Если ты назвал поля например Field1, Field2, ... Field16, то проверку можешь организовать в цикле:
reset($_POST);
while(list($key,$value) = each($_POST)) {
if (ereg("f_Field",$key) && !ereg("^[0-9]{1,2}$",$value)) {
$posting=0;
$warnText="какой-то текст";
}
}
зы: Пример не тестил, но должно быть верно :)
Григорий 22.03.2006 15:01
2 DiGGy
Во-первых, спасибо!:)
Во-вторых, поля все назвал по-разному, к сожалению...
В-третьих, все поля - обязательные для заполнения и возможно занесение в них значений 1, 2 .... 16 (т.е. один или два символа). Чтобы было понятно - это предложение пользователю дать прогноз на итоги чемпионата россии по футболу, т.е. пользователь должен в эти 16 полей внести места, которые он считает займут клубы в этом году...
Т.е. нужно:
1. Чтобы значения в этих полях не были одинаковыми! (т.е. не может быть одновременно два первых места и т.д.)
2. Чтобы значения в этих полях были только от 1 до 16 в любом порядке.
Вот такое условие мне необходимо описать в условии добавления объекта...
Поможете?:)
Григорий 22.03.2006 15:20
Если я обзову поля одинаково с разницей только в номере, то такое выражение должно быть:
reset($_POST);
while(list($key,$value) = each($_POST)) {
if (ereg("f_Field",$key) && !ereg("^[0-9]{1}$",$value) && !ereg("^[0-6]{2}$",$value)) {
$posting=0;
$warnText="какой-то текст";
}
}
Правильно я понимаю?
Но я не вижу тут сравнение значений полей... Мне ведь надо, чтобы они не были одинаковыми... Как расширить условие еще и такой проверкой?
Григорий 22.03.2006 16:14
2 DiGGy
Не работает...
Переименовал все поля в формат Bet1, Bet2 ... Bet16
Вставил твою проверку, заменив Field на Bet...
Подаю прогноз - выпадает ошибка, прописанная в условии добавления (заполнял 1, 2, 3 ... 16). Попробовал заполнить 01, 02, 03 ... 16 - результат тот же...
Что-то не то...
Григорий 22.03.2006 16:18
Так, одну проблему устранил - в строке if (ereg("f_Field",$key) f_Field должна быть с долларом:)))
Сейчас попробую разбить на две проверки - отдельно по каждому символу...
Однако одинаковые значения форма пропускает...
ПОМОГИТЕ!:)))
Григорий 22.03.2006 16:24
Теперь вообще все подряд форма начала пропускать...
Григорий 22.03.2006 23:44
И в ответ - тишина...
Ребята, помогите...
DiGGy 23.03.2006 12:33
Григорий, я не из службы поддержки и тут постоянно не зависаю - поэтому не могу оперативно отвечать.
у тебя есть 3 условия:
1. Обязательность заполнения всех полей.
2. Вводятся только числа в диапазоне от 1 до 16 включительно.
3. Значение каждого поля должно быть уникально.
если на каждое из этих условий ты хочешь выдавать свою ошибку - это одно решение, если код выдачи ошибки одинаковый - это другое решение.
зы: для решения автоматизации букмейкерских заморочек необходимо все нюансы строго отслеживать и хорошо представлять мат модель этого процесса. советую не один раз почитать всякие мануалы по пхп, регулярным выражениям...
Григорий 23.03.2006 12:39
Это не букмекерские заморочки:)))
Это просто один прогноз на весь сезон:)))
Код выдачи ошибки - одинаковый. С разделением ошибок - это было бы уже наглостью с моей стороны по отношению к тебе,
хотя это и идеальный вариант...
Ждать?:)
DiGGy 23.03.2006 15:33
ну ваще-то это и так наглость, не был таким ленивым - сам бы сделал :)
$values_array = array();
reset($_POST);
while(list($key,$value) = each($_POST)) {
if (ereg("f_Field",$key)) {
if (trim($value)=="") {
$posting=0;
$warnText="Ошибка! Невыполнено условие 1. [$key=$value]";
} elseif (!ereg("^[1-9]{1}[0-6]?$",trim($value))) {
$posting=0;
$warnText="Ошибка! Невыполнено условие 2. [$key=$value]";
} elseif (in_array(trim($value),$values_array)) {
$posting=0;
$warnText="Ошибка! Невыполнено условие 3. [$key=$value]";
} else {
$values_array[] = trim($value);
}
}
}
зы: скрипт проверил, все работает
Григорий 23.03.2006 16:04
2 DiGGy
Старик, ты - гений!
Без преувеличения!:)))
СПАСИБО!!!
Дело не в лени, дело в навыках. Я настолько же далек от программирования, как великая китайская стена от кремлевской стены:))) Просто стараюсь по мере возможности разбираться в коде... Твой код прост и понятен - довести его до ума мне уже проблем не составит:)))
Еще раз СПАСИБО!
Григорий 23.03.2006 16:25
Я малость поторопился насчет "проблем не составит":)))
Название поля в ошибке выводится как надо... Однако, не могу заменить имя поля на его русское наименование...
Помогите в последний раз:)))
Григорий 23.03.2006 16:26
Т.е. мне нужно $key=$value переделать в название_поля_по-русски=$value при выводе ошибки...
И не выходит каменный цветок...
DiGGy 23.03.2006 20:52
listQuery("select Description from Field where Class_ID='$classID' and concat('f_',Field_Name) = '$key'","\$data[Description]")
Григорий 24.03.2006 00:22
2 DiGGy
Старик, размер моей благодарности не имеет границ в пределах разумного:)))
ICQ 252545957
Пиво с меня!
Григорий 25.03.2006 16:56
2 DiGGy
Старик, последний вопрос:)))
В выводе результатов логично было бы выбрать все поля Bet1, Bet2 ... Bet16 вместе с Description каждого поля от данного пользователя и вывести их с сортировкой по возрастанию (по значению полей Bet1, Bet2 ... Bet16), а все остальные поля - как указано в шаблоне данных...
Как это реализовать?
|