сохранение флажка checkbox в mysql Подскажите! Необходимо записать значение флажка в таблицу БД MySQL (чтоб при открытии страницы все отмеченные флажки стояли на месте) есть ли статьи с примерами как реализовать это? ничего толкового я ненашёл, либо расписанно для умных программистов
Можешь установить любой форумный движок и посмотреть, какая там структура таблиц, которые отвечают за личные настройки. Там есть что то подобное. Имена полей, которые отвечают за флажки, имеют тип bool.
я видел примеры - где сессия хранится, а вот с базой проблемно, форум перелопачивать тоже не лёгкое дело, разобраться что да как
запись Checkbox в базу данных, php+mysql Всем добрый день. сделал страничку с записью чекбоксов в БД. создал и заполнил таблицы: PHP: CREATE TABLE `tutorial_users` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT , `username` VARCHAR( 50 ) NOT NULL , `admin` TINYINT( 1 ) NOT NULL DEFAULT '0', PRIMARY KEY ( `id` ) ) ENGINE = MYISAM PHP: INSERT INTO `tutorial_users` ( `id` , `username` , `admin` ) VALUES ( NULL , 'Stewie', '0' ), ( NULL , 'Peter', '0' ), ( NULL , 'Brian', '0' ), ( NULL , 'Meg', '0' ), ( NULL , 'Lois', '0' ), ( NULL , 'Chris', '0' ), ( NULL , 'Greased Up Deaf Guy', '0' ), ( NULL , 'Quagmire', '0' ); сама форма: PHP: <?php include("connect.php"); $updated = FALSE; if(count($_POST) > 0){ $admin = $_POST['admin']; array_map('intval',$admin); $admin = implode(',',$admin); mysql_query("UPDATE tutorial_users SET admin=0") or trigger_error(mysql_error(),E_USER_ERROR); mysql_query("UPDATE tutorial_users SET admin=1 WHERE id IN ($admin)") or trigger_error(mysql_error(),E_USER_ERROR); $updated=TRUE; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>phpfreaks checkbox tutorial</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> <?php if($updated===TRUE){ echo '<div>Privileges Updated!</div>'; } ?> <table> <tr> <th>Username</th> <th>Admin Privileges</th> </tr> <?php $sql = "SELECT id,username,admin FROM tutorial_users ORDER by id ASC"; $result = mysql_query($sql) or trigger_error(mysql_error(),E_USER_ERROR); while(list($id,$username,$admin)=mysql_fetch_row($result)){ $checked = ($admin==1) ? 'checked="checked"' : ''; echo '<tr><td>'.$username.'</td><td><input type="checkbox" name="admin[]" value="'.$id.'" '.$checked.'/></td></tr>'."\n"; } ?> <tr><td colspan="2"><input type="submit" name="submit" value="Update Privileges" /></td></tr> </table> </form> </body> </html> файл connect.php: PHP: <?php $dblocation = "localhost"; $dbname = "user_base"; $dbuser = "user"; $dbpasswd = "password"; $dbcnx = mysql_connect($dblocation, $dbuser, $dbpasswd); if (!$dbcnx) { echo "<p>К сожалению, не доступен сервер mySQL</p>"; exit(); } if (!mysql_select_db($dbname,$dbcnx) ) { echo "<p>К сожалению, не доступна база данных</p>"; exit(); } $ver = mysql_query("SELECT VERSION()"); if(!$ver) { echo "<p>Ошибка в запросе</p>"; exit(); } echo mysql_result($ver, 0); ?> http://andreaandrea97.16mb.com/adds.php Здесь нужно сделать так, что включеный чексбокс с галочкой после нажатия на кнопку Update Privileges - должен стать disabled. (у меня почемуто когда прописывал атрибуды disabled стали сбрасыватся все другие сохранённые галочки, остаётся только одна сохранёная - которую сбрасывает другая) Так же нужно поставить на ограничение выбора - не все галки выбирать разом, а нажав на одну - с предыдущей снимается галка. и последне, наверное самое трудное: это нужно сделать при нажатии на чекбокс - справа от него появится поле ввода имени, куда прежде чем сохранить нужно его ввести, и после сохранения оно будет как и checkbox - только видным, (disabled) помогите пожалуйста, что и где надо изменить?, что то я совсем запутался, и не идёт как надо
я пробовал вот так: http://andreaandrea97.16mb.com/names.php тут идёт сброс предыдущих чекбоксов при выборе нового: изменил вот это: строка: (параметр disabled добавил) $checked = ($admin==1) ? 'checked="checked" disabled' : ''; было вот так до этого: $checked = ($admin==1) ? 'checked="checked"' : '';
Вот пример с radio с минимальными изменениями кода PHP: if(count($_POST) > 0){ $admin = (int) $_POST['admin']; mysql_query("UPDATE tutorial_users SET admin=0") or trigger_error(mysql_error(),E_USER_ERROR); mysql_query("UPDATE tutorial_users SET admin=1 WHERE id = '$admin'") or trigger_error(mysql_error(),E_USER_ERROR); $updated=TRUE; } // ... while(list($id,$username,$admin)=mysql_fetch_row($result)){ $checked = ($admin==1 ? 'checked="checked" disabled="disabled"' : ''); echo '<tr><td>'.$username.'</td><td><input type="radio" name="admin" value="'.$id.'" '.$checked.'/></td></tr>'."\n"; } Насчет появляющегося поля не понял, более подробно опишите, что нужно.
получилось вот так: http://andreaandrea97.16mb.com/radio.php Здесь одна основная проблема, как и с чекбоксом, сбрасываются сохранённые данные, при сохранении нового, и не показывает множественный выбор, а только один созранённый результат
надо с отмеченным чекбоксом или кнопкой, чтобы тот кто отметил - ввёл имя, чтобы это сохранилось в базу и при обновлении страницы вывелось, (отмеченный чекбокс + поле имя но редактировать их нельзя, они сохранены) но это совсем сложноватая затея, думаю хватит только отметки сохранения чекбоксов
Уберите первый UPDATE-запрос из скрипта - это же так очевидно. чекбоксы + обработка событий средствами JavaScript/jQuery
убранный запрос update не помог, скорее всего это проблема с disable, во первых он не сохраняется должным образом. а только один результат, во вторых сбрасывает старые галки. без него галки не сбрасываются
вот как реализовал : http://andreaandrea97.16mb.com/adds33.php снять отмеченные галки: http://andreaandrea97.16mb.com/adds.php вот код : PHP: <?php include("connect.php"); $updated = FALSE; if(count($_POST) > 0){ $admin = $_POST['admin']; array_map('intval',$admin); $admin = implode(',',$admin); mysql_query("UPDATE tutorial_users SET admin=1 WHERE id IN ($admin)") or trigger_error(mysql_error(),E_USER_ERROR); $updated=TRUE; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>checkbox</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> <?php if($updated===TRUE){ echo '<div>настройки сохранены!</div>'; } ?> <table> <tr> <th>список</th> <th>чекбоксы</th> </tr> <?php $sql = "SELECT id,username,admin FROM tutorial_users WHERE admin=0 ORDER by id ASC"; $result = mysql_query($sql) or trigger_error(mysql_error(),E_USER_ERROR); while(list($id,$username,$admin)=mysql_fetch_row($result)){ echo '<tr><td>'.$username.'</td><td><input type="checkbox" name="admin[]" value="'.$id.'" /></td></tr>'."\n"; } ?> <tr><td colspan="2"><input type="submit" name="submit" value="сохранить" /></td></tr> </table> </form> </body> </html> когда нажимаешь сохранить - не выбрав чекбокса то выдаёт ошибку: PHP: 5.1.58 Warning: array_map() [function.array-map]: Argument #2 should be an array in /home/u908237098/public_html/adds33.php on line 6 Warning: implode() [function.implode]: Invalid arguments passed in /home/u908237098/public_html/adds33.php on line 7 Fatal error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 in /home/u908237098/public_html/adds33.php on line 8 подскажите что дописать нужно, чтобы не было ошибки?
PHP: if(count($_POST) > 0){ на PHP: if(isset($_POST['admin']) && is_array($_POST['admin'])){ и кстате у тебя тут скуля ... PHP: array_map('intval',$admin); на PHP: $admin = array_map('intval',$admin);
Всё работает без ошибки, большое спасибо ! результат: PHP: <?php include("connect.php"); $updated = FALSE; if(isset($_POST['admin']) && is_array($_POST['admin'])){ $admin = $_POST['admin']; $admin = array_map('intval',$admin); $admin = implode(',',$admin); mysql_query("UPDATE tutorial_users SET admin=1 WHERE id IN ($admin)") or trigger_error(mysql_error(),E_USER_ERROR); $updated=TRUE; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>checkbox</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> <?php if($updated===TRUE){ echo '<div>настройки сохранены!</div>'; } ?> <table> <tr> <th>список</th> <th>чекбоксы</th> </tr> <?php $sql = "SELECT id,username,admin FROM tutorial_users WHERE admin=0 ORDER by id ASC"; $result = mysql_query($sql) or trigger_error(mysql_error(),E_USER_ERROR); while(list($id,$username,$admin)=mysql_fetch_row($result)){ echo '<tr><td>'.$username.'</td><td><input type="checkbox" name="admin[]" value="'.$id.'" /></td></tr>'."\n"; } ?> <tr><td colspan="2"><input type="submit" name="submit" value="сохранить" /></td></tr> </table> </form> <script type="text/javascript"> var handler = function ( event ){ event = event || window.event; var target = event.target || event.srcElement; if ( target.nodeType == 1 && target.nodeName.toLowerCase() == "input" && target.type == "checkbox" && target.checked ) { var inputs = document.getElementsByTagName("input"); for ( var i = 0; inputs[i]; i++ ) { if ( inputs[i].type == "checkbox" && inputs[i] != target ) { inputs[i].checked = false; } } } } if (document.addEventListener){ document.addEventListener('click', handler, false); } else if (document.attachEvent){ document.attachEvent('onclick', handler); } </script> </body> </html>
в этой базе данных всё нормально отображается с кириллицей, а в другой вопросы вместо слов, как поправить ? всё стоит так же но не отображает в другой bd вот здесь
при подключении выполни эти запросы .. п.с еси у тебя не utf8 паоменяй Code: set character_set_client='utf8'; set character_set_results='utf8'; set collation_connection='utf8_general_ci'; set NAMES 'utf8';