Удаление записи базы данных с использованием $ _POST с Codeigniter - PullRequest
0 голосов
/ 26 января 2011

Я все делал неправильно, я обычно брал значение из сегмента URI и не понимал, что это не идеальный способ. Поэтому я изменил свой подход, и теперь у меня есть все через $ _POST. Я не уверен, правильно ли я делаю, может кто-нибудь пролить свет? Мое представление содержит элементы списка табличных данных, извлеченные из БД. Каждый элемент имеет две ссылки: «Просмотр» и «Удалить». Код работает, но ему было интересно, можно ли его лучше кодировать. Я забыл, что имя формы не было уникальным, поэтому, когда я собирался удалить запись, она всегда удаляла самую новую запись (было установлено последнее скрытое поле).

myview.php (фрагмент)

<?php foreach($records as $record): ?>
    <form method="POST" name="myform<?php echo $location->id;?>" action="/location/delete">
    <a href="/location/view/<?php echo $location->id;?>">View</a> <a href="#" onclick="document.myform<?php echo $location->id;?>.submit();">Delete</a>
    <br />
    <input type="hidden" name="location_id" value="<?php echo $location->id;?>">
    </form>
<?php endforeach ?>

Ответы [ 3 ]

1 голос
/ 16 апреля 2011

Для тех, кто сталкивается с этим позже, вот как я решил свою проблему.

В моем контроллере у меня есть метод с именем delete, который проверяет, было ли поле формы отправлено с помощью $_POST,Если нет переменной, перенаправьте их куда-нибудь с сообщением об ошибке.Если поле было пропущено, выполните обычные проверки, чтобы убедиться, что запись может быть удалена.

if(!isset($_POST['item_id']))
{
    $this->session->set_flashdata('message', 'item cannot be removed!'); 
    redirect("/item");
}


if($this->input->post('item_id')) {         
    ... code ....
    ... code ....
}
1 голос
/ 26 января 2011

Просмотр / удаление с помощью идентификатора uri - это прекрасно, я бы не рискнул сказать, что использование $_POST неправильно, но создание новой уникальной формы для каждого элемента удаления ужасно грязно и сопоставимо с тем, что вы получаете ( я полагаю, нет открытого идентификатора?), я полагаю, что более правильно использовать uri для функций удаления.

Если вы хотите, чтобы только некоторые люди могли удалять определенные записи, обрабатывайте это программно в самой функции удаления, не завися от того, что запрос отправляется только через $_POST. Это ненадежно, любой может сгенерировать почтовый запрос.

0 голосов
/ 04 июля 2014

Ваша синтаксическая ошибка в этой строке:

<?php foreach($records as $record): ?>
         <form method="POST" name="myform<?php echo $location->id;?>"      action="/location/delete">
         <a href="/location/view/<?php echo $location->id;?>">View</a> <a href="#" onclick="document.myform<?php echo
 $location->id;?>.submit();">Delete</a>
         <br />
          <input type="hidden" name="location_id" value="<?php echo $location->id;?>">
         </form>
      <?php endforeach ?>

Вы не можете делать циклы для формы.Вместо этого используйте следующий код:

   <form method="POST" name="myform<?php echo $location->id;?>" action="/location/delete">
<?php foreach($records as $record): ?>
    a href="/location/view/<?php echo $location->id;?>">View</a> <a href="#" onclick="document.myform<?php echo $location->id;?>.submit();">Delete</a>
        <br />
        <input type="hidden" name="location_id" value="<?php echo $location->id;?>">
    <?php endforeach ?>
       </form>
...