Предотвратить повторную запись в базе данных Codeigniter - PullRequest
0 голосов
/ 06 декабря 2018

Я хотел бы знать, как запретить моей функции загрузки добавлять дубликаты записей в базу данных с помощью uid.

public function upload(){
        if(!empty($_FILES['uploaded_file']))
        {
            $path = FCPATH . "/file_attachments/signature_file/";
            $path = $path . basename( $_FILES['uploaded_file']['name']);

            $base64 = base64_encode(file_get_contents($_FILES['uploaded_file']['tmp_name']));

            if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) 
            {
                $data = array (
                        'uid' => $this->user->get_uid(),
                                    'image' => $base64,
                                    'name'  => basename( $_FILES['uploaded_file']['name']),
                                );


                $this->load->database('employee');         
                $this->db->insert('signatures', $data);

    //              echo "The file ".  basename( $_FILES['uploaded_file']['name']). 
    //              " has been uploaded";
                  $alert  = "The file ".  basename( $_FILES['uploaded_file']['name']). 
                  " has been uploaded";
                     redirect(base_url() . "signature_uploader/search/?id=" . $alert);                
            } 
            else
            {
                // echo "There was an error uploading the file, please try again!";
                $alert  ="There was an error uploading the file, please try again!";
                redirect(base_url() . "signature_uploader/search/?id=" . $alert); 
            }       
        }        
}

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

<div class="bod">
<div class="insta">
    <form enctype="multipart/form-data" style="padding-top: 10px" name="exit_form" method="post" action="<?= base_url() ?>signature_uploader/upload">
    <input type="hidden" name="uid" value="<?= $agent->get_uid() ?>" />
    <input type="hidden" name="gid" value="<?= $agent->get_gid() ?>" />
    <input type="hidden" name="fname" value="<?= $agent->get_fname() ?>" />
    <input type="hidden" name="lname" value="<?= $agent->get_lname() ?>" />
    <div style="text-align: center; font-size: 25pt; margin-bottom: 15px">Signature Uploader</div>
    <table width="105%">
        <tr>
            <td width="40%"><strong>Name: </strong><input class="textinput" disabled="disabled" type="text" name="full_name" id="textfield3" size="35" value="<?= $agent->get_fullName() ?>" /></td>
        <tr/>
        <tr>
            <td><label>Upload Image File:</label><br /> <input name="uploaded_file" type="file" accept=".png" required/>
        </tr>
    <table/>
    <br />
    <input type="submit" value="Submit" class="button1" />
    </form>
    <br/>
&nbsp;
</div>

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете использовать проверку формы Codeigniter для предотвращения дублирования ввода:

сначала вы должны получить uid в виде формы, например:

<input type="hidden" name="uid" value="<?php echo $this->user->get_uid() ?>">

, а затем вваш контроллер:

public function upload(){
    if(!empty($_FILES['uploaded_file']))
      {
            $this->load->helper(array('form', 'url'));
            $this->load->library('form_validation');
            $this->form_validation->set_rules('uid', 'UID', 'is_unique[signatures.uid]');
            if ($this->form_validation->run() == FALSE)
            {
                // Your Code if the uid is duplicate
                $alert  ="Could't upload because of duplicate entry!";
                redirect(base_url() . "signature_uploader/search/?id=" . $alert); 
            }
            else
            {
                    // Your Code if the uid is unique
                $path = FCPATH . "/file_attachments/signature_file/";
                $path = $path . basename( $_FILES['uploaded_file']['name']);
                $base64 = base64_encode(file_get_contents($_FILES['uploaded_file']['tmp_name']));
                if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) {
                    $data = array (
                        'uid' => $this->input->post('uid'),
                        'image' => $base64,
                        'name'  => basename( $_FILES['uploaded_file']['name']),
                    );
                    $this->load->database('employee');         
                    $this->db->insert('signatures', $data);

    //              echo "The file ".  basename( $_FILES['uploaded_file']['name']). 
    //              " has been uploaded";
                  $alert  = "The file ".  basename( $_FILES['uploaded_file']['name']). 
                  " has been uploaded";
                     redirect(base_url() . "signature_uploader/search/?id=" . $alert);                
                } else{
    //                echo "There was an error uploading the file, please try again!";
                    $alert  ="There was an error uploading the file, please try again!";
                    redirect(base_url() . "signature_uploader/search/?id=" . $alert); 
                }
            }
      }        
}
0 голосов
/ 06 декабря 2018

Либо вы можете проверить, существует ли такой файл, либо нет, но обычно при создании кода, который загружает файл, есть функция, которая генерирует уникальное имя для каждого загружаемого нами файла.Так что в таких случаях у него будут повторяющиеся записи с другим именем.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...