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

Форум PHP

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

 

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

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

тема: радиокнопка. все ли верно сделал?
 
 автор: liberty   (26.05.2013 в 09:47)   письмо автору
 
 

 
 <td width="200" valign="middle"><strong>Общежитие:</strong></td>
  <td>
            <p><input type="radio" name="hostel" value="1" />Есть</p>
            <p><input type="radio" name="hostel" value="2" />Нет</p>
  </td>

в обработчике проверяю
if  (isset($_POST['hostel']))         
     {$hostel = $_POST['hostel']; if ($hostel == '') {unset ($hostel);}}
     if($hostel == 1){$hostel = 'есть';}
     else{$hostel = 'нет';}

потом вставляю в БД
hostel='$hostel',

Работает то оно работает, но все ли верно?
И полю hostel дал значение varchar(4) - записывается "Есть" и "нет".

  Ответить  
 
 автор: DangerBay   (26.05.2013 в 10:13)   письмо автору
 
   для: liberty   (26.05.2013 в 09:47)
 

 
if  (isset($_POST['hostel']))         
     {$hostel = $_POST['hostel']; if ($hostel == '') {unset ($hostel);}}
     if($hostel == 1){$hostel = 'есть';}
     else{$hostel = 'нет';}


Это всё одной строчкой можно сделать
$hostel = ($_POST['hostel'] == 1) ? 'есть' : 'нет';

  Ответить  
 
 автор: confirm   (26.05.2013 в 10:19)   письмо автору
 
   для: DangerBay   (26.05.2013 в 10:13)
 

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

  Ответить  
 
 автор: DangerBay   (26.05.2013 в 10:33)   письмо автору
 
   для: confirm   (26.05.2013 в 10:19)
 

"нет" запишет в любом случае, но добавить
if(isset($_POST['hostel'])) 
не мешает.
или одной строчкой

$hostel = isset($_POST['hostel']) ? (($_POST['hostel'] == 1) ? 'есть' : 'нет') : NULL;


И полю hostel дал значение varchar(4) - записывается "Есть" и "нет".

правильней сделать поле ENUM("есть", "нет")

  Ответить  
 
 автор: confirm   (26.05.2013 в 11:06)   письмо автору
 
   для: DangerBay   (26.05.2013 в 10:33)
 

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

  Ответить  
 
 автор: DangerBay   (26.05.2013 в 13:26)   письмо автору
 
   для: confirm   (26.05.2013 в 11:06)
 

NULL заменить на значение по умолчанию, в данном случае "нет".
Вообще-то если поле обязательное, и оно не введено, то до этой части скрипта доходить не должно, поэтому мой первый вариант был даже без isset - это всё нужно сначала проверять и выводить ошибки при необходимости, только потом обрабатывать данные. Необязательным полям выставлять значения по умолчанию при добавлении в БД, если не нужно пустое значение

  Ответить  
 
 автор: confirm   (26.05.2013 в 14:22)   письмо автору
 
   для: DangerBay   (26.05.2013 в 13:26)
 

if (isset($_POST['hostel'])) {$hostel = $_POST['hostel']; if ($hostel == '') {unset ($hostel);}}...

Если написать это человечески, а не таким бедламом, например, по вашему, то что делать если не установлена? У вас тоже на это вопрос нет ответа, у вас вообще этот фактор почему-то не учитывается.

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

Вот чего нет ни у автора, ни у вас - ответа на этот вопрос.

  Ответить  
 
 автор: liberty   (26.05.2013 в 19:02)   письмо автору
 
   для: confirm   (26.05.2013 в 14:22)
 

ничего не понял.
гд еошибка?
и какое поле лучше присвоить? сейчас varchar

  Ответить  
 
 автор: confirm   (27.05.2013 в 07:42)   письмо автору
 
   для: liberty   (26.05.2013 в 19:02)
 

А никто не говорит об ошибке, есть несуразица. У вас код примерно такое делает:

