表单提交不起作用 [英] form submit not working

查看:30
本文介绍了表单提交不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张表格,可以打印出所有可用的相机.它使用表单来更改这些设置.问题是表单只更新条目中的最后一个摄像头.换句话说,如果我更改表单并为列表中的最后一个摄像机点击应用",它将起作用.如果我更改此列表中任何其他摄像机的表单,它会将其更改为与列表中的最后一个摄像机具有相同的设置.据我所知,任何值都没有问题.

I have a table that prints out all available cameras. It uses a form to change these settings. The problem is that the form only updates the last camera in the entry. In other words if I change the form and hit "Apply" for the last camera in the list it will work. If I change the form for any other camera in this list it changes the one to have the same settings as the last camera in the list. There are no issues with any values as far as I can tell.

很抱歉在这里进行了长时间的转储,但无法缩小问题的范围,我认为我应该包括大部分内容:

Sorry for the long dump here, but without being able to narrow down the problem I thought I should include the bulk of it:

// Dont allow direct linking
defined('_JEXEC') or die('Direct Access to this location is not allowed.');
//get current user
$user =& JFactory::getUser();
// get a reference to the database
$db = &JFactory::getDBO();

$query_camera_name = "SELECT camera_id, camera_name, camera_status, camera_quality, camera_hash, camera_type FROM #__cameras WHERE user_id=".$user->id." AND camera_status!='DELETED'";
$db->setQuery($query_camera_name);
//get number of cameras so we can build the table accordingly
$db->query();
$num_rows = $db->getNumRows();
// We can use array names with loadAssocList.
$result_cameras = $db->loadAssocList();


if (isset($_POST['apply_changes'])) {

    //process changes to camera options     
    $camera_id = $_POST['camera_id'];
    $camera_status = check_input($_POST['camera_status']);
    $camera_name = check_input($_POST['camera_name'], "You entered an empty camera name. Enter another name and apply changes.");
    $camera_quality = check_input($_POST['camera_quality']);

    $query_insert_camera = 'UPDATE `#__cameras` SET `camera_status` ="'.$camera_status.'", `camera_name` ="'.$camera_name.'", `camera_quality` ="'.$camera_quality.'" WHERE `camera_id`='.$camera_id;
    $db->setQuery($query_insert_camera);
    $db->query();
    header("location: " . $_SERVER['REQUEST_URI']);
}

echo "<html>";
echo "<head>";


<link href="dashboard/webcam_widget.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
function oncameraSubmit(camera_id)
{
    document.active_cameras.camera_id.value = camera_id;
    return confirm('Apply changes?');
}


</script>
<?php


echo "</head>";
echo "<body>";


if (!isset($result_cameras))
{
   //TODO 
}
else 
{

    if ($num_rows == 0)
    {           
        echo '<b><i><center>You currently have no cameras setup.  Add a Camera below.</center></i></b>';
    }
    else
    {
        ?>
        <form name="active_cameras" action="<?php htmlentities($_SERVER['REQUEST_URI']); ?>" method="POST">
        <input type="hidden" name="camera_id" value="" />
        <table id="webcam-table">
        <thead>
            <tr>
                <th>Camera Type</th>
                <th>Name</th>
                <th>Quality</th>
                <th>Status</th>
                <th>Camera Actions</th>
            </tr>
        </thead>
        <tbody>
<?php
        for($i=0;$i<$num_rows;$i++)
        {

            //camera_status
            if ($result_cameras[$i]["camera_status"] == "ENABLED")
            {
                $enabled_option =  "value='ENABLED' selected='selected'"; 
                $disabled_option = "value='DISABLED'";
            }
            else
            {
                $enabled_option =  "value='ENABLED'";
                $disabled_option = "value='DISABLED' selected='selected'";
            }

            //camera_quality
            if ($result_cameras[$i]["camera_quality"] == "HIGH")
            {
                $high_option =  "value='HIGH' selected='selected'"; 
                $medium_option = "value='MEDIUM'";
                $mobile_option =  "value='MOBILE'";
            }
            else if ($result_cameras[$i]["camera_quality"] == "MEDIUM")
            {
                $high_option =  "value='HIGH'";
                $medium_option = "value='MEDIUM' selected='selected'";
                $mobile_option =  "value='MOBILE'";
            }
            else if ($result_cameras[$i]["camera_quality"] == "MOBILE")
            {
                $high_option =  "value='HIGH'";
                $medium_option = "value='MEDIUM'";
                $mobile_option =  "value='MOBILE' selected='selected'";
            }
            else
            {
                //TODO proper logging
            }

            //camera_type
            if ($result_cameras[$i]["camera_type"] == "WEBCAM")
            {
                $webcam =  "value='WEBCAM' selected='selected'"; 
                $axis = "value='AXIS'";
                $other =  "value='IPCAM'";
            }
            else if ($result_cameras[$i]["camera_type"] == "AXIS")
            {
                $webcam =  "value='WEBCAM'";
                $axis = "value='AXIS' selected='selected'";
                $other =  "value='IPCAM'";
            }
            else if ($result_cameras[$i]["camera_type"] == "IPCAM")
            {
                $webcam =  "value='WEBCAM'";
                $axis = "value='AXIS'";
                $other =  "value='IPCAM' selected='selected'";
            }
            else
            {
                //TODO 
            }

?>

            <tr>
                <td>
                    <select name="camera_type">
                    <option <?php echo $webcam; ?>>Webcam</option>
                    <option <?php echo $axis; ?>>AXIS</option>
                    <option <?php echo $other; ?>>Other</option>
                    </select>
                </td>
                <td>
                <input type="text" size="32" maxlength="64" name="camera_name" value="<?php echo $result_cameras[$i]["camera_name"]; ?>" />
                </td>
                <td>
                    <select name="camera_quality">
                    <option <?php echo $high_option; ?>>High</option>
                    <option <?php echo $medium_option; ?>>Medium</option>
                    <option <?php echo $mobile_option; ?>>Mobile</option>
                    </select>
                </td>
                <td>
                    <select name="camera_status">
                    <option <?php echo $enabled_option; ?>>Enabled</option>
                    <option <?php echo $disabled_option; ?>>Disabled</option>
                    </select>
                </td>
                <td>
                    <input type="submit" name="apply_changes" value="Apply" onClick="javascript:return oncameraSubmit(<?php echo $result_cameras[$i]["camera_id"]; ?>);"/>
                </td>
            </tr>

            <?php
        }
        echo "</tbody>";
        echo "</table>";
        echo "</form>";
    }
}

推荐答案

看起来您有多个同名的 HTML 元素.因此,您希望在提交表单时取回一组值.

It looks like you have multiple HTML elements with the same name. As such, you want to get back an array of values when the form is posted.

因此,从多个复选框中获取 $_POST 看起来像可能会有帮助.

As such, Get $_POST from multiple checkboxes looks like it might be helpful.

或者,扩展 oncameraSubmit 以便它将所有数据存储在隐藏的输入字段中(不仅仅是 id).然后在更新数据库时,使用这些隐藏字段.

Alternatively, extend oncameraSubmit so that it stores all the data in a hidden input field (not just the id). Then when you update the database, use these hidden fields.

这篇关于表单提交不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