Php 多个页面上的多个按钮可以执行几乎相同的操作

Php 多个页面上的多个按钮可以执行几乎相同的操作,php,html,sql,forms,Php,Html,Sql,Forms,我需要一些关于我剧本的建议。我正在开发点名系统,我想改掉我的一个坏习惯 这是我想要的照片: 具体来说,每个日期列上方的按钮。每个按钮的作用几乎相同,但在我的SQL数据库中的日期不同 下面是我的代码: 投入: <th><input type='submit' id='mAllR' name='mAllR' value='All Attended'></th> <th><input type='submit' id='tAllR' name='

我需要一些关于我剧本的建议。我正在开发点名系统,我想改掉我的一个坏习惯

这是我想要的照片:

具体来说,每个日期列上方的按钮。每个按钮的作用几乎相同,但在我的SQL数据库中的日期不同

下面是我的代码:

投入:

<th><input type='submit' id='mAllR' name='mAllR' value='All Attended'></th>
<th><input type='submit' id='tAllR' name='tAllR' value='All Attended'></th>
<th><input type='submit' id='wAllR' name='wAllR' value='All Attended'></th>
<th><input type='submit' id='tAllR' name='tAllR' value='All Attended'></th>
<th><input type='submit' id='fAllR' name='fAllR' value='All Attended'></th>

正如您所看到的,基本上每个按钮都有自己的ID,它将根据其名称调用函数

如果只有5个输入按钮(在我的示例中有),但有7个部门,也就是35个按钮,这对我来说是很好的。我不想让35个函数做几乎相同的事情

我必须使用的代码如下所示:

if(isset($_POST['mAllR']))
            {
                    $index      = 0;
                    foreach($_POST as $key => $value)
                            {
                                    while($index < $_SESSION['amountT'])
                                            {
                                                    $index++;
                                                    $sql = ("UPDATE `Employee` SET `Monday`='Attended' WHERE `Job`='Remarketing'");
                                                    mysqli_query($con, $sql);
                                            }
                            }
                    if($sql)
                            {
                                    mysqli_close($con);
                                    sleep(4);
                                    echo '<meta http-equiv="refresh" content="0">';
                            }
            }
if(isset($\u POST['mAllR']))
{
$index=0;
foreach($\发布为$key=>$value)
{
而($index<$\u会话['amount'])
{
$index++;
$sql=(“更新`Employee`SET`Monday`='Attended',其中`Job`='Remarketing'”);
mysqli_查询($con,$sql);
}
}
如果($sql)
{
mysqli_close($con);
睡眠(4);
回声';
}
}
现在的每个按钮都需要它自己的版本。(不要担心会话等,这些会话将在其他地方处理,以避免重叠/重叠


因此,实际上,代码不是问题所在,我只是想将其优化为更少的代码。欢迎您提供任何建议。

由于您所有的按钮都执行几乎相同的操作,我猜在每种情况下都只需更改查询中的一些值

我会这样做

首先,我将创建一个数组,其中包含每个按钮(日期和作业)的不同数据,因为这是我所能看到的代码需要的唯一区别

//星期一
$array[“mAllR”][“day”]=“Monday”;
$array[“mAllR”][“job”]=“营销”;
//星期二
$array[“tAllR”][“day”]=“星期二”;
$array[“tAllR”][“job”]=“其他作业”;
//等等。。。
然后在foreach循环中检查按钮的名称(参见数组中的) 主键是“名称”按钮)

