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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Notice: Undefined index: vubor

Сообщения:  [1-10]    [11-20]  [21-27] 

 
 автор: sim5   (24.07.2008 в 17:29)   письмо автору
 
   для: pautina   (24.07.2008 в 16:42)
 

Вы должны делать так, чтобы было удобно пользователю, а не так как вам хорошо. Вы же не хотите, чтобы вас материли?)) Впрочем, дело хозяйское.

   
 
 автор: pautina   (24.07.2008 в 16:42)   письмо автору
 
   для: sim5   (24.07.2008 в 15:59)
 

Извините, с проверкой на выбор сейчас всё нормально, согласен с Вами, лучше выводить сообщение на страницу один раз для всех ошибок, просто мне там не всё понятно, позднее обязательно ещё подумаю как это реализовать.
И большое Вам спасибо за информацию о том что значение radio хранится в базе, я вообще не по тому пути шёл.

   
 
 автор: sim5   (24.07.2008 в 15:59)   письмо автору
 
   для: pautina   (24.07.2008 в 12:21)
 

Не надо кода, его тут уже предастаточно, да еще без картинок, а я не люблю читать книжки без картинок.))
А если серьезно, то я так и не понял - что же вы хотите сделать? Если судить по новой созданной вами теме, то вы все пытаесь скрестить ежика со змеей, и зачем вам метры колючей проволоки? Ну скажите мне - зачем вы по поводу каждой ошибки выводите на страницу код с ошибкой да еще со ссылкой на хистори браузера? Ну что за бред?
Я уже устал много говорить, у меня уже мозоль на языке.) Пвоторяю последний раз - забудьте вы весь этот "ужас", который у вас сейчас в коде. Проверяйте все поля формы сразу, по всем условиям нужных вам проверок, и все отчеты об ошибках в одну переменную и ее выводить на страницу один раз для всех ошибок - не мучайте своего пользователя. Далее, сразу после проверки полей, прверяете:
Если переменная ошибок пуста (это значит что нет ошибок ввода), то сейчас и только сечас можно записать полученные данные в базу!!! А у вас что? Если вы делаете так, как это у вас в новой теме, то чему вы удивляетесь, что у вас "проскочила проверка"?

   
 
 автор: pautina   (24.07.2008 в 12:21)   письмо автору
 
   для: sim5   (24.07.2008 в 11:12)
 

Странно почему то проскочил условие и всё равно зарегистрировал пользователя,
условие должно работать, могу я Вам дать весь код.

   
 
 автор: sim5   (24.07.2008 в 11:12)   письмо автору
 
   для: pautina   (24.07.2008 в 09:59)
 

$vubor = isset( $_POST['vubor'] ) ? intval($_POST['vubor']) : 0;
Все будет зависить от того, как у вас организованы таблицы. Например, у вас есть таблица юзеров, статус которых определяется как 1 и 2, соответственно продавец и покупатель. Каждый юзер имеет естественно свой id. По этому id связана другая таблица, например, неких предложений. После входа зарегистрированного пользователя, вы считываете и его статус из базы, уставливая в соотвествии ему переменную в сессии, например, $_SESSION['type']. Проверяя эту переменную, вы можете определить, например, для статуса 1 (продавец) разрешено выводить форму для редактирования записей таблицы предложений, но только записй этого юзера, которые определяете по его id. А для статуса 2 (покупатель), эта форма не доступна, и он может только просматривать записи таблицы предложений. Ну и т.п.. Если это примерно так, то вам нужно знать при получении выбора радиокнопки:
1. Если значение равно 0, то выдаем ошибку о невыбранном типе.
2. Если значение меньше 1 или больше 2, то вам кто-то "липу" шлет.
Если же соответствует вашему условию, пишите это значение в таблицу юзеров. Более вам об этих радиокнопках ничего знать и не надо.
То есть, повторяю, все зависит от того, что и как вы делаете. А вообще по базам - как лучше, что и чего, в разделе MySQL.

   
 
 автор: pautina   (24.07.2008 в 09:59)   письмо автору
 
   для: sim5   (24.07.2008 в 09:42)
 