- Покрасить забор в белый цвет?
Если получили ответ "Да" - красим в белый.
Если получили ответ "Нет" - не красим в белый.

А что делать, если ответ не получен? Красить в белый, не красить в белый, красить в какой угодно цвет или не красить вообще?

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

В вашем случае одно из значений "Да"/"Нет" должно быть выбрано по умолчанию и указываться как в базе, так и при выводе радиокнопок - если выбора не было, значит кнопке по умолчанию атрибут checked. В этом случае, если форма не присылает кнопку, значит форма липовая. Либо, если подразумевается действие и в случае отсутствия какого либо выбора, то должно быть и третье значение, которое и будет по умолчанию.

Что же вам нужно на самом деле, я не знаю. Что касается varchar, то выше уже упоминалось, что такие данные лучше хранить в полях ENUM, а возможно более выгоднее и в BOOLEAN (TINYINT) 0, 1.

  Ответить  
 
 автор: liberty   (27.05.2013 в 08:48)   письмо автору
 
   для: confirm   (27.05.2013 в 07:42)
 

если ENUM - то какое значение ставить для Length/Values ?
выходит надпись ENUM or SET data too long? Get more editing space
а какое значение выбрать для BOOLEAN?
для TINYINT?

что касается ваших размышлений. то пользвователь может проигнорировать и не выбрать "- Покрасить забор в белый цвет?" - и тогда мы ничего не выводим. и ни да и ни нет.

  Ответить  
 
 автор: confirm   (27.05.2013 в 09:39)   письмо автору
 
   для: liberty   (27.05.2013 в 08:48)
 

>что касается ваших размышлений. то пользвователь может проигнорировать и не выбрать "- Покрасить забор в белый цвет?" - и тогда мы ничего не выводим. и ни да и ни нет.

Ну так в вашем коде нет ответа на это случай, у вас непонятные действия, как то unset ($hostel) непонятное к чему.

Вы знаете, что такое системы счисления, и какая из них применяется в вычислительных машинах? А если знаете, то должны знать, что в двоичной системе каждый разряд может принимать только два значение - 0 и 1. То есть, один разряд двоичной системы может хранить информацию только о двух состояниях некоего объекта, или только два значения некоего свойства.

А "да", "нет" и "не принято" - это уже три состояния, три значения, и для их хранения одного двоичного разряда мало. Это к тому, что если при "не принято" вообще ничего не делать, еще ладно (хотя это предполагает третье действие, действие по умолчанию, чего у вас нет), но если это хранить, значит поле для этого хранения должно хранить три состояния - по умолчанию, и одно из выбранных.

Боюсь, что смысл этого до вас вообще не доходит.

BOOLEAN, это синоним TUNYINT. Но в отличие от BOOLEAN, которое может интерпретировать только два состояния: 0 - ложь, 1 - истина, TINYINT может хранить и три, и более состояния: 0 - нет действия, 1- действие А, 2 - действие В...

Что лучше - BOOLEAN, TINYINT или ENUM? Ни что. Выбор зависит от того, чем эти данные являются, и если они служат для выбора в сложных запросах, да и не сложных тоже, если их масса, то лучше все таки BOOLEAN, TINYINT (с учетом числа состояний), так как для чисел не требуется преобразований, а значит и поиск/выбор по ним происходит быстрее. Вывести же вместо 0, 1 нечто удобоваримое, так это просто:
<?
echo $row['choice'] ? 'Да' 'Нет';

  Ответить  
 
 автор: liberty   (27.05.2013 в 18:43)   письмо автору
 
   для: confirm   (27.05.2013 в 09:39)
 

confirm спасибо.
но хотелось бы увидеть и вашу редакцию.
как бы выглядел ваш код?

  Ответить  
 
 автор: confirm   (27.05.2013 в 19:08)   письмо автору
 
   для: liberty   (27.05.2013 в 18:43)
 

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