foreach($\u发布为$key=>$value){
$button=“”;
//我检查按钮的值以获取键(按钮的名称)
如果($value=='All ATTED'){
$button=$key;
//然后我从数组中调用'day'和'job'值
//其中主键是按钮的名称
而($index<$\u会话['amount'])
{
$index++;
//请确保我使用按钮的名称传递数组中定义的日期和作业
$sql=(“更新`Employee`SET`”+$array[$button][“day”]+“`Attended`其中`Job`='”+$array[$button][“Job”]+“”);
mysqli_查询($con,$sql);
}
}
}
编辑:将其包装在函数中

//换行
函数postFunc(){
//上面的代码
}
//使用
国际单项体育联合会(国际单项体育联合会){
postFunc();
}

这可能是我的方法。但它有一个缺点,因为我正在检查按钮的值,并在该条件下执行所有操作,因此我无法控制您可能要控制的所有其他字段。我在代码中没有看到您试图控制另一个字段,因此此方法可能很有用。

我会为您的字段使用更好的名称值按钮。例如:day who job,因此类似于:mon all remarketing。然后分解值以获得day、who和job。我还将添加“sub”它只是让我们知道它是一个提交按钮。由于您的表单中没有显示任何其他项目,因此我将传递一个隐藏字段,以便我们可以判断它是否已提交

<form action="" method="POST">
<input type="hidden" name="myform" value="1" />
<th><input type='submit' id='mon-all-remarketing' name='sub-Monday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='tue-all-remarketing' name='sub-Tuesday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='wed-all-remarketing' name='sub-Wednesday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='thu-all-remarketing' name='sub-Thursday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='fri-all-remarketing' name='sub-Friday-All-Remarketing' value='All Attended'></th>
</form>
<?php
function updateAttendance($day, $who, $job) {
    $sql = ("UPDATE `Employee` SET `$day`='Attended' WHERE `Job`='$job'");
    if ($result = mysqli_query($con, $sql)) {
        echo '<meta http-equiv="refresh" content="0">';
    }
}

if ( isset($_POST['myform']) && ($_POST['myform'] == 1) ) {
    // forms been submitted
    foreach ($_POST as $key => $val) {
        if( strstr($key, 'sub-') ) {
            // if found, it's your button. ex: sub-Tuesday-All-Remarketing
            $array = explode('-', $key);  // now its split by the dash "-"
            $day = $array[1];  // Tuesday
            $who = $array[2];  // All
            $job = $array[3];  // Remarketing
            updateAttendance($day, $who, $job);
        }
    }
}

现在,在提交表单时,单击按钮的名称将通过POST传递

<form action="" method="POST">
<input type="hidden" name="myform" value="1" />
<th><input type='submit' id='mon-all-remarketing' name='sub-Monday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='tue-all-remarketing' name='sub-Tuesday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='wed-all-remarketing' name='sub-Wednesday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='thu-all-remarketing' name='sub-Thursday-All-Remarketing' value='All Attended'></th>
<th><input type='submit' id='fri-all-remarketing' name='sub-Friday-All-Remarketing' value='All Attended'></th>
</form>
<?php
function updateAttendance($day, $who, $job) {
    $sql = ("UPDATE `Employee` SET `$day`='Attended' WHERE `Job`='$job'");
    if ($result = mysqli_query($con, $sql)) {
        echo '<meta http-equiv="refresh" content="0">';
    }
}

if ( isset($_POST['myform']) && ($_POST['myform'] == 1) ) {
    // forms been submitted
    foreach ($_POST as $key => $val) {
        if( strstr($key, 'sub-') ) {
            // if found, it's your button. ex: sub-Tuesday-All-Remarketing
            $array = explode('-', $key);  // now its split by the dash "-"
            $day = $array[1];  // Tuesday
            $who = $array[2];  // All
            $job = $array[3];  // Remarketing
            updateAttendance($day, $who, $job);
        }
    }
}

一个函数,将按钮id解析为it@Dagon你能详细说明一下吗?我不知道该怎么做。你能使用PHP开关盒吗?或者使用jQuery,然后单击获取按钮的id并使用AJAX将其传递给PHP脚本。@WadeShuler我一直在尝试,但没有得到它。@Timothyle你能告诉我你为什么选择这个名称吗?为什么lR'表示按钮的名称?m'表示星期一,All'表示什么?R'表示“重新营销”?但我如何将其放入一个单独的函数中,在单击任何按钮时调用?只需将其包装在函数中。稍后检查是否发送了POST并执行它。我将编辑我的答案以向您演示如何操作。