我的while循环有问题吗?我的代码语法?它太多了吗?

时间:2016-07-28 22:33:26

标签: php mysql sql while-loop calendar

我正在尝试构建一个动态数据库驱动的日历应用程序。我在步骤1中尝试设置日历。我没有手动输入所有内容,而是想我快速创建一个PHP脚本,将其全部添加到我的数据库中。

问题是,我的脚本涉及很多while循环。它需要永远加载。可能只需要一段时间来执行脚本,还是某处出现错误?是否有更简单的方法来制作日历?

编辑:我在此块之前的所有数据库配置都在另一个块中。这不是问题。

编辑2:我注意到我的一些SQL包含保留关键字。我把它改成了不同的词。

这是我的代码:

    <?php


       $calsql = "SELECT * FROM callender";

       $calquery = mysqli_query($db,$calsql);

       $calisfull = mysqli_num_rows($calquery);

       if ($calisfull < 1) {
        while ($all < 365) {
                $year = "2016";
                $month = 1;
                if ($month == 1){

                    $dayofmonth = 1;
                    while ($dayofmonth < 32) {
                        $d = 0;
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 2){

                    $dayofmonth = 1;
                    while ($dayofmonth < 30) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 3){

                    $dayofmonth = 1;
                    while ($dayofmonth < 32) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 4){

                    $dayofmonth = 1;
                    while ($dayofmonth < 31) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 5){

                    $dayofmonth = 1;
                    while ($dayofmonth < 31) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 6){

                    $dayofmonth = 1;
                    while ($dayofmonth < 31) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 7){

                    $dayofmonth = 1;
                    while ($dayofmonth < 32) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 8){

                    $dayofmonth = 1;
                    while ($dayofmonth < 32) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 9){

                    $dayofmonth = 1;
                    while ($dayofmonth < 31) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 10){

                    $dayofmonth = 1;
                    while ($dayofmonth < 32) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
            }
                if ($month == 11){

                    $dayofmonth = 1;
                    while ($dayofmonth < 31) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
                if ($month == 12){

                    $dayofmonth = 1;
                    while ($dayofmonth < 32) {
                        while ($d < 7) {
                            if ($d == 0){
                                $day = "Friday";
                            }

                            else if ($d == 1){
                                $day = "Saturday";
                            }

                            else if ($d == 2){
                                $day = "Sunday";
                            }

                            else if ($d == 3){
                                $day = "Monday";
                            }

                            else if ($d == 4){
                                $day = "Tuesday";
                            }

                            else if ($d == 5){
                                $day = "Wednesday";
                            }

                            else if ($d == 6){
                                $day = "Thursday";
                            }

                        $fillsql = "INSERT INTO callender (month, date, year, day) VALUES ('$month', '$dayofmonth', '$year', '$day')";
                        $fquery = mysqli_query($db,$fillsql);
                        $perfectly = "Perfectly";
                        $dayofmonth++;
                        $all++;
                    }

                    $d = 0;
                }
                $month++;
            }
        }

       }

       echo "Code worked " . $perfectly;

       ?>

4 个答案:

答案 0 :(得分:0)

您的代码非常复杂且冗长。只有几点需要改进。您可以在数组中定义月份和日期的名称,然后通过数组索引访问名称。 数组定义为

$monthNames = array(1 => 'January', 'February',..., 'December');

$dayNames = array(1 => 'Monday', 'Tuesday',...,'Sunday');

此外,使用PHP函数date也很好,你可以通过这个函数找出星期几,具体月份的天数以及许多其他有用的信息。 其他有用的功能是mktime。 你可以找到一周中的某天,例如这样

$dayOfTheWeek = date('N', mktime(0, 0, 0, $month, $day, $year));

以月为单位的天数,例如这样

$daysInSelectedMonth = date('t', mktime(0, 0, 0, $month, 1, $year));

其他事情是自学: - )

答案 1 :(得分:0)

您的代码需要很长时间,因为当您只执行一个查询时,您正在执行365个查询。您也不需要为每周的每一天硬编码每个月的值。下面我将你的巨大循环折叠成两行代码:

$start = strtotime('2016-01-01');
$end = strtotime('2016-12-31');
$current = $start;
$rows =[];

while ($current <=$end){
    //insert eg: ('1', '31', '2016', 'Sunday') for Jan 31 2016.
    $rows[] = strftime("('%m', '%d', '%Y', '%A')",$current);
    $current = strtotime('+1 day',$current); //to next day
}
//build one combined query
$sql='INSERT into callender (month, date, year, day) VALUES '.implode(',',$rows);
$fquery = mysqli_query($db,$sql);

if(!$fquery) die('DB error: '.mysqli_error($db));

echo 'Success: '.mysqli_num_rows($fquery).' rows inserted';

查看PHP最强大的两个函数:

  • strtotime将人类可读的字符串转换为UNIX时间戳
  • strftime将UNIX时间戳转换为您选择的格式的日期字符串

现在解决方案已经解决了:这种方法存在更大的问题。存储日期浪费了数据库空间和资源,因为它们可以比从数据库中检索它们更快地计算。您可以调整上面的代码来创建一个带$startDate$endDate的函数,并返回一个包含所有日历条目的数组,以打印到您的HTML中。

答案 2 :(得分:0)

如果您想知道的是一周中哪一天与特定日期相对应,那么您很可能不需要在一年中的每一天在数据库中添加条目。

PHPMySQL都有将日期和时间表示为变量的功能,以及允许您使用它们的函数。

示例:

2016年是闰年吗?

PHP:

<?php
$year = 2016;
$date = new DateTime();
$date->setDate($year, 3, 1);
$date->sub(new DateInterval('P1D'));
if($date->format("d") == "29") {
    print "$year is leap";
} else {
    print "$year is not leap";
}

MySQL的:

> select (dayofmonth(date_sub('2016-03-01', interval 1 day)) = 29) as isleap;
+--------+
| isleap |
+--------+
|      1 |
+--------+

一周中的哪一天?

PHP:

print $date->format("w"); // 0 = Sunday, 6 = Saturday
print $date->format("l"); // in English

MySQL的:

select dayofweek(mydate);

答案 3 :(得分:0)

将您的数据库请求简化为一个。你可能想在php.ini中更改你的php脚本执行时间,或者使用php set命令在脚本开头调整它(对于每个脚本只有基础)