Вы так и не поняли сути того, в чем у вас затыка. Даже невозможно представить, что за значение может быть, которое и ни да, и ни нет. Вот я себе такого не представляю. А это Х-значение напрашивается у вас потому, что вы да/нет устанавливаете только после обязательного выбора. Несуразица полнейшая.

Если у вас типа есть черное, а вы предлагаете выбрать красное или синее, тогда все нормально, но почему вы не храните черного?

Если ваши радиокнопки (ваше да/нет), это например, выбор пользователя "получать или/нет" на почту информацию о новостях на сайте, то с какого перепугу вы проверяете "если пришло, то узнать да или нет"? В таких случаях значение 0 в базе, это значение по умолчанию (нет). А форма должна содержать не две радиокнопки (да/нет), а один чекбокс, который отображает текущее состояние выбора - если в базе 1, значит чебокс выбран, если 0, значит нет. Соответственно, отмечая чекбокс, пользователь желает получать новости, а снимая отметку с него - более не хочет получать их.

А весь код, это проверка - если установлен чекбокс (пришел с формой), значит записать в базу 1, если нет (отсутствует при приеме формы),значит пишем базу 0. Вот и весь код, который выражается одной строкой, которую вам уже представляли, сантаксис которой вы должны уже и сами давно знать.

Чего вам надо на самом деле, я не в курсе, но то что вы пишите, это полная несуразица, а вы этого даже и не понимаете.

  Ответить  
 
 автор: liberty   (27.05.2013 в 21:07)   письмо автору
 
   для: confirm   (27.05.2013 в 19:08)
 

запутался.
выбор простой.
пользователь должен выбрать.
если есть у него общага - то "да"
если "нет" - то нет.
его выбор записыавется в БД.

если он ничего не выбирает - то в базу ничего не записывается.

вы проще напишите. как вы бы сделали и код приложите )))

  Ответить  
 
 автор: confirm   (28.05.2013 в 04:50)   письмо автору
 
   для: liberty   (27.05.2013 в 21:07)
 

Проще это как - сказать вам как вам нужно? Увы, этого я не могу, не я владелец ваших мозгов, и что вам на самом деле нужно мне не известно.

Если в базу ничего не записывается, то что для вас будет означать отсутствие записи в ней - значит нет общежития, или это открытый вопрос?

Если именно выбор пользователя "нет", это истина, то значит и база должна учитывать три значения: "не выбрано", "не определено", ну или "не известно" - это значение по умолчанию, NULL, и одно из значений выбора: 0 - нет, 1 - да. Значит и при выводе этой информации должны отображаться три возможных значения:
<?
echo $row['choice']===null 'не определено' : ($row['choice'] ? 'да' 'нет')
Значит и радиокнопки в форме, и проверка на "установлено ли?", это все верно.

Но что означает "то в базу ничего не записывается"? Если ваша форма, это всего две радиокнопки, и запись только этой информации, то все нормально. Но если это малая часть записываемой информации, то это что - отдельный запрос на запись именно этого выбора, если он был? Слишком жирно. Значит ваш код должен определять одно из трех значений для записи - null, 0, 1, и запись в это поле происходит в любом случае, не зависимо от того был выбор или нет. При этом, при проверке принятых данных нужно проверять входит ли выбранное значение в установленный диапазон - min/max((int)var).

Если же отсутствие записи означает тоже самое что и "нет", то NULL, это уже избыточное состояние. Значит база должна хранить всего два значение: 0 - "нет", по умолчанию, и 1 - "да". А форма содержать один чекбокс. В этом случае поступаем так, как я писал ранее.

  Ответить  
 
 автор: liberty   (28.05.2013 в 05:20)   письмо автору
 
   для: confirm   (28.05.2013 в 04:50)
 

исправил. теперь по умолчанию - общаги нет.
пользователь теперь не сможет проигнорировать и должен выбрать либо да, либо нет.
  <td width="200" valign="middle"><strong>Наличие общежития:</strong></td>
  <td>
<p><input type="radio" name="hostel" value="1" />Есть</p>
<p><input type="radio" name="hostel" value="2" checked/>Нет</p>
</td>


