gpt4 book ai didi

php - Wordpress:从插件内将表单提交到不同的数据库和表

转载 作者:行者123 更新时间:2023-11-29 18:37:23 25 4
gpt4 key购买 nike

首先,感谢所有花时间阅读这个问题的人。我以前从未使用过这项服务,因此期待您能给我任何支持。

我目前正在尝试创建一个表单来处理单个导师的可用性。当前表单的示例图像如下所示: Current Form

上面的表单位于插件目录中。这样做的全部目的是能够在网站上显示当前的可用性,但可以通过管理面板进行更新。我的前端表格示例如下所示:Front-end Table

我的问题是,我无法获取将值提交到数据库的表单。我可能做错了,需要有人指导我。

我当前的插件:

/* DESCRIPTION: ADDS PGB TIMESLOTS LINK TO ADMIN DASHBOARD MENU */

add_action('admin_menu', 'pgb_timeslots');
function pgb_timeslots() {
$page_title = 'PGB Timeslot Management';
$menu_title = 'PGB Timeslots';
$capability = 'edit_posts';
$menu_slug = 'pgb_timeslots';
$function = 'pgb_timeslot_options';
$icon_url = '';
$position = 2;

add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );
}

function pgb_timeslot_options() {

include('sp-db-connect.php'); //Student Portal DB Connection

if (isset($_POST['Update'])) {
$size = count($_POST['ID']);

$i = 0;
while ($i < $size) {
$mon = $_POST['1'][$i];
$tues = $_POST['2'][$i];
$wed = $_POST['3'][$i];
$thurs = $_POST['4'][$i];
$fri = $_POST['5'][$i];
$sat = $_POST['6'][$i];
$sun = $_POST['7'][$i];
$id = $_POST['ID'][$i];

$timetable_update_stmt = $db->prepare('
UPDATE
timetable
SET
`1` = '.$mon.',
`2` = '.$tues.',
`3` = '.$wed.',
`4` = '.$thurs.',
`5` = '.$fri.',
`6` = '.$sat.',
`7` = '.$sun.'
WHERE
timeid = '.$id.'
LIMIT
1
');
$timetable_update_stmt->execute();
++$i;
}
// NEED TO SET NOTIFICATION STATUS
echo '<p>Update Completed</p>';
}
echo '<style>
/* --- The Table Structure --- */
table {
border-collapse: separate;
border-spacing: 0;
}
table tr th,
table tr td {
border-right: 1px solid #bbb;
border-bottom: 1px solid #bbb;
box-shadow: 2px 2px 1px #e5dfcc;
}
table tr th:first-child,
table tr td:first-child {
border-left: 1px solid #bbb;
}
table tr th {
border-top: 1px solid #bbb;
}

/* top-left border-radius */
table tr:first-child th:first-child {
border-top-left-radius: 6px;
}

/* top-right border-radius */
table tr:first-child th:last-child {
border-top-right-radius: 6px;
}

/* bottom-left border-radius */
table tr:last-child td:first-child {
border-bottom-left-radius: 6px;
}

/* bottom-right border-radius */
table tr:last-child td:last-child {
border-bottom-right-radius: 6px;
}

/* -- The Stlyes -- */
input[type="text"] {
width: 100%;
}

th, td{
padding: 8px 8px;
}
th{
background: #E5E6EB;
color: #111;
}
td{
background: #EFF1F6;
}
</style>';

echo '<h1>PGB Timeslot Management</h1>
<p>This page allows you to update the available timeslots for PGB. If you enter 0, it means not available, 1 means available weekly, and 2 means available fortnightly.</p>
<section class="timeslots">
<form name="timeslots" method="POST">
<table>
<tbody>
<tr>
<th>Slots</th>
<th>Mon</th>
<th>Tue</th>
<th>Wed</th>
<th>Thu</th>
<th>Fri</th>
<th>Sat</th>
<th>Sun</th>
</tr>';

$count = 1;
$sql = 'SELECT * FROM timetable';
$result = mysqli_query($sp_db, $sql) or die($sp_db->error);

while ($row = mysqli_fetch_assoc($result)) {

echo '<tr>';
$halftime = "";

if (strpos($row['timeid'], 'h') !== false) {
$halftime = "1";
$chopme = chop($row['timeid'],"h");
$nextslot = $chopme+1;
} else {
$halftime = "0";
$chopme = $row['timeid'];
$nextslot = $row['timeid']+1;
}

if ( $halftime == "0" ) {
//starts on the hour
echo "<td>".$chopme.":00 - ".$chopme.":30</td>";
} else {
//starts on the half hour
echo "<td>".$chopme.":30 - ".$nextslot.":00</td>";
}


echo '<input type="hidden" name="ID[]" value="'.$row['timeid'].'">';
for ($i = 1; $i <= 7; $i++) {
// 1 through 7 = Mon through Sun
echo '<td><input type="text" name="'.$i.'[]" id="'.$row['timeid'].'" value="'.$row[$i].'"></td>';
}

echo '</tr>';
$count++;

}


echo '</tbody>
</table>
<input type="submit" name ="Update" value="Update" />
<p>Once you have changed the values for availability above, click the update button.</p>
</form>
</section>
</div>
</div>';

}

上面的代码不会向数据库提交任何内容,并显示一个空屏幕,就好像没有可显示的管理内容一样。单击提交按钮后,不会重新加载表单或将数据保存到数据库。当从前端表的数据库中提取值时,我根据所显示的值转换输出。 0 = 完整,1 = 每周,2 = 每两周等等。

我在这里完全错过了什么吗?

编辑:

我想我会提供当前的表结构,以便您可以看到我当前正在处理的内容:

CREATE TABLE `timetable` (
`ID` int(11) NOT NULL COMMENT 'Primary ID',
`timeid` varchar(4) NOT NULL COMMENT 'Time-Slot',
`1` int(1) NOT NULL COMMENT 'Monday',
`2` int(1) NOT NULL COMMENT 'Tuesday',
`3` int(1) NOT NULL COMMENT 'Wednesday',
`4` int(1) NOT NULL COMMENT 'Thursday',
`5` int(1) NOT NULL COMMENT 'Friday',
`6` int(1) NOT NULL COMMENT 'Saturday',
`7` int(1) NOT NULL COMMENT 'Sunday'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

“timeid”由 7、7h、8、8h、9、9h 等组成。“h”让我知道时段从半小时标记开始。然后,我使用下面的代码将它们转换为前端可读的时间格式:

<table>
<tbody>
<tr>
<th>Slots</th>
<th>Mon</th>
<th>Tue</th>
<th>Wed</th>
<th>Thu</th>
<th>Fri</th>
</tr>
<?php

include('sp-db-connect.php'); // DB Connection

$count = 1;
$sql = 'SELECT * FROM timetable';
$result = mysqli_query($sp_db, $sql) or die($sp_db->error);

while ($row = mysqli_fetch_assoc($result)) {

echo '<tr>';
$halftime = "";

if (strpos($row['timeid'], 'h') !== false) {
$halftime = "1";
$chopme = chop($row['timeid'],"h");
$nextslot = $chopme+1;
} else {
$halftime = "0";
$chopme = $row['timeid'];
$nextslot = $row['timeid']+1;
}

if ( $halftime == "0" ) {
//starts on the hour
echo "<td>".$chopme.":00 - ".$chopme.":30</td>";
} else {
//starts on the half hour
echo "<td>".$chopme.":30 - ".$nextslot.":00</td>";
}

for ($i = 1; $i <= 5; $i++) {
// 1 through 5 = Mon through Fri
if ($row[$i] == '0' ) {
$row[$i] = 'Full';
} elseif ($row[$i] == '1' ) {
$row[$i] = '<a href="booking-confirmation/?d='.$i.'&t='.$row['timeid'].'&f=1" title="Book Now" rel="nofollow">Weekly</a>';
} else {
$row[$i] = '<a href="booking-confirmation/?d='.$i.'&t='.$row['timeid'].'&f=2" title="Book Now" rel="nofollow">Every 2 weeks</a>';
}
}

for ($i = 1; $i <= 5; $i++) {
// 1 through 5 = Mon through Fri
echo "<td>".$row[$i]."</td>";
}

echo '</tr>';
$count++;

}


?>
</tbody>
</table>

我不想创建一个功能齐全的计划器/时间表。我需要在前端显示时间段,然后指示它们是否可用。我理解您关于格式化的逻辑,并且只需要将不可用的数据存储在数据库中。我不太确定如何使用“booking_start”和“booking_end”变量来获取该数据。

用户将点击一个时间段,该时间段将重定向到预订表格。该时间段将传递到新页面供他们确认。时隙不变。我不需要获得具体的日期等。我所需要的只是每周设定的时间段以及它们是否可用。如果有人在特定的一天占用了一个时间段,那么我只需要能够将其标记为已满即可。原因是,如果有人确实在某一天占用了该位置,那么他们将一直拥有该位置。

这基本上是音乐补习时段。学生们会预订一个时段,并且每周都有相同的时段。当新生想要查看我的空闲时间时,他们只需要知道我有哪些空位等以及哪些空位已满。

最佳答案

不是答案,但想利用格式选项...

好吧,我们知道周一至周五、7.00 - 23.00 的所有时段都存在,因此我们不需要存储这些时段。我们只需要存储那些不可用的。所以我们的表可能如下所示:

( user_id INT NOT NULL
, booking_start DATETIME NOT NULL
, booking_end DATETIME NOT NULL
, PRIMARY KEY (user_id,booking_start)
)

这是否是最终的设计取决于您,但它至少是标准化的,而您目前的设计还没有标准化。

关于php - Wordpress:从插件内将表单提交到不同的数据库和表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com