А Вы ни скажете как записать условие если пользователь не выбрал ничего для radio?

   
 
 автор: sim5   (24.07.2008 в 09:42)   письмо автору
 
   для: pautina   (24.07.2008 в 09:22)
 

Интересно - как вы вообще в дальнейшем определяете кто продавец, а кто покупатель? Эти значения (1 и 2) пишутся в базу?

   
 
 автор: pautina   (24.07.2008 в 09:22)   письмо автору
 
   для: sim5   (23.07.2008 в 20:01)
 

Да на самом деле круто. Спасибо Вам за участки кода.
Хотел Вас спросить про условие
В форме есть элемент radio

echo "<CENTER>
               <TABLE border = '0' width = '90%' cellpadding = '4' class = 'screen'> 
                 <TR valign = 'top' align = 'left'>   
...
<TD>
                   <input type = 'radio' name = 'vubor' value = '1'>
                   <font size = '2' face = 'Tahoma'>Продавец</font>  &nbsp; &nbsp; &nbsp; &nbsp;
                   <input type = 'radio' name = 'vubor' value = '2'>
                   <font size = '2' face = 'Tahoma'>Покупатель</font>
                 </TD>
...
 </TR>  
               </TABLE>
              </CENTER>      
             <p>";   

У меня не получается сделать чтобы это условие заработало

$vubor = isset( $_POST['vubor'] ) ? $_POST['vubor'] : 0;
if( $vubor == 1 )
 { регистрация продавца }
else if( $vubor == 2 ) 
 { регистрация покупателя }

В чём может быть ошибка? Как только я описываю if для radio форма регистрации вообще не выводится на странице.

   
 
 автор: sim5   (23.07.2008 в 20:01)   письмо автору
 
   для: pautina   (23.07.2008 в 12:22)
 

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

<style>
#father {position: relative;}
#d_name, #d_login {
  position: absolute;
  left: 160px;
}
#d_name {top: 0px}
#d_login {top: 24px}
</style>

<div id="father">
<div id="d_name">text</div>
<div id="d_login">text</div>
<form action="">
<input type="text" name="name"><br>
<input type="text" name="login">
</form>
</div>

Здесь элемент <div id="father"> является родителем для формы и элементов с сообщениями. При этом, при выводе формы также выводится и переменная $error. Если ошибок нет (она пуста), то будет выведена только форма, если ошибки есть, то будут выведены соответствующие ошибки у соответствующих полей. Вам нужно будет подобрать стили для элементов формы, сообщений и прочее, так, чтобы у поля формы могло поместиться столько сообщений одновременно, сколько это определяется условием проверки. За более подробной информацией по этому поводу лучше в раздел HTML, а здесь будем решать несколько иную задачу, связанную с таким способом вывода.
Если бы мы выводили сообщения "кучей", то можно было бы поступить просто, проверяя значения поля, и при ошибках, мы добавляли бы переменной соответствующее сообщение как:
$error .= "Сообщение 1<br>"
Затем, если на очередном шаге опять ошибка, то
$error .= "Сообщение 2<br>"
и т.д.

