我必须创建一个由n个正方形填充的页面,这些正方形将使用颜色选择器进行着色,然后将数据存储在db上时,我必须获取这些值并填写背景颜色属性:

我正在使用此代码:

<?php
    $square=0;
    $sqid=0;

    while ($square <= $numSquare) {

        $square++;
        $id = $sqid++;

        $getExist = $DB_CON -> query("SELECT * FROM square WHERE SQUARE = " . $id);
        $exist = $getExist->fetch();

        if (isset($exist[2])) { $color=$exist[2]; } else { $color=''; }

        if (null !== $exist) {
            if ($exist[0] = $id) {
                print '<div class="square" id="' . $exist[0] . '" style="background-color:' . $color . '"></div>';
            }
        } else {
            print '<div class="square" id="' . $id .'"></div>';
        }
    }
?>


因此,它搜索数据库中的行(例如:行1包含颜色#000000)并放入style="background-color:x"属性,问题是,使用此代码,所有正方形都将背景色设置为无,即使它们不必没有。 (例如=必须为<div class="square" id="n">并获得<div class="square" id="n" style="background-color:">),除此之外,与数据库中ID 0相关的第一个正方形即使必须为#000000也没有任何颜色。

感谢所有能提供帮助的人。

最佳答案

您自己重置$color

if (isset($exist[1])) { $color=$exist[1]; } { $color=''; }


这是一个“其他”缺失:

if (isset($exist[1])) {
    $color = $exist[1];
} else {
    $color='';
}


请查看我对SELECT *和指示的查询结果的评论-不好的作法。

更新问题2:

接下来的两行看起来也很奇怪:

    if (null !== $exist) {


$ exist可以成为null吗?好吧,取决于您的连接驱动程序,但是PDOStatement :: fetch()返回false,一个简单的if ($exist)就足够了。最好将其他if / else颜色分配放在此块中。

接下来的一行是作业!仅当$ id为0时,它才会为false;在您的第一个循环中,它不能为1,并一直增大。

        if ($exist[0] = $id) {


这作为条件看起来是无用的(因为它是WHERE子句的一部分),也没有用做赋值。

我通常在if或while条件中使用fetch()方法。这是我从您的代码中读取的主要部分:

$getExist = $dbh->prepare('SELECT id, color FROM square WHERE square = ?');
for ($id = 0; $id < $numSquare; $i++) {
    $getExist->execute([$id]);
    $style = '';
    // 1. fetch row, and check if there is one
    // 2. check if a color is defined (if it is possible in db it is not)
    if ($exist = $getExist->fetch() && isset($exist[1])) {
        $style = 'background-color: '.$exist[1];
    }
    echo '<div class="square" id="'.$exist[0].'" style="'.$style.'"></div>';
}

关于php - PHP:根据ID为正方形上色并从db获取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37125736/

10-14 15:23
查看更多