PHP表单设计的最佳实践

时间:2009-05-18 07:24:19

标签: php

我一直在使用PHP一段时间,我一直想知道如何表示单个表单来处理更新和插入数据库。目前,我使用2个单独的表格来执行此操作,它们都具有基本相同的信息和文本框等。我知道有更好的方法来处理这个但我不确定那是什么。

我过去曾尝试使用单个表单,但与php混合的HTML看起来很糟糕,而且很难维护。我是在“干净”和整洁。

有人可以让我走上正轨。

我必须使用的一件事是POST值,如果用户提交表单并且验证未通过,则刷新不应消除已输入的值。

2 个答案:

答案 0 :(得分:5)

您可以使用单个表单,其中隐藏字段为id。如果设置了此字段,那么您应该使用表单的其余部分更新$_POST['id']记录。如果未设置该字段(即,它具有value =“”),则应将表单数据插入到新记录中。

您将根据操作设置id字段,例如/data/edit/1会将id字段设置为, and / data / new`不会设置值它。

例如,您的观点可能是

<form action="/data/edit/1">
<input type="hidden" value="<?php echo $data->id; ?>" />
<input type="text" value="<?php echo $data->name; ?>" />
</form>

如果是新记录,请使用以下数据调用您的视图

$data->id = '';
$data->name = '';

如果是已知记录,只需使用数据

初始化$data对象
$data->id = $record_id;
$data->name = $record_name;

答案 1 :(得分:1)

如果不使用任何其他框架/库等,我可能会这样做。这基本上就是Elazar Leibovich所说的。

  <?php
    //id is zero or a record id depending on whether updating or inserting
    //an existing record could be edited using edit.php?id=10
    //if the id GET parameter is omitted a new record will be created
    $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
    $error = '';

    if ($id) {
        //this array would be in the same format as the one below
        $record = fetchRecordFromDb($id);    
    } else {
        $record = array( 'field1' => 'default value', 'field2' => 'some other default' );    
    }

    //allow POST data to override what is already in the form
    foreach ($record as $key => $value) {
        if (isset($_POST[$key])) {
            $record[$key] = $_POST[$key];
        }
    }

    if (isset($_POST['submit'])) {
        if (!validateForm()) {
            $error = 'Some form error';
        } else {
            if ($id) {
                updateRecord($id, $record);
            } else {
                insertRecord($record);
            }

            //ok, redirect somewhere else
            header('Location: http://somewhere');
            exit();
        }
    }

    ?>

    <form method="post">
       <?php echo $error; ?>
       <input type="hidden" name="id" value="<?php echo $id; ?>">
       <input type="text" name="field1" value="<?php echo htmlspecialchars($record['field1']); ?>"><br />
       <input type="text" name="field2" value="<?php echo htmlspecialchars($record['field2']); ?>"><br />
       <input type="submit" name="submit">
    </form>