Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/170: Рейтинг темы: голосов - 170, средняя оценка - 4.87
4 / 4 / 1
Регистрация: 11.08.2009
Сообщений: 110
1

checkbox+php+mysql

11.08.2009, 11:02. Показов 31438. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток)
Я новичок в php.
Подскажите пожалуйста как передать, записать значения checkbox на сервер, как записать их в БД.

я думала что это значение передается в атрибуте "value" и имеет значения либо 0 либо 1 - если он выбран, но не получилось.. посмотрела в phpinfo() что в запросе передатеся значение 'on'.. значит это не параметр value?

мне надо выбрать либо первый чекбокс, либо второй, либо и тот и другой...
как правильней в БД надо сделать 2 столбца на каждый? либо записывать в один значения например 1, 2, либо 3 (если выбраны оба)?

и как передать...

HTML5
1
2
<label for="Check">почта</label><input type="checkbox" name="post" value="0"/>
<label for="Check">e-mail</label><input type="checkbox" name="email" value="1"/>
PHP
1
$email = ($_POST['email'] == '1')? 1 : 0;
- не работает, так как передается значение 'on'
PHP
1
$email = ($_POST['email'] == 'on')? 1 : 0;
работает... но это же лажа? так нельзя..

Добавлено через 50 минут 4 секунды
и в догонку... какие значения записывать из выпадающего списка
HTML5
1
2
3
4
5
<select name="vid">
    <option value="Культура" >Культура</option>
    <option value="Искусство">Искусство</option>
    <option value="Спорт">Спорт</option>
</select>
значения value писать в БД не очень правильно наверно, если список составляет навпример 100 значаний, и значения каждого до 50 символов...и зачем повторяться..
HTML5
1
2
3
4
5
<select name="vid">
    <option value="1" >Культура</option>
    <option value="2">Искусство</option>
    <option value="3">Спорт</option>
</select>
так логичнее? но тогда надо написать функцию которая на каждое значение int присваивает строковое значение... это тоже долго наверно..

подскажите пожалуйста, как лучше.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2009, 11:02
Ответы с готовыми решениями:

checkbox + php + mysql
Здравствуйте дорогие друзья! Я пишу скрипт отправки значения checkbox в базу данных, но НИКАК не...

Checkbox+php+MySQL
Подскажите, как заставить работать checkbox в этой конструкции, т.е. при нажатии submit, с учетом,...

MySql + Php + Checkbox
Доброго времени суток. У меня возник вопрос. как хранить выборочные данные Checkbox? Существует...

Опять про checkbox, php, mysql
У меня есть 3 чекбокса: &lt;input type=&quot;checkbox&quot;&gt;Текст1&lt;br&gt; &lt;input type=&quot;checkbox&quot;&gt;Текст2 ...

18
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
11.08.2009, 11:15 2
HTML5
1
2
3
4
<form action="/a.php" method="post">
<input type="checkbox" name="aaa" value="1" />
<input type="submit" />
</form>
Только что проверил на Firefox, Opera и IE6... все они передают значение из value. Это если value не указать, то будут передавать 'on'.
Кстати, сразу проверять $_POST['email']=='1' не совсем правильно, т.к. если галка не будет установлена, то и самого элемента 'email' в массиве $_POST не будет существовать. В крайнем случае можно проверять
PHP
1
$email = (isset($_POST['email']))? 1 : 0;
Но должно работать и как ты делал... только желательно добавить проверку isset
PHP
1
$email = ((isset($_POST['email']))&&($_POST['email'] == '1'))? 1 : 0;
Добавлено через 7 минут 11 секунд
Цитата Сообщение от Helen7
так логичнее? но тогда надо написать функцию которая на каждое значение int присваивает строковое значение... это тоже долго наверно..
Оптимальнее было бы создать ещё одну таблицу, в которой будет содержаться название и номер этого названия... что-то вроде такого:
SQL
1
2
3
4
5
CREATE TABLE tab2 (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(70) NOT NULL,
  KEY(name)
) ENGINE=MyISAM;
А в основной таблице будет указан только номер этого названия... например name id INT UNSIGNED NOT NULL
И тогда можно с помощью LEFT JOIN подключать эту таблицу:
SQL
1
2
3
SELECT col1,col2,tab2.name,col3 FROM tab1 
  LEFT JOIN tab2 ON (tab1.nameid=tab2.id) 
  ORDER BY tab2.name;
