PHP - 使用 MySQL 数据库中的记录作为值创建复选框

Posted

技术标签:

【中文标题】PHP - 使用 MySQL 数据库中的记录作为值创建复选框【英文标题】:PHP - Create check box by using the records from MySQL datebase as values 【发布时间】:2016-07-30 12:12:34 【问题描述】:

我是 php 编程的新手,我不知道哪里出了问题,因为我的 php 代码无法执行。

正如标题所说,我正在尝试在我的站点中创建复选框,但是值将来自 mysql 数据库。

我在 MySQL 数据库中有一个名为“campus”的表,它有 2 个名为 id 和 room 的列。

数据库 [![数据库][1]][1] http://i.imgur.com/uLP6niJ.png

电流输出 [![电流输出][2]][2] http://i.imgur.com/cSOYPme.png

下面是我的代码:

<?PHP

$hostname = "localhost";
$username = "root";
$password = "root";
$databaseName = "my computer";

$connect = mysqli_connect($hostname, $username, $password, $databaseName);


// Check connection
if (mysqli_connect_errno())
  
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  



?>


<html>  
<body>


<form name="aform">


Choose a room:


<?php
  $s = '';
  $j = 0;
  if ($q = $connect->query("SELECT * FROM `campus`")) 
    while ($line = $q->fetch_assoc()) 
      $s.= '<input type="checkbox" name="car'.$j.'" value="'.$line['room'].'">';
    
  
  echo $s;
?>

</form>


</body>
</html>

【问题讨论】:

到目前为止你得到了什么? 嗨,我不明白你的问题? 每个复选框都有相同的名称。这就是你想要的吗? 嗨,是的,每个复选框都有相同的名称 【参考方案1】:

您没有正确关闭 while 循环。如下关闭while循环。

<?php

    $sql = "SELECT room FROM campus";
    $result = mysqli_query($sql);

    while ($line = mysqli_fetch_array($result, MYSQL_ASSOC)) 

    ?>

    <input type="checkbox" name="car" value="<?php echo $line['room']?>" />

   <?php
    
    ?>

【讨论】:

嗨,感谢您的更正,但是即使在更正之后,我的代码似乎也没有执行?你还有什么建议吗? 不是一定要$line['room']吗? 你得到的输出是什么?在 PHP 中打开错误和警告日志。请将输出粘贴到您的问题中。 @Chay22 建议尝试使用 $line['room'] 而不是 $line[room] 嗨,我已经尝试过 $line['room'] 但这似乎仍然没有做任何事情。【参考方案2】:

试试这个

<?php

$sql = "SELECT room FROM campus";
$result = mysqli_query($sql);

$campusArray = mysqli_fetch_array($result, MYSQLI_ASSOC);
foreach ($campusArray as $campus): ?>
    <input type="checkbox" name="car" value="<?php echo $campus['room'];?>" />
<?php endforeach; ?>

我希望通过这个你可以解决你的问题。

替代语法非常适合提高易读性(对于 PHP 和 HTML!)在您混合使用它们的情况下。

http://ca3.php.net/manual/en/control-structures.alternative-syntax.php

【讨论】:

嗨,我试过你的代码,但输出似乎是一样的。它只是输出空白页 现在将$dbCon添加到mysqli_query,首先,在第一个php标签ini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);之后添加此代码,然后运行您的代码,如果显示错误,请发布它,如果不检查部分代码,首先删除所有html代码并运行它,然后只添加查询,而不是foreach,然后运行并检查$resutl的输出,然后添加fetch并检查$campusArray的输出,然后您将能够看到错误。【参考方案3】:

欢迎使用 PHP!

一个错误是您在任何 php 函数(例如 echo)之后缺少所需的分号

<?php echo $line['room']; ?>

而且结尾处缺少 PHP 标记

第三个错误是你没有告诉 mysqli 应该在哪个连接上运行查询:

mysqli_query($dbCon, $sql);

除了看起来不错之外,我个人更喜欢使用 PDO 连接,但 mysqli 仍然不错,但有一些格式化技巧可以帮助防止出现问题。

例如,使用反引号 (`) 总是一个好主意

所以:

$sql = "SELECT `room` FROM `campus`";

但是,为此最好使用 * 查询。从列中选择所有内容:

$sql = "SELECT * FROM `campus`";

原因是你如何获取数据,你告诉 PHP 使用结果创建一个数组。但你只给它每行一个数据。所以如果你把所有的数据都给它,它只会让它更容易使用。

这是完整的代码:

<?php $dbCon = mysqli_connect("localhost", "root", "root", "my computer");
// Check connection
if (mysqli_connect_errno())
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
?>    
<html>  
    <body>
        <form name="aform">
            Choose a room:
            <?php
            $sql = "SELECT * FROM `campus`";
            $result = mysqli_query($dbCon, $sql);

            while ($line = mysqli_fetch_array($result, MYSQL_ASSOC))  ?>
                <input type="checkbox" name="car" value="<?php echo $line['room']; ?>"
            <?php  ?>
        </form>
    </body>
</html>

另外,如果您有兴趣,以下是在 PDO 中的操作方式:

<?php
try
    $con = new \PDO("mysql:host=" . 'localhost' . ";dbname=" . 'My Computer', 'root', 'root');
catch(PDOException $e)
    echo "Connection Failed";
    die();
 ?>
<html>  
    <body>
        <form name="aform">
            Choose a room:
            <?php
            $result = $con->prepare("SELECT * FROM `campus`")
            $result->execute();
            while ($row = $result->fetch())  ?>
                <input type="checkbox" name="car" value="<?php echo $row['room']; ?>"
           <?php  ?>
        </form>
    </body>
</html>

还是不行?随意发表评论,我会看看发生了什么:)

谢谢, P110

【讨论】:

嗨 P110,我纠正了您在我的代码中指出的所有错误,但输出似乎相同?。 我也用 PDO 厌倦了你的新代码,但是输出一个完全空白的页面,甚至没有 html 文本 我已经根据你的 cmets 更新了我上面的代码 这很奇怪,PDO 的事情可能意味着您没有安装 PDO,这并不是什么大问题,因为您没有使用它。你打开错误报告了吗?您能否将error_reporting(E_ALL); 放在代码的顶部,然后它应该会告诉您出了什么问题?如果您收到错误,请在此处发布。谢谢:) 由于它没有输出复选框,它会让我觉得它没有得到任何结果......这不应该发生......嗯

以上是关于PHP - 使用 MySQL 数据库中的记录作为值创建复选框的主要内容,如果未能解决你的问题,请参考以下文章

如何使用插入记录将所有值 frow 行插入 mysql 数据库?

如何使用 php 在 android 的 mysql 数据库中搜索此字符串是不是作为值存在?

使用 mysql 和 php 从虚拟值回显 AVG 值

php删除一条mysql记录 怎么判断是不是删除成功,

如何使用 PHP 在 MYSQL 中的数据库表中插入、更新、删除记录时创建日志

内联可编辑行以使用 ajax php 更新数据库 mysql 中的每个记录