в обработчике
$hostel = ($_POST['hostel'] == 1) ? 'есть' : 'нет';

теперь все верно?

вы писали
>>>>
А форма содержать один чекбокс. В этом случае поступаем так, как я писал ранее.
как один чебокс? сейчас их два?

еще вопрос.
надо ли переменную hostel как-то обрабатывать перед записью в БД?
сейчас
$result = mysql_query ("insert  bd SET hostel='$hostel',

  Ответить  
 
 автор: confirm   (28.05.2013 в 05:50)   письмо автору
 
   для: liberty   (28.05.2013 в 05:20)
 

Я уже и не знаю как вам объяснять... Вы даже сами не знаете, что вам нужно на самом деле, куда уж мне тогда что либо говорить. Делайте как знаете.

У вас не чекбоксы, у вас радиокнопки, а это большая разница.

Насчет обработки (проверки) я буквально недавно написал. Я уже не в силах что либо объяснять.

  Ответить  
 
 автор: liberty   (28.05.2013 в 07:28)   письмо автору
 
   для: confirm   (28.05.2013 в 05:50)
 

все равно спасибо.

  Ответить  
 
 автор: confirm   (28.05.2013 в 07:41)   письмо автору
 
   для: liberty   (28.05.2013 в 07:28)
 

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

Вы же не пишите программу, вы спрашиваете здесь об "инструкциях". Вот это что такое?:

исправил. теперь по умолчанию - общаги нет.
пользователь теперь не сможет проигнорировать и должен выбрать либо да, либо нет.


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

  Ответить  
 
 автор: liberty   (28.05.2013 в 08:19)   письмо автору
 
   для: confirm   (28.05.2013 в 07:41)
 

эх, не дождусь я вашего кода )))
вы так хорошо пишите, но как хотелось бы увидеть и ваше решение.

  Ответить  
 
 автор: confirm   (28.05.2013 в 10:43)   письмо автору
 
   для: liberty   (28.05.2013 в 08:19)
 

А станцевать? Я не пишу инструкций, так как программирование, это "думать" и думать вам, не мне. Нужен код, да пожалуйста, но я не скажу вам, что сделать вот так, потому, что вы сами не представляете как вам надо, а мне тем более это не известно.

Предположим, что я хочу выяснить пьете ли вы пиво. И узнать это можно либо предположением с последующим вашим подтверждением/опровержением, либо только на основе непосредственно вашего ответа. Что из этого выбрать, это зависит от того, что в дальнейшем мы будем отображать.

1) На основе предположения

Я изначально предполагаю, что вы не пьете пива, поэтому в таблицу пишу это значение как по умолчанию: 0 - не пьет.
--
-- Структура таблицы `preferences`
--

CREATE TABLE `preferences` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(10) NOT NULL COMMENT 'субъект',
  `beer` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0 - не пьет, 1 - пьет',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

--
-- Дамп данных таблицы `preferences`
--

INSERT INTO `preferences` (`id`, `user`, `beer`) VALUES
(1, 'liberty', 0);

Поместил в нее ваш "фэйс" и теперь мне осталось только выяснить истину, и я отправляю вам форму, получаю ответ, и всему миру сообщаю ваши вкусы:
<?
//узнаем результат
if(isset($_POST['user']) && ($id = (int)$_POST['user'])) {
    
$beer = isset($_POST['beer']) ? 0;
    
mysql_query('UPDATE `preferences` SET `beer`='.$beer.' WHERE id='.$id);
}    
//сообщаем всем
$q mysql_query('SELECT user, IF(`beer`, "пьет", "не пьет") beer FROM `preferences` WHERE id=1');
$q mysql_fetch_assoc($q);
echo 
$q['user'],' ',$q['beer'],' пиво.';
//определяем состояние формы
$q mysql_query('SELECT * FROM `preferences` WHERE id=1');
$q mysql_fetch_assoc($q); 
$choice $q['beer'] ? 'checked' null;
?>
<form method="post">
<label>Вы пьете пиво? <input type="checkbox" name="beer" <?=$choice?> /></label>
<input type="hidden" name="user" value="1" />
<button>Ответить</button>
</form>

