Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用while&;显示mysql;以适当的方式进行交流_Php_Mysql_Foreach_While Loop - Fatal编程技术网

Php 使用while&;显示mysql;以适当的方式进行交流

Php 使用while&;显示mysql;以适当的方式进行交流,php,mysql,foreach,while-loop,Php,Mysql,Foreach,While Loop,我正在尝试显示此表: (澄清:Uren=小时,Maandag=周一,Dinsdag=周二,Woensdag=周三,Donderdag=周四,Vrijdag=周五 现在,我计划在不同的表格中,在同一页的某个“列表”中显示所有类似的数据: 其他日子也一样~ 只有前8个小时一直如此。 现在我得到了这个代码: 公共函数notLoggedIn($whichtable、$whichrow、$link、$preference、$dag、$uur) { $this->newfunction=新函数 $

我正在尝试显示此表:

(澄清:Uren=小时,Maandag=周一,Dinsdag=周二,Woensdag=周三,Donderdag=周四,Vrijdag=周五

现在,我计划在不同的表格中,在同一页的某个“列表”中显示所有类似的数据:

其他日子也一样~

只有前8个小时一直如此。 现在我得到了这个代码:

公共函数notLoggedIn($whichtable、$whichrow、$link、$preference、$dag、$uur) { $this->newfunction=新函数

    $getvalue = $this->newGet();
    $resultaat = DB_connect()->query("SELECT * FROM $whichtable WHERE $whichrow = '$preference'");

    $days = array("Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag"); // take all dagen op
    $loop = array();

    while($rij = $resultaat->fetch_assoc())
    {
            $loop[] = $rij;
    }

    foreach ($days as $currentDay) 
    {   
    echo "<table style='float:left; width:100%;'>";     
        echo "<th></th><th style='width:100%; left:0; background-color:#9a136e; color:#fff; font-size:20px;'>
        <div style='margin-auto;'>$currentDay</div></th>";  
        foreach($loop as $test) 
        {   
            $day = $test[$currentDay]; 
            $uren = $test['Uren'];

            $getkleur = explode(",", $day); 

                    echo "<tr>"; ?> <th style='width:20%; display:$getkleur[5]; border-right:1px dotted #000;'>
                    <? $this->newfunction->linkToHoure($uren)?></th><?
                    echo "<td style='border-bottom:1px solid #999; display:$getkleur[5]; width:100%; height:40px;'>".$getkleur[0]."
                    <a style='font-size:24px; margin-top:-7px; position:absolute; right:0;' href='#'>></a></td></tr>

                    <tr><td></td><td style='width:100%;'><b><a style='background-color:$getkleur[4]; color:#fff;' href=''>".$getkleur[3]."</b>
                    <b><a style='color:#906;' href=''>". $getkleur[2]."</b></a></td></tr>";             
        } // close foreach
    echo "</table>";
    } 
    }// close notloggedin function
直到8点…而不是上面的例子。 但它应该在几个小时和几天内分开

我不知道怎么解决这个问题。
感谢所有帮助。

首先尝试切换while和foreach部分。'For each day'应首先出现,然后在表格中循环选择实际日期


格式化应该是另一个部分,但这应该为您提供所需的每天8行输出。

好了,我看了一下,我想我已经得到了您想要的。首先,在数据库中创建两个表,如:

一张每天活动的表格(我假设它们是学校科目。如果我错了,请纠正我!):

插入一些示例数据:

INSERT INTO `vakken` (`id`, `vaknaam`) VALUES
(1, 'Nederlands'),
(2, 'Engels'),
(3, 'Duits'),
(4, 'Wiskunde'),
(5, 'Rekenen'),
(6, 'programming php'),
(7, 'Biologie'),
(8, 'Grieks'),
(9, 'Geschiedenis'),
(10, 'Scheikunde');
INSERT INTO `lesuren` (`id`, `les_id`, `uur`, `dag`) VALUES
(3, 4, 1, 1),
(4, 7, 2, 1),
(5, 5, 3, 1),
(6, 1, 4, 1),
(7, 0, 5, 1),
(8, 6, 6, 1),
(9, 3, 7, 1),
(10, 4, 8, 1),
(11, 10, 1, 2),
(12, 8, 2, 2),
(13, 9, 3, 2),
(14, 7, 4, 2),
(15, 6, 5, 2),
(16, 4, 6, 2),
(17, 3, 7, 2),
(18, 1, 8, 2),
(19, 10, 1, 3),
(20, 8, 2, 3),
(21, 9, 3, 3),
(22, 7, 4, 3),
(23, 6, 5, 3),
(24, 4, 6, 3),
(25, 3, 7, 3),
(26, 1, 8, 3),
(27, 10, 1, 4),
(28, 8, 2, 4),
(29, 9, 3, 4),
(30, 7, 4, 4),
(31, 6, 5, 4),
(32, 4, 6, 4),
(33, 3, 7, 4),
(34, 1, 8, 4),
(35, 10, 1, 5),
(36, 8, 2, 5),
(37, 9, 3, 5),
(38, 7, 4, 5),
(39, 6, 5, 5),
(40, 4, 6, 5),
(41, 3, 7, 5),
(42, 1, 8, 5);
每日概览的最后一个表:

CREATE TABLE IF NOT EXISTS `lesuren` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `les_id` int(11) NOT NULL,
  `uur` tinyint(2) NOT NULL,
  `dag` tinyint(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;
同时插入一些示例数据:

INSERT INTO `vakken` (`id`, `vaknaam`) VALUES
(1, 'Nederlands'),
(2, 'Engels'),
(3, 'Duits'),
(4, 'Wiskunde'),
(5, 'Rekenen'),
(6, 'programming php'),
(7, 'Biologie'),
(8, 'Grieks'),
(9, 'Geschiedenis'),
(10, 'Scheikunde');
INSERT INTO `lesuren` (`id`, `les_id`, `uur`, `dag`) VALUES
(3, 4, 1, 1),
(4, 7, 2, 1),
(5, 5, 3, 1),
(6, 1, 4, 1),
(7, 0, 5, 1),
(8, 6, 6, 1),
(9, 3, 7, 1),
(10, 4, 8, 1),
(11, 10, 1, 2),
(12, 8, 2, 2),
(13, 9, 3, 2),
(14, 7, 4, 2),
(15, 6, 5, 2),
(16, 4, 6, 2),
(17, 3, 7, 2),
(18, 1, 8, 2),
(19, 10, 1, 3),
(20, 8, 2, 3),
(21, 9, 3, 3),
(22, 7, 4, 3),
(23, 6, 5, 3),
(24, 4, 6, 3),
(25, 3, 7, 3),
(26, 1, 8, 3),
(27, 10, 1, 4),
(28, 8, 2, 4),
(29, 9, 3, 4),
(30, 7, 4, 4),
(31, 6, 5, 4),
(32, 4, 6, 4),
(33, 3, 7, 4),
(34, 1, 8, 4),
(35, 10, 1, 5),
(36, 8, 2, 5),
(37, 9, 3, 5),
(38, 7, 4, 5),
(39, 6, 5, 5),
(40, 4, 6, 5),
(41, 3, 7, 5),
(42, 1, 8, 5);
正如你所看到的,这个表只包含数字。这就是我们在db中保存数据的方式。我们称之为模型。现在我们创建一些html,我们称之为视图

首先创建一个名为“database.class.php”的php文件(因为我很好,我用PDO=php数据对象为您创建了一个简单的db类。这比使用旧函数要好,因为它们已被弃用):


现在我们终于可以做一些PHP了。它实际上很短:

<?php

    require_once('database.class.php');

    // use construct like dbname - dbadres - login - pass
    $db = new db('test', 'localhost:3307', 'root', 'usbw');

    $query = $db->query("
                            SELECT l.`dag` , l.`uur` , v.`vaknaam` 
                            FROM  `lesuren` l
                            INNER JOIN  `vakken` v ON l.`les_id` = v.`id` 
                            ORDER BY l.`dag` , l.`uur` 
    ");

    $dagen = array(1 => 'Maandag',2 => 'Dinsdag',3 => 'Woensdag',4 => 'Donderdag',5 => 'Vrijdag');

    $html = '';
    $olddag = 0;
    while($row = $query->fetch()){

        if($olddag != $row['dag']){
            $html .= $dagen[$row['dag']].' <br>'; 
        }
        $html .= "$row[uur] - $row[vaknaam] <br>"; 
        $olddag = $row['dag'];
    }

    echo $html;

?>


您可以在这里看到一个实时演示(请注意,我的Web服务器不总是在线):

。它们不再被维护。请查看?改为了解,然后使用或-将帮助您决定使用哪一种。如果您选择PDO,.他是荷兰的PDO的zo als die gast hierboven zij gebruik mysqli。Ok zou ik als ik jou是de opbouw van je db tabel herzien。Wat jij wild doen heeft weinig遇到了php te maken。我可以通过查询zelf regel获得数据Stackoverflow:很抱歉荷兰英语的出现。正如rekire所说的,你应该使用mysqli或pdo。另外,重组你的表更好。你想做的是查询任务,而不是php任务。我已经用这个表构建了很多,你能给我一个例子吗这比?:P,Mysql表的结构一直是我的弱点。如果你能给我一个提示,让我更“友好”地显示它,我将不胜感激;也是在对Rekire的评论中,我计划首先优化我的代码以在mysql中工作,稍后我将对mysqli做更多的工作。因为这是一个学校项目。如果有人能给出正确的答案,我会非常感激。顺便说一句,我对mysqli做了每件事,这是一些必须更改的小事情。@Rekire我更新了代码。@sirwilliam,你能给我举个例子说明怎么做吗?我从来都不擅长mysql中的表结构,我真的没有那么频繁地使用它。这只给了我周一的时间,从1到8。但是我的例子只给了我整个表的错误顺序。但是你是对的,从逻辑上讲,它会给我想要的结果。你有什么想法我可以改变这个吗代码?我已经尝试过很多次了。您必须在每次之后重置结果指针,以便可以再次迭代结果集。您可以通过将数据复制到第一个foreach之前的数组中,然后使用内部foreach循环在数组上迭代,或者重置dbresult指针来完成此操作(在mysql中是mysqli_data_seek,但当你使用db框架时,你必须找到如何使用它的方法)我检查了一些例子,它是很久以前我为你的想法做的mysql.Thnx。我的意思是,如果你在php中使用普通的mysql*函数,没有必要为此挖掘mysql,解决方案应该在php端(例如,$ResultAt对象可以有reset()或revind())你有一个例子吗?我从来没有听说过suchAh lol nice,thnx alot,我尝试过。我现在在mysqli中得到了所有东西,所以我使用了它。我现在首先改变了我的整个系统:p,唯一的问题是我得到了所有东西都在klassen中排序,例如我得到了10个klassen,每5天,8个小时,意味着我必须排400行:p,所以我必须检查我如何解决这个问题首先。这是一个很大的系统,我会根据本地/讲师的时间/可见性等改变颜色。我使用我的系统是因为我可以轻松地分解数据库中的所有内容,并轻松地更新数据库中的所有内容。有了你的系统,我需要为每个首选项制作400行和6个表…所以我想我会坚持使用我的旧系统,对不起。我测试了我尽管如此,因为它看起来很漂亮,我当然可以制作一个代替vakken表的表格,例如颜色&另一个面向讲师的表格,以及基于lesuren的所有表格,但我不在乎是否有一个包含400行所有信息的大表格。我不能使用这个,我从表格中获取信息的方式和数量,我的示例实际上已经很好了。不是吗hnx,不管怎样,用于支付你的开销。轻松添加额外的表
klas
,并带有两个名为id(int)和klasname(varchar max 30)的字段,并将id添加到lesuren。我进行更改,请稍候。
<?php

    //Database class
    class db extends Pdo{

        private $inlog;
        private $pass;
        private $adres;
        private $dbname;

        public function __construct($dbname, $adres, $inlog, $pass){

            parent::__construct('mysql:dbname='.$dbname.';host='.$adres, $inlog, $pass);

            $this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }

        public function doPrepare($queryString, $param){

            $query = $this->prepare($queryString);
            $query->execute($param);
            return $query;
        }

        public function doPrepareBind($queryString, $param){

            $query = $this->prepare($queryString);
            foreach($param as $par){
                switch($par[2]){
                    case 'int':
                        $query->bindParam($par[0], $par[1], PDO::PARAM_INT);
                        break;
                    case 'str':
                        $query->bindParam($par[0], $par[1], PDO::PARAM_STR);
                        break;
                    case 'blob':
                        $query->bindParam($par[0], $par[1], PDO::PARAM_LOB);
                        break;
                    default:
                        $query->bindParam($par[0], $par[1], PDO::PARAM_STR);
                        break;
                }
            }
            $query->execute();
            return $query;
        }
    }

?>
<?php

    require_once('database.class.php');

    // use construct like dbname - dbadres - login - pass
    $db = new db('test', 'localhost:3307', 'root', 'usbw');

    $query = $db->query("
                            SELECT l.`dag` , l.`uur` , v.`vaknaam` 
                            FROM  `lesuren` l
                            INNER JOIN  `vakken` v ON l.`les_id` = v.`id` 
                            ORDER BY l.`dag` , l.`uur` 
    ");

    $dagen = array(1 => 'Maandag',2 => 'Dinsdag',3 => 'Woensdag',4 => 'Donderdag',5 => 'Vrijdag');

    $html = '';
    $olddag = 0;
    while($row = $query->fetch()){

        if($olddag != $row['dag']){
            $html .= $dagen[$row['dag']].' <br>'; 
        }
        $html .= "$row[uur] - $row[vaknaam] <br>"; 
        $olddag = $row['dag'];
    }

    echo $html;

?>