【问题标题】:Need html checkbox to be checked by mysql result需要 html 复选框由 mysql 结果检查
【发布时间】:2013-02-21 18:12:04
【问题描述】:

我需要通过 mysql 选择结果检查一个复选框...

这是我的mysql表

username | hobbies              
----------------------------
abc      | reading painting     

当我选择用户名“abc”并提交时,它会进入编辑页面..

在那个页面我需要编辑爱好..

<html>
<body>
<input type="checkbox" name="hobbies[]" value="reading">Reading
<input type="checkbox" name="hobbies[]" value="painting">painting
<input type="checkbox" name="hobbies[]" value="gaming">gaming
</body>
<html>

当我用爱好阅读和绘画选择'abc'时,只有第一个和第二个复选框必须选中...我如何用php,mysql做到这一点?请帮忙.....

【问题讨论】:

  • 你确定要保存这样的爱好吗?如果一个爱好被引入其中有一个空间,比如“骑自行车”或类似的东西。我会选择一种关系方法,将它们保存在单独的表中,或者至少用 ,; 字符分隔值
  • 先规范化数据。

标签: php javascript html mysql


【解决方案1】:

首先将数据库记录拆分为单独的数组条目

<?php
    $hobbies = explode(" ", $mysql_result['hobbies']);
?>

然后检查每个值是否数组包含该值并将复选框设置为选中

<input type="checkbox" name="hobbies[]" value="reading" <?php if(in_array("reading", $hobbies)) echo "checked=\"checked\""; ?>>Reading

【讨论】:

  • 当我应用你的代码时,我收到一个警告......警告:in_array() 期望参数 2 是数组,字符串在 C:\wamp\www\
  • 首先我编写了 $paym=explode(" ",$hby);变量 $hby 是 mysql 结果...之后我使用了 foreach($paym as $k) { echo $k; $k 存储字段中的所有元素,即阅读和绘画...我使用过 if(in_array("reading",$k)) echo "checked=\"checked\""; ?> 在复选框中......但开始警告......请帮助......
  • 你也做了第一步吗?它通过使用空格字符将包含爱好字段的mysql结果转换为数组
  • 您需要检查该值是否在数组中,因此在您的情况下:if(in_array("reading",$paym))
  • 当然你可以用javascript来做。将结果解析为 json,用 jquery 循环 json 结果并根据值选择适当的复选框。
【解决方案2】:

您必须使用以下 HTML 标签:

<input type="checkbox" name="hobbies[]" value="reading" checked="checked" />

【讨论】:

    【解决方案3】:
    <input type="checkbox" name="hobbies[]" value="reading" <?php echo status;?>>Reading
    

    然后让你的 php 根据你的 SQL 查询确定复选框的状态并将其存储在变量中

    status
    

    【讨论】:

      【解决方案4】:

      考虑更改您的架构。每个字段都应该是原子的 - 有一个值。

      创建一个爱好表,更改用户表,添加一个表以启用用户和爱好之间的多对多关系。创建一个显示用户爱好的视图。

      这意味着您将能够执行类似的查询。

      select * from `hobby` ; -- means your hobby check box can now be created dynamically
      select * from `username_hobby` where username_id = 1 ; -- means you already have the username hobbies as separate elements.
      

      关于数据规范化的更多细节 => https://www.google.com.au/search?q=atomic+data+normalization

      sqlfiddle 示例http://sqlfiddle.com/#!2/5cdef/1/0

      建议的架构如下。

      DROP TABLE IF EXISTS `hobby`;
      
      CREATE TABLE `hobby` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `hobby` varchar(31) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
      
      INSERT INTO `hobby` (`id`, `hobby`)
      VALUES
          (1,'reading'),
          (2,'painting'),
          (3,'gaming');
      
      DROP TABLE IF EXISTS `username`;
      
      CREATE TABLE `username` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `username` varchar(31) DEFAULT '',
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
      
      INSERT INTO `username` (`id`, `username`)
      VALUES
          (1,'abc');
      
      
      DROP VIEW IF EXISTS `username_hobbies_view`;
      
      CREATE TABLE `username_hobbies_view` (
         `username` VARCHAR(31) DEFAULT '',
         `hobby` VARCHAR(31) DEFAULT NULL,
         `username_id` INT(11) UNSIGNED NOT NULL,
         `hobby_id` INT(11) UNSIGNED NOT NULL
      ) ENGINE=MyISAM;
      
      DROP TABLE IF EXISTS `username_hobby`;
      
      CREATE TABLE `username_hobby` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `username_id` int(11) unsigned NOT NULL,
        `hobby_id` int(11) unsigned NOT NULL,
        PRIMARY KEY (`id`),
        KEY `username_relationship` (`username_id`),
        KEY `hobby_relationship` (`hobby_id`),
        CONSTRAINT `hobby_relationship` FOREIGN KEY (`hobby_id`) REFERENCES `hobby` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
        CONSTRAINT `username_relationship` FOREIGN KEY (`username_id`) REFERENCES `username` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
      
      INSERT INTO `username_hobby` (`id`, `username_id`, `hobby_id`)
      VALUES
          (1,1,1),
          (2,1,2);
      
      DROP TABLE `username_hobbies_view`;
      
      CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `username_hobbies_view`
      AS SELECT
         `username`.`username` AS `username`,
         `hobby`.`hobby` AS `hobby`,
         `username_hobby`.`username_id` AS `username_id`,
         `username_hobby`.`hobby_id` AS `hobby_id`
      FROM ((`username` join `username_hobby` on((`username`.`id` = `username_hobby`.`username_id`))) join `hobby` on((`hobby`.`id` = `username_hobby`.`hobby_id`)));
      

      【讨论】:

      • thanx 4 你的回复兄弟....这里我的复选框不是动态创建的...复选框已经用 html 创建,我需要用 mysql 结果检查这些框..
      • @vyshakh 硬编码导致硬维护。当添加另一个爱好时会发生什么?如果有人要法语版怎么办?如果您有除网络浏览器之外的其他应用程序来操作数据,会发生什么情况?
      • 你绝对正确...如果在字段中添加另一个爱好,编辑 html 代码非常困难..但我认为在这种情况下没有更多的爱好可以添加...
      • 您现在不妨了解一下数据规范化@vyshakh。您当前的方法将来会给您带来麻烦。
      猜你喜欢
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多