Затем, обрамили бы эту переменную тегом параграфа, например, и выдали на страницу. Было бы просто, но нам охота "круто".) В этом случае мы не можем так поступить, так как у нас разные поля могут содержать разное количество сообщений, а они должны помещаться в один для них определенный элемент DIV. То есть, мы не можем при каждой ошибке в поле, переменной ошибок добавлять: <div id="d_name">Сообщение 1</div>, <div id="d_name">Сообщение 2</div> и т.д., а должны добавить для поля так: <div id="d_name">Сообщение 1<br>Сообщение 2...</div>.
Можно, конечно, устроить все с помощью условий и прочая, но давайте попробуем написать некий цифровой автомат, который хоть и будет работать по жесткой программе, но достаточно ему изменить значения нескольких переменных, и он будет обрабатывать и выдавать ошибки для различного числа полей, с различным числом сообщений. Во как! )
Собственно задача не так сложна. Здесь только одно условие соблюсти надо, хотя это условие всего лишь для того, чтобы не сбиться, так как эту часть я не автоматизировал.) Хотя, если подумать, то может быть...
И так, в чем заключается это условие - будем проводить проверку полей формы строго по порядку, по всем условиям. Например, если поле имени может содержать два условия проверки - на длину и допустимые символы, следующее поле логина уже три условия (дополнительно - есть ли такой пользователь уже), а все остальные поля по два условия (кроме поля капчи, у него всего одно условие), то проверяем последовательно все, от поля к полю. При этом максимальное число условий у нас будет равно 3, и максимальное число ошибок на поле также равно 3. Это нам нужно будет в дальнейшем, и мы (для неавтоматизированной части) держим в уме, что:
0 - первое условие проверки поля имени
1 - второе условие проверки поля имени
2 - нет условия проверки для поля имени
3 - первое условие проверки поля логина
4 - второе условие проверки поля логина
5 - третье условие проверки поля логина
6 - первое условие проверки поля пароля
7 - второе условие проверки поля пароля
8 - нет условия проверки для поля пароля
и т.д..
Жирным отмечено то, что нам не нужно, и мы будем использовать, для данного в описании примера, только 0, 1, 3 - 7, 9. Для чего это нам нужно будет? Мы не будем при каждой проверке условия писать в переменную сообщение, а вместо этого используем переменную $mask, в которой будем формировать маску ошибок. Установленный бит (равно 1) этой маски укажет нам, что это условие не прошло проверку, и какое сообщение мы будем брать из массива ошибок $mess для этого условия. Как будем формировать маску? В примере я определил, что максимальное число ошибок (условий проверки) для поля равно 3, значит мы отдаем по три бита для ошибок в этой маске на одно поле формы, то есть так:
000.000.000.000
где правый крайний бит маски - младший ее разряд, и правые три крайних бита, это маска определяющая ошибки поля name. Следующим полем идет поле логина, и следующие три бита справа, это биты маски ошибок для поля login. Следующие для пароля, и последние три для капчи.
Если при проверке поля имени, у нас будут ошибки как на длину значения, так и на запрещенные символы, то мы должны установить в маске два крайних бита:
000.000.000.011
И так далее для других полей. При этом третий бит маски поля имени всегда будет сброшен, так как у этого поля всего два условия проверки. Если установленные биты перевести в десятичное значение, то можно заметить, что мы должны будем заносить в маску, при ошибках, следующие значения: 1, 2, 8, 16, 32 и т.д.. То есть 2 в степени N, где N будет равна шагу проверки полей (весу условий), которые я описал выше. То есть, для нашего примера, это будет так: pow(2,0), pow(2,1), pow(2,3), (pow(2,2) у нас отсутствует, так как для поля имени есть "пустое" условие), pow(2,4)... Можно, конечно, непосредственно заносить в маску 1, 2, 8, 16, 32... при проверке, но я использовал такое, а вдруг взбредет в голову и это автоматизировать.;-) Да и легче держать "в уме" вес условия, чем конкретные числа.
И так, переходим к самому автомату:

