настройка уникального столбца в mysql и отображение флэш-данных в codeigniter

#php #mysql #database #codeigniter #codeigniter-3

Вопрос:

у меня есть веб-сайт codeigniter, где у меня есть уникальный столбец, пользователям предлагается вставлять данные с помощью полей ввода, если пользователь попытается добавить повторяющееся значение в столбец по умолчанию, данные не будут вставлены, поэтому я пытаюсь настроить флэш-данные в соответствии с ним:

 function import_domestic_excel_data(){

if(isset($_FILES["file"]["name"])){
   $path = $_FILES["file"]["tmp_name"];
   $object = PHPExcel_IOFactory::load($path);
   foreach($object->getWorksheetIterator() as $worksheet){
       $highestRow = $worksheet->getHighestRow();
       $highestColumn = $worksheet->getHighestColumn();
       for($row=2; $row<=$highestRow; $row  ){
 $sendername = $worksheet->getCellByColumnAndRow(0, $row)->getValue();
 $senderreference = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
  if(!empty($sendername)){
               $data[] = array(
                   'sendername'  => $sendername,
                   'senderreference'   => $senderreference,
               );
           }
}
       $response=$this->excel_import_model->insert_excel($data);
   if($response){
    $this->session->set_flashdata("Success","Data Added Successfully !");
    redirect('listconsignment' , 'refresh');
}
  else{
   $this->session->set_flashdata("Error","Data Upload Error !");
    redirect('listconsignment' , 'refresh');
  }
 }
 
}
}
 

теперь проблема в том, что независимо от результата, например, если данные будут загружены или если данные не будут загружены, я получаю только сообщение об ошибке, установленное во flashdata, не только во flashdata, я попытался просто повторить «ошибка» и «успех», а также его повторную ошибку, если данные успешно загружены. кто-нибудь может, пожалуйста, сказать мне, что здесь может быть не так. заранее спасибо

Ответ №1:

Я думаю, проблема в том, что ты вкладываешь set_flashdata внутрь foreach :

 foreach ($object->getWorksheetIterator() as $worksheet) {
   ...
}
 

Может быть $response = false , в конце цикла всегда $worksheet будет «а». Таким образом, это всегда приведет к ошибке в сеансе. Возьмите блок для проверки $response за пределами foreach, это решит эту проблему:

 $result = false;
foreach ($object->getWorksheetIterator() as $worksheet) {
    ....
    $response = $this->excel_import_model->insert_excel($data);
    if ($response) {
        $result = true; // Change to condition to set true to what you want
    }
}
if($result){
    $this->session->set_flashdata("Success", "Data Added Successfully !");
    redirect('listconsignment', 'refresh');
}
else {
    $this->session->set_flashdata("Error", "Data Upload Error !");
    redirect('listconsignment', 'refresh');
}
 

Комментарии:

1. пробовал, братан, та же ошибка. приходит только вспышка ошибки загрузки данных

2. Не могли бы вы echo $result убедиться, что это правильное значение

3. И убедитесь, что вы правильно извлекли значение из сеанса, например: $this->session->flashdata('Success'); я думаю, что если вы просто повторяете «ошибка» и «успех», но это не сработало, возможно, в том, как вы получаете значение сеанса, что-то не так