Этот запрос выведет столбцы col1,col2 и col3 из основной таблице и текстовое название, которое соответствует номеру. И отсортирует по этому текстовому названию.
1
4 / 4 / 1
Регистрация: 11.08.2009
Сообщений: 110
11.08.2009, 11:56  [ТС] 3
Ага, спасибо! вот ведь... на счет второй таблицы сама бы могла догадаться)

а вот вопрос....
как потом на клиенте вывести выбранные флаги из БД, т.е он выбран - то checked='true', если нет - то checked='false' ?
и так же в списке - чтобы у option свойство selected было только у нужных
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
11.08.2009, 12:35 4
Для HTML можно указать просто selected, для XHTML нужно указывать selected="selected"
HTML5
1
<option value="?" selected="selected">ляляля</option>
0
4 / 4 / 1
Регистрация: 11.08.2009
Сообщений: 110
11.08.2009, 12:46  [ТС] 5
Не, как это в hnml делается, я знаю...

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

PHP
1
...."<input type=\"checkbox\" name=\"email\" checked=".mysql_result($query,0,'email')== '1'? "\"true\" ": "\"false\""." />"
не работает чтот...может в кавычках перемудрила...

Для списка вообще непонятно, не в каждом же <option> делать проверку...
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
11.08.2009, 14:45 6
PHP
1
echo "<input type=\"checkbox\" name=\"email\"".mysql_result($query,0,'email')== '1'? " checked=\"checked\"": ""." />";
0
4 / 4 / 1
Регистрация: 11.08.2009
Сообщений: 110
11.08.2009, 16:28  [ТС] 7
Спасибо!
я уже сделала почти так же) а для списков написала функции с отдельными запросами)
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
11.08.2009, 16:43 8
Для списков можно так же... только вместо checked там использовать selected
0
24 / 24 / 2
Регистрация: 02.11.2008
Сообщений: 118
14.08.2009, 03:25 9
Народ, думаю никто не обидется... Чегот из прочитанного не понял полностью, решался чужой вопрос... У меня нечто подобное, помогите разобраться (плиз не обижаться что я тут пишу))))

Собственно у меня есть ListBox содержится списочек, можно ли его как нить заполнять не через тупую пропись в ШТМЛ, а загружать из базы (mysql) из определенной таблицы?

Спасибо...
0
68 / 61 / 11
Регистрация: 10.08.2009
Сообщений: 226
14.08.2009, 08:12 10
Ессно можно.
Делаешь запрос к базе, загоняешь результат в массив, проходишь в цикле по этому массиву и выводишь <option> с текущими данными элемента массива.
0
1 / 1 / 0
Регистрация: 19.11.2009
Сообщений: 18
27.01.2010, 21:05 11
Цитата Сообщение от Humanoid Посмотреть сообщение
PHP
1
echo "<input type=\"checkbox\" name=\"email\"".mysql_result($query,0,'email')== '1'? " checked=\"checked\"": ""." />";
я так понял, этот код работает напрямую с базой?

Не подскажите, где писать собственно, сам запрос для $query?

Добавлено через 2 часа 21 минуту
Подскажите, плз, почему не срабатывает?
HTML5
1
<input type="checkbox" id="cb<?php echo $row->id;?>" name="tid[]" value="<?php echo $row->vip; ?>" <?php $row->vip == '1'? " checked=\"checked\"": ""?> onclick="isChecked(this.checked);" />
Хочу, чтоб при показе, если vip=1, то поле чекед, иначе - нет.
0
1 / 1 / 0
Регистрация: 07.09.2009
Сообщений: 68
17.02.2011, 10:43 12
Вопрос к Humanoid! По этой теме!
Я новичок не судите строго.
Вопрос относительно checkbox:
Должен ли checkbox в форме редактирования объекта отображать состояния записи в БД?!!!
(наличие или отсутствие галочки в квадратике) или он выполняет только функцию ввода записи!
Спасибо.
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
17.02.2011, 12:05 13
Цитата Сообщение от sevalery Посмотреть сообщение
Должен ли checkbox в форме редактирования объекта отображать состояния записи в БД?!!!
(наличие или отсутствие галочки в квадратике) или он выполняет только функцию ввода записи!
Это зависит от того, как реализуешь. Например, можешь вначале получить текущее состояние столбцов из БД и отобразить их текущее состояние... а если пользователь сохранит изменения, то записать в БД новые значения:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (isset($_POST['id'])) // если пришли данные из POST при нажатии кнопки Сохранить
{
  $id = (int)$_POST['id']; // получаем номер строки, для которой пришли изменения
  if (isset($_POST['col1'])) $col1='1'; else $col1='0'; // новое состояние col1
  if (isset($_POST['col2'])) $col2='1'; else $col2='0'; // новое состояние col2
  mysql_query("UPDATE tab SET col1='$col1',col2='$col2' WHERE id='$id'"); // сохраняем новые значения
}
 