Скука, и обстановка в квартире надоела, и эти if, else... Сменим обстановку, а заодно и код новый, по феншую:
<?
//узнаем результат
if(isset($_POST['user']) && ($id = (int)$_POST['user'])) {
    
$beer $_POST['beer'] & 1;
    
mysql_query('UPDATE `preferences` SET `beer`='.$beer.' WHERE id='.$id);
}    
//сообщаем всем
$q mysql_query('SELECT user, IF(`beer`, "пьет", "не пьет") beer FROM `preferences` WHERE id=1');
$q mysql_fetch_assoc($q);
echo 
$q['user'],' ',$q['beer'],' пиво.';
//определяем состояние формы
$q mysql_query('SELECT * FROM `preferences` WHERE id=1');
$q mysql_fetch_assoc($q); 
$choice $q['beer'] ? 'checked' null;
?>
<form method="post">
<label>Вы пьете пиво? <input type="checkbox" onclick="this.form.beer.value ^= 1" <?=$choice?> /></label>
<input type="hidden" name="beer" value="<?=$q['beer']?>" />
<input type="hidden" name="user" value="1" />
<button>Ответить</button>
</form>
результат тот же, но какая-то чакра открылась.

2) Только на основе принятых данных, политкорректный подход

В этом случае предположение может быть не истиной, а значит нечего напраслину наводить на человека:
--
-- Структура таблицы `preferences`
--

CREATE TABLE `preferences` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(10) NOT NULL COMMENT 'субъект',
  `beer` tinyint(1) DEFAULT NULL COMMENT 'null - не определено, 0 - не пьет, 1 - пьет',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

--
-- Дамп данных таблицы `preferences`
--

INSERT INTO `preferences` (`id`, `user`, `beer`) VALUES
(1, 'liberty', NULL);

<?
//узнаем результат
if(isset($_POST['user']) && ($id = (int)$_POST['user'])) {
    
$beer = isset($_POST['beer']) ? (int)$_POST['beer'] & null;
    if(
$beer!==nullmysql_query('UPDATE `preferences` SET `beer`='.$beer.' WHERE id='.$id);
}    
//сообщаем всем
$q mysql_query('SELECT * FROM `preferences` WHERE id=1');
$q mysql_fetch_assoc($q);
if(
$q['beer']===null) echo 'Пьет ли пиво '.$q['user'].' нам не известно'
else echo 
$q['user'].' '.($q['beer'] ? 'пьет' 'не пьет').' пиво.';
?>
<form method="post">
Вы пьете пиво? <label><input type="radio" name="beer" value="0" /> нет</label> <label><input type="radio" name="beer" value="1" /> да</label>
<input type="hidden" name="user" value="1" />
<button>Ответить</button>
</form>


А) Решения - произвольная выборка из возможных.

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

А вот вы попробуйте ответить - равноценны ли данные в 1) и 2)? Сможете ответить, значит поймете какие вам нужны и как их хранить, числовые, или, если просто строковые, то хорошо ли это, и если плохо, то ENUM или SET нужно? И есть ли необходимость заставлять пользователя обязательно ответить, если один из ответов предполагает "Нет"?

Думайте о том, что решаете, а не бегайте по форуму выспрашивая "а" или "б" написать - опыт дело наживное, главное понимание того, что вы делаете.

  Ответить  
 
 автор: liberty   (04.06.2013 в 05:28)   письмо автору
 
   для: confirm   (28.05.2013 в 10:43)
 

вы не поверите. я все еще не знаю ответа.
все решаю вашу задачу.

  Ответить  
 
 автор: confirm   (04.06.2013 в 11:34)   письмо автору
 
   для: liberty   (04.06.2013 в 05:28)
 

