2016-08-30 2 views
-1

Я пытаюсь обновить конкретный столбец до fgetcsv. Но проблема в том, что все данные одинаковы. Может кто-нибудь мне помочь? Я не знаю, как использовать grade_id здесь, потому что нет grade_id в csv только в базе данных. И им делать это только с загрузкой файлов.Как обновить конкретный столбец с помощью fgetcsv

Вот csv. Я просто хочу, чтобы средний класс был обновлен. Но вводится только значение 64. enter image description here

вот результат. Вывод должен быть 75,80,64 не 64,64,64 enter image description here

вот моя структура базы данных enter image description here

вот мой код

if(isset($_POST["Import"])){ 

     $term = $_POST['term']; 
     $fac_code = $_POST['fac_code']; 
     $sch_year = $_POST['schoolyear']; 
     $section = $_POST['sec']; 
     $semester = $_POST['semester']; 
     $sub = $_POST['sub']; 

     echo $filename=$_FILES["file"]["tmp_name"]; 

      $heading = true; 
     if($_FILES["file"]["size"] > 0) 
     { 

      $file = fopen($filename, "r"); 
      while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) 
      { 
       if($heading) { 
        // unset the heading flag 
        $heading = false; 
        // skip the loop 
        continue; 
       } 
       //to get the last column 
       $last = end($emapData); 

        $sql1 ="SELECT * FROM grade WHERE subj_descr ='$sub' AND section = '$section'"; 
         $result = mysqli_query($con, $sql1); 

         while($row = mysqli_fetch_array($result)){ 
         $gradeid = $row['grade_id']; 

         $sql = "UPDATE grade SET midterm_grade = '$last' WHERE grade_id = '$grade_id'"; 
            $result = mysqli_query($con, $sql); 
        } 



      } 
      fclose($file); 
      //throws a message if data successfully imported to mysql database from excel file 
      echo "<script type=\"text/javascript\"> 
         alert(\"CSV File has been successfully Imported.\"); 
         window.location = \"homefaculty.php\" 
        </script>"; 



      //close of connection 
      mysqli_close($con); 



     } 

    } 

ответ

0

Ваш цикл обновления в MySQL это делается только после того, как ваш принести ваше последнее значение В в вашем коде вы делаете 3 цикла для обновления всего значения

$sql1 ="SELECT * FROM grade WHERE subj_descr ='$sub' AND section = '$section'";

Этот цикл, который выбирает всегда тот же результат, называется 3 раза.

"UPDATE grade SET midterm_grade = '$last' WHERE grade_id = '$grade_id'";

В этом опрашивать grade_id приходит от всех результирующего

В основном вы делаете это 1- получить последнее значение строки CSV 2- выбрать все записи 3- обновление все они со значением 1- 4- следующая строка

Вместо того, чтобы зацикливать во всей базе данных mysql для SELECT, вы должны иметь возможность выбирать только нужную запись. Я не знаю, заполнен ли ваш CSV, но у вас есть класс_ид в столбце? В противном случае, как вы можете сопоставить строку вашего CSV с записью в вашей базе данных?

EDIT

после обсуждения вы сказали, у вас есть уникальный ключ на секции, срок и при условии (Вы должны определить связь между строкой в ​​CSV и строки в базе данных)

$last = end($emapData); //to get the last column 
$section = $emapData[0]; // assuming section is the first column of CSV 
$term = $emapData[1]; // assuming term is the 2nd column of CSV 
$subject = $emapData[2]; // assuming subject is the 3rd column of CSV 

$sql = "UPDATE grade SET midterm_grade = '$last' WHERE section = '$section' AND term = '$term' AND subject = '$subject'"; 
$result = mysqli_query($con, $sql); 
+0

В каждой строке есть сэр. Я не знаю, как использовать class_id для этого. – nethken

+0

Все записи нужны сэр. Каждый .csv содержит раздел ученика. Я не знаю, как его обновить всего за один раз. – nethken

+0

Вы подтверждаете, что у вас есть класс_id в csv? – Sylwit

Смежные вопросы