........
........
mysql_query("SELECT id,col1,col2 FROM tab WHERE...."); // запрашиваем текущие данные из БД
if ($row = mysql_fetch_row()) // если что-то найдено по запросу, то...
{
  list($id,$col1,$col2) = $row; // для удобства из массива всё вытаскиваем в отдельные переменные
  echo '<form action="" method="post">';
  echo '<input type="hidden" name="id" value="'.$id.'" />'; // номер
  echo '<label for="col1"><input type="checkbox" id="col1" name="col1"'.($col1 ? ' checked="checked"' : '').' /> первый столбец</label>'; // текущее состояние столбца col1
  echo '<label for="col2"><input type="checkbox" id="col2" name="col2"'.($col2 ? ' checked="checked"' : '').' /> второй столбец</label>'; // текущее состояние столбца col1
  echo '<input type="submit" value="Сохранить" />';
  echo '</form>';
}
0
1 / 1 / 0
Регистрация: 07.09.2009
Сообщений: 68
18.02.2011, 00:39 14
Спасибо!
Сегодня обязательно попробую.

Добавлено через 9 часов 8 минут
Нет не работает.
Я вот думаю может checkbox не предназначен для отображения состояния записи в БД?
Есть такая проблемка!
Есть файл админки редактирования объектов недвижимости.
Добавил в форму редактирования checkbox и создал в БД row с именем newprice'.
Запись в БД сохраняется при установленной галочке, и принимает значение "1".
При повторном открытии файла квадратик пуст и если его не отметить галочкой значение в БД примет значение 0. Открыв страницу редактирования ты не знаешь состояния БД.
Испробовал несколько вариантов, в том числе и подсмотренных в различных формах.
Запись в БД проводится, состояния БД при открытии формы не отображается.

Это часть кода при невыполнении условий заполнения первоначальной формы или ошибок заполнения формы, типа "Вы не указали площадь объекта":
PHP
1
<input type="text" name="price" value="'.$_POST['price'].'" size="11" class="single_input">
таких строк формы около 30 - все работают. Далее следует передача checkbox
PHP
1
<input name="newprice" type="checkbox" value="1" '.$_POST['newprice'].'>
При таком коде запись в БД проводится, состояния БД при открытии формы не отображается..

Эта часть кода для первоначального вывода формы:
PHP
1
<input type="text" name="price" value="'.$row['price'].'" size="11" class="single_input">
таких строк формы около 30 - все работают.
Далее следует часть которую пытаюсь заставить отображать значение БД.
PHP
1
<input name="newprice" type="checkbox" value="1"{if $newprice}checked{/if}/>
Может дело в настройках row БД?

P.S.
1. Это Smarty
2. if (isset($_POST['$nedv'])) {$nedv = $_POST['$nedv'];} проверки есть для каждой строки.
3. 'newprice' => trim($_POST['newprice']), - для удаления пробелов есть для каждой строки формы.
Спасибо.
0
450 / 203 / 27
Регистрация: 23.12.2010
Сообщений: 645
18.02.2011, 05:20 15
sevalery,
а может
для тех что newprice
HTML5
1
<input name="newprice" type="checkbox" value="1" checked>
а для остальных
<input name="newprice" type="checkbox" value="1">
0
1 / 1 / 0
Регистрация: 07.09.2009
Сообщений: 68
18.02.2011, 09:30 16
Нет!
Такая запись кода устанавливает флажок при любом значении БД.

Добавлено через 8 минут
Так же пробовал такие варианты кода:

