Лучшая практика дизайна PHP - PullRequest
7 голосов
/ 18 мая 2009

Я уже некоторое время использую PHP, и мне всегда было интересно, как представить одну форму для обработки обновлений и вставок в базу данных. В настоящее время я использую две отдельные формы, чтобы сделать это, и они имеют в основном одинаковую информацию и текстовые поля и т. Д. Я знаю, что есть лучший способ справиться с этим, но я не уверен, что это такое.

В прошлом я пытался использовать одну форму, но HTML, смешанный с php, выглядит ужасно и его очень сложно поддерживать. Я после "чистой" и опрятной.

Может кто-нибудь, пожалуйста, поставить меня на правильный путь.

Одна из вещей, которые я должен использовать, - это значения POST, если пользователь отправляет форму и проверка не прошла, обновление не должно уничтожать уже введенные значения.

Ответы [ 2 ]

5 голосов
/ 18 мая 2009

Вы можете использовать одну форму со скрытым полем для id. Если это поле установлено, то вы должны обновить запись $_POST['id'] с остальной частью формы. Если поле не задано (то есть оно имеет значение = ""), необходимо вставить данные формы в новую запись.

Вы установите поле 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 голос
/ 18 мая 2009

Вот как я, вероятно, сделал бы это без использования каких-либо других фреймворков / библиотек и т. Д. Это, в основном, сказал Элазар Лейбович.

  <?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...