Ну почему же, верю.

  Ответить  
 
 автор: liberty   (09.06.2013 в 00:12)   письмо автору
 
   для: confirm   (04.06.2013 в 11:34)
 

вроде дошло как надо))
сейчас у меня три выбора
<p><input type="radio" name="hostel" value="1" />Есть</p>
<p><input type="radio" name="hostel" value="2" />Нет</p>
<p><input type="radio" name="hostel" value="3" checked/>Не указано</p>


как тогда в обработчике переписать
$hostel = ($_POST['hostel'] == 1) ? 'есть' : 'нет';

  Ответить  
 
 автор: confirm   (09.06.2013 в 01:11)   письмо автору
 
   для: liberty   (09.06.2013 в 00:12)
 

Уже и не знаю как вам и объяснять.

Не отмеченные элементы формы radio и checkbox на сервер не отправляются. Так зачем вы "наглеете", заставляя пользователя еще и выбирать "Не указано"? Ну неужели если он не выберет ни да, ни нет, а следовательно вы не получите на сервере переменной hostel, нельзя сделать вывод, что выбора не было?

Вы вообще задавались вопросом, что вам необходимо знать - имеете или не имеет общежитие, или же не важно, не знаете этого и бог с ним? Что за информация вам вообще нужна?

  Ответить  
 
 автор: liberty   (09.06.2013 в 01:33)   письмо автору
 
   для: confirm   (09.06.2013 в 01:11)
 

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

все просто.
но часто эти в страницы я как сам вношу изменения (адрес, тел.)
и я не знаю - есть у них общага или нет.
ранее - по умолчанию вносилось $hostel = 1 - что означает "нет".
но это не верно. и поэтому добавил поле "не указано" что должно быть по умолчанию.
и теперь все корректно.

  Ответить  
 
 автор: confirm   (09.06.2013 в 03:02)   письмо автору
 
   для: liberty   (09.06.2013 в 01:33)
 

Темный лес, ей богу.

Если вы готовите сводный список учебных заведений, в котором нужно указать наличие или отсутствие общежития, а также отсутствие информации по этому вопросу, то наверное ни "не выбрано", а "неизвестно", не так ли?

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

И такие данные для вашего случая лучше хранить в ENUM.

  Ответить  
 
 автор: liberty   (09.06.2013 в 03:07)   письмо автору
 
   для: confirm   (09.06.2013 в 03:02)
 

пусть будет "неизвестно"
то если есть "есть", нет", и "неизвестно" то как тогда переписать строчку
$hostel = ($_POST['hostel'] == 1) ? 'есть' : 'нет';


если брать поле, которое предлагаете Вы - то какую длину ставить?
ENUM or SET data too long? Get more editing space

  Ответить  
 
 автор: confirm   (09.06.2013 в 03:11)   письмо автору
 
   для: liberty   (09.06.2013 в 03:07)
 

А если я подделаю форму и вышлю вам вместо значения 1, например 121, тогда что? Или это исключительно для себя делается, и никто кроме вас не может этого добавлять?
Впрочем лажу всегда можно прислать. )

  Ответить  
 
 автор: liberty   (09.06.2013 в 03:17)   письмо автору
 
   для: confirm   (09.06.2013 в 03:11)
 

ну как мы можете прислать 121? )))
если только 1, 2 и 3.

<p><input type="radio" name="hostel" value="1" />Есть</p>
<p><input type="radio" name="hostel" value="2" />Нет</p>
<p><input type="radio" name="hostel" value="3" checked />неизвестно</p>

  Ответить  
 
 автор: confirm   (09.06.2013 в 03:21)   письмо автору
 
   для: liberty   (09.06.2013 в 03:17)
 

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

  Ответить  
 
 автор: liberty   (09.06.2013 в 03:22)   письмо автору
 
   для: confirm   (09.06.2013 в 03:21)
 

и что делать?

  Ответить  
 
 автор: confirm   (09.06.2013 в 03:31)   письмо автору
 
   для: liberty   (09.06.2013 в 03:22)
 