PHP
1
<input name="newprice" type="checkbox" value="1" '.$checked.'/>
PHP
1
input name="newprice" type="checkbox" value="1" '.$row['newprice'].'/>
Результат тот же: запись в БД проводится, состояния БД при открытии формы не отображается..
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
18.02.2011, 10:46 17
sevalery, checkbox ведёт себя не совсем так, как остальные input'ы. Для него value не важен. Устанавливается галочка, если указан атрибут checked:
HTML5
1
<input type="checkbox" checked>
или
HTML5
1
<input type="checkbox" checked="checked" />
...это одно и тоже, просто второй вариант валидный для стандарта xhtml

Если атрибут checked не указан, то галки не будет.
При этом, когда нажмёшь кнопку submit, то в post запросе серверу отправятся только те checkbox'ы, у которых стоит галка. Например
HTML5
1
<input name="newprice" type="checkbox" checked>
...при этом в post'е будет указано
Код
newprice=On
А если галка будет снята, в post вообще не будет упоминаний про newprice
Value нужен только для того, что бы вместо "On" передавать какое-то другое значение. Например, если HTML будет таким
HTML5
1
<input name="newprice" type="checkbox" value="1" checked>
...то при снятой галке упоминаний про newprice не будет, а при установленной будет
Код
newprice=1

Это я немного отвлёкся... для тебя важно другое: если ты хочешь, что бы изначально галка была установлена, то указывай атрибут checked:
HTML5
1
<input type="checkbox" checked="checked" />
Например
PHP
1
echo '<input name="newprice" type="checkbox" value="1" '.($row['newprice'] ? ' checked="checked"' : '').'/>';
Это тоже самое, что и
PHP
1
2
3
echo '<input name="newprice" type="checkbox" value="1" ';
if ($row['newprice']) echo ' checked="checked"';
echo '/>';
1
1 / 1 / 0
Регистрация: 07.09.2009
Сообщений: 68
18.02.2011, 12:14 18
Может тогда создать какой либо gif для отображения состояния БД или запись "Новая цена".
при условии {if $row["newprice"]==1} (или убрать value="1" =="on". Но тогда запись "Новая цена" необходимо вынести за пределы input ??
0
-1 / 0 / 0
Регистрация: 24.08.2016
Сообщений: 3
24.08.2016, 11:04 19
sevalery, Может ни тебе, дак кому-нибудь пригодится:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$rab = mysql_real_escape_string($_GET['rab']);
$query = mysql_query("SELECT Sex FROM Rabbit WHERE id='$rab';");
$idRow = mysql_fetch_assoc($query);
$Sex = $idRow['Sex'];
    if ($Sex == 0){
        $malechecked = "checked=\"checked\"";
    } else {
        $femalechecked = "checked=\"checked\"";
    }
print '
        <html><head><meta charset="utf-8"><title>Редактирование кролика ' . $rab . '</title></head><body>
        <table border="0">
        <input type="hidden" name="rab" value="' . $rab . '">
            <input type="hidden" name="rab" value="' . $rab . '">
            <tr>
            <td><p>Пол: </p></td><td><label><input type="radio" ' .$malechecked. ' name="Sex" value="0"/> Мужской</label> <label><input type="radio" ' .$femalechecked. ' name="Sex" value="1"/> Женский</label>
            </td>
            </tr>
            <tr>
            <td></td><td align="right"><input type="submit" value="Изменить"></td>          
            </tr>
            </form>
            </table>
            </body></html>
            ';
            mysql_close();
PHP
1
2
$Sex = mysql_real_escape_string($_GET['Sex']);
mysql_query("UPDATE Rabbit SET Sex='$Sex' WHERE id='$rab';");
0
24.08.2016, 11:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2016, 11:04
Помогаю со студенческими работами здесь

Некорректная работа checkbox и mySQL
Всем доброе время суток! Есть такая проблема, на форме есть некоторое количество checkbox,...

CheckBox вывод данных из mysql
Здравствуйте. У меня есть 2 чек бокса которые выводятся из базы данных. Чекбоксу передаются...

Сохранение и обновление состояния checkbox в MySQL
Привет всем! Вопрос: Как сохранить чекбокс в БД? Есть скрипт: &lt;?php mysql_query(&quot;SET NAMES...

Поиск и вывод из mysql через checkbox
Всем привет. Есть живой поиск по сайту (где при вводе сразу появляются результаты). Работает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru