2009-05-18 4 views
7

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

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

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

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

ответ

5

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

Вы установите id поле в соответствии с действием, например /data/edit/1 установит id поле для , and/данных/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; 
+0

Hi Elazar, спасибо за помощь. Есть ли пример или вы можете предоставить ссылку, чтобы я мог точно видеть, что вы имеете в виду? Это имеет смысл, но я не могу представить его. Я не вижу, что ваше предложение сильно отличается от того, как я это делал в первую очередь. – 2009-05-18 07:35:38

+2

Не забудьте проверить, что текущий пользователь владеет этим ID –

+0

Почему даже есть поле id, если действие для редактирования содержит идентификатор в любом случае? – rojoca

1

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

<?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> 
Смежные вопросы