<?
//Этот массив будет определять id для элементов div,
//но можно использовать и указания класса
$id = array("d_name","d_login","d_pass","d_secr");
//Это массив ошибок
$mess = array(
array(
"Поле имя должно быть не менее 6 символов!<br>",
"В поле имя разрешается только символы и цифры!"),
array(
"Поле логин должно быть не менее 10 символов!<br>",
"В поле логин разрешается только латинские символы и цифры!<br>",
"Такой пользователь уже существует!"),
array(
"Поле пароля должно быть не менее 6 символов!<br>",
"Поля пороля и проверки не совпадают!"),
array(
"Не верно указан код проверки!"));
$error ""//признак ошибки
$mask 0;  //маска ошибок
$n 3//макс. число ошибок на поле (условий проверки)
$p 4//число проверяемых полей
//Проверяем значение полей и при наличии ошибок
//устанавливаем в маске бит ошибки,
//который соответствует весу условия (ошибки).
//Делаем это с помошью логической битовой операции ИЛИ: 
//$mask |= pow(2,М), где М должна соответствовать 
//шагу проверки - весу условия.
//Например, при проверке поля логина на длину значения
//вес условия равен 3
if (strlen($login 10)) $mask |= pow(2,3);
//После выполнения всех условий проверки для всех полей,
//проверяем значение маски ошибок, 
//и, если хотя бы один бит ее установлен,
//то начинаем заполнять переменную $error сообщениями
if ($mask) {
  for (
$i=0$i<$p$i++) {
    
//Формируем маску для проверки,
    //сдвигая маску ошибок вправо на младшие разряды
    
$msk $mask >> $n $i;
    
//Проверяем, если хотя бы один из трех младших битов
    //маски установлен, то получаем текст ошибки
    
if ($msk 7) {
      
//Открываем div, получая его соответствующий id для CSS 
      
$error .= "<div id=\""$id[$i] ."\">";
      
//Теперь, будем сдвигать единицу влево
      //по макс. числу ошибок, сравнивая ее
      //по лог. И с маской
      
for ($k=0$k<$n$k++) {
        
//Если бит маски установлен, то получаем текст ошибки
        
if ($msk << $k)  $error .= $mess[$i][$k];
      }
      
//Закрываем элемент div
      
$error .= "</div>\n";
    }
  }
}
?>

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

PS. Договорились написать автомат, а получился полуавтомат.) Дело в том, что запись:
if ($msk & 7)
для автомата не годится. Нам нужно менять только переменные задающие работу автомата, а тут придеться записывать "ручками" новое значение маски, для разного максимального числа условий проверки поля. Исправим это. Если у нас максимальное число условий на поле равно 1, то маска должна быть равна 1. Для 2 условий маска равна 3, для 3 равна 7 и т.д.. То есть, опять тоже самое - 2 в степени N, но за минусом 1. Привязываем это к переменной, которая определяет у нас максимальное число условий на поле - $n. В итоге получаем:

<?
if ($msk pow(2,$n)-1)
?>

   
 
 автор: pautina   (23.07.2008 в 12:22)   письмо автору
 
   для: sim5   (23.07.2008 в 11:18)
 

А вы ни скажете как мне вывести сообщение о ошибке поля (<4 символов например для логина) на странице формы,
как описать error

<?php
// логин продавца    
   
if (empty($login_pr)) $error .= "<div class=\"login_pr\"  
      id=\"login_pr\">Поле логин осталось пустым. Это недопустимо.</div>"

   else   
      if (
preg_match('/[^-a-z\d]/i'$login_pr)) $error .= "<div class=\"login_pr\"  
      id=\"login_pr\">поле логин использует запрещённый символ! Это недопустимо.</div>"
;   
   else 
     if
      (
strlen($login_pr) < 4$error .= "<div class=\"login_pr\"  
      id=\"login_pr\">Поле логин должно содержать не менее 4 символов!</div>"

      
// Поле логина дожно быть не менее 4 символов 
    
else 
     if
      (
strlen($login_pr) > 20$error .= "<div class=\"login_pr\"  
      id=\"login_pr\">Поле логин должно содержать не более 20 символов!</div>"

      
// Поле логина дожно быть не более 20 символов

//    else
//      if
//        ((strlen($login_pr) < 4) or (strlen($login_pr) > 20)) $error .= "div class\"login_pr\" id=\"login_pr\">Поле логина должно содержать не менее 4 и не болеее 20 символов</div>";
?>    

   

Сообщения:  [1-10]    [11-20]  [21-27] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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