我正在尝试构建一个动态数据库驱动的日历应用程序。我在步骤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;
?>
答案 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最强大的两个函数:
现在解决方案已经解决了:这种方法存在更大的问题。存储日期浪费了数据库空间和资源,因为它们可以比从数据库中检索它们更快地计算。您可以调整上面的代码来创建一个带$startDate
,$endDate
的函数,并返回一个包含所有日历条目的数组,以打印到您的HTML中。
答案 2 :(得分:0)
如果您想知道的是一周中哪一天与特定日期相对应,那么您很可能不需要在一年中的每一天在数据库中添加条目。
PHP和MySQL都有将日期和时间表示为变量的功能,以及允许您使用它们的函数。
示例:
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命令在脚本开头调整它(对于每个脚本只有基础)