Ну не знаю, самый верный способ, это пистолет к виску.... и нет проблем. )

Вы чем оперируете готовя свой шедевр - шариковой ручкой на бумаге, или же все таки языком программирования? Ну наверное же у этого языка есть то, на чем можно построить проверку принимаемых данных? Или это невозможно сделать?

Вы ранее задавали вопрос этот, и я вам на него ответил (вариант), вы хоть обратили на это внимание? Вот что это и для чего это я писал?

$_POST['beer'] & 1

  Ответить  
 
 автор: liberty   (09.06.2013 в 03:47)   письмо автору
 
   для: confirm   (09.06.2013 в 03:31)
 

так. не сдаемся.

если у меня
<p><input type="radio" name="hostel" value="1" />Есть</p>
<p><input type="radio" name="hostel" value="2" />Нет</p>
<p><input type="radio" name="hostel" value="3" checked/>Неизвестно</p>


то почему при выборе "Неизвестно"
записывается в БД "1"?

if(isset($_POST['hostel'])) {$hostel = isset($_POST['hostel']) ? (int)$_POST['hostel'] & 1 : null;}

  Ответить  
 
 автор: confirm   (09.06.2013 в 03:54)   письмо автору
 
   для: liberty   (09.06.2013 в 03:47)
 

А зачем вы вставили в свой код то, что я писал?

(int)$_POST['hostel'] & 1

Вы понимаете, что тут выполняется?

И вы понимаете, что ваши условия, мягко выражаясь, вверх попой?

  Ответить  
 
 автор: liberty   (09.06.2013 в 03:56)   письмо автору
 
   для: confirm   (09.06.2013 в 03:54)
 

таки сокращенные записи я не понимаю.
а такие вроде понятны
if  (isset($_POST['tel_pk']))         
 {$tel_pk = $_POST['tel_pk']; if ($tel_pk == '') 
{unset ($tel_pk);}}

  Ответить  
 
 автор: confirm   (09.06.2013 в 04:22)   письмо автору
 
   для: liberty   (09.06.2013 в 03:56)
 

А если не понимаете, то зачем копируете, вставляете в свой код, а потом спрашиваете почему так получается? Может мне просто нравится эта закоруючка &, она мне напоминает безрукую Венеру Милосскую, вот я и написал - $_POST['beer'] & 1, что означает переменная beer и Венера 1 шт.

Открывайте руководство РНР (давно пора скачать его с официального сайта), выучить, попробовать и понять все его операторы. Это не так и сложно.

&, она же И - логическая операция, и применил я ее как "маску", которая позволяла мне оперировать только самым младшим битом принятого значения, остальные биты значения отбрасывались. Но я ожидал только 0 или 1, при этом все что выше этих значений мне бы и давало требуемое - то есть,четное и нечетное.

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

Проверять надо, а проверка предполагает либо возврат пользователю ошибок, либо приводить значения к по умолчанию при ошибках. У вас ни того и ни другого. Открывайте манул, ищите в нем вот такое:
<?
$var 
filter_var($varFILTER_VALIDATE_INT'options'=>array('min_range' => 1'max_range' => 3))
А по возвращенному значению принимайте решение.

Трудно представить что можно еще кроме "да" и "нет", но вдруг еще потребуется "50/50" и что тогда, будет весь код перковыривать? Значение по умолчанию, это все таки первое в порядке значение, а затем уже идут всевозможные наборы. А у вас через задницу все.

  Ответить  
 
 автор: liberty   (09.06.2013 в 04:28)   письмо автору
 
   для: confirm   (09.06.2013 в 04:22)
 

ну тогда в первый класс.
с чего начать? какой ресурс посоветуете для изучения php?

  Ответить  
 
 автор: confirm   (09.06.2013 в 04:32)   письмо автору
 
   для: liberty   (09.06.2013 в 04:28)
 

Да какой вам еще ресурс нужен, если есть официальный?
Скачивайте, и изучайте - http://www.php.net/download-docs.php

  Ответить  
 
 автор: liberty   (09.06.2013 в 04:42)   письмо автору
 
   для: confirm   (09.06.2013 в 04:32)
 

спасибо. скачиваю

  Ответить  
 
 автор: liberty   (09.06.2013 в 04:59)   письмо автору
 
   для: liberty   (09.06.2013 в 04:42)
 

скачал.
в чем может быть проблема - меню в левой колонке есть - а в правой пустота.
пробовал несколька вариатнтов.

  Ответить  
 
 автор: confirm   (09.06.2013 в 05:07)   письмо автору
 
   для: liberty   (09.06.2013 в 04:59)
 

Либо сам файл битый (было у них однажды такое), либо ваш файл заблокирован системой. Посмотрите его свойства, если он заблокирован, то во вкладке Общие будет сообщено об этом, и будет доступна кнопка Разблокировать.

  Ответить  
 
 автор: confirm   (09.06.2013 в 05:34)   письмо автору
 
   для: liberty   (09.06.2013 в 04:59)
 

Скачал, проверил. Кто-то криворукий его составлял - ТОС битая, не все содержимое отображает, доступ ко всему возможен только со страницы Справочник функций.

  Ответить  
 
 автор: liberty   (09.06.2013 в 05:36)   письмо автору
 
   для: confirm   (09.06.2013 в 05:34)
 

ну там вообще русского вариант нет

http://us2.php.net/get/php-5.4.16.tar.bz2/from/a/mirror

  Ответить  
 
 автор: confirm   (09.06.2013 в 05:41)   письмо автору
 
   для: liberty   (09.06.2013 в 05:36)
 

Вы разобрались почему не отображает страницы?
А в этом в ТОС (это и есть левая часть, оглавление), самый последний каталог (тоже кривой, не верна кодировка), который отображается "крякозябриками", это и есть страница оглавления - Справочник функций. Вот с нее можно переходить на все содержимое.

  Ответить  
 
 автор: liberty   (09.06.2013 в 17:41)   письмо автору
 
   для: confirm   (09.06.2013 в 05:41)
 

выбрал чекбокс
<p><input type="checkbox" name="hostel" value="1" />Наличие общежития</p>


в обработчике
$hostel = ($_POST['hostel'] == 1) ? "да" : ""; 

вроде работает.
если отмечаем чебокс - будет написано наличие общаги "да"
если не отмечено - то ничего не выводится.
но как поставить значение "нет", оставив при этом " " (пустоту).
объясню.
если я сам захожу на страницу модерации компании и изменения дургие данные и не выбираю чекбокс то при
$hostel = ($_POST['hostel'] == 1) ? "да" : "нет"; 

идет запись "нет".
как ничего не выбирая, чтобы ничего не записывалось в поле hostel?

  Ответить  
 
 автор: confirm   (09.06.2013 в 17:59)   письмо автору
 
   для: liberty   (09.06.2013 в 17:41)
 

Мне проще за оплату написать вам все с нуля, нежели объяснить простые вещи. Ну не понимаете вы, и мало того, выше я писал и примеры, в которых есть ответ на этот вопрос, и все напрасно. Ну не знаю я как вам еще можно объяснить.

  Ответить  
 
 автор: cheops   (09.06.2013 в 19:04)   письмо автору
 
   для: liberty   (09.06.2013 в 17:41)
 

Добавьте условие проверки существования переменной

if(isset($_POST['hostel'])){
  $hostel = ($_POST['hostel'] == 1) ? "да" : "нет";
  ...
  // Запись в базу данных
}

  Ответить  
 
 автор: liberty   (09.06.2013 в 20:22)   письмо автору
 
   для: cheops   (09.06.2013 в 19:04)
 

все равно до меня пока не доходит.
у меня в БД записывается уже
insert pu SET hostel='$hostel',

что проверять нужно, на какое условие?

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

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