2016-08-30 4 views
-1

fgetcsv을 통해 특정 열을 업데이트하려고합니다. 그러나 문제는 모든 데이터가 동일하다는 것입니다. 누군가가 이것에 대해 나를 도울 수 있습니까? 나는 grade_id을 여기에서 사용하는 법을 모른다. 왜냐하면 데이터베이스에만 csv에 grade_id이 없기 때문이다. 그리고 단지 파일 업로드만으로 그것을하고 있습니다.fgetcsv를 사용하여 특정 열을 업데이트하는 방법

여기에 CSV가 있습니다. 중간 학년이 업데이트되기를 바랍니다. 그러나 64 값만 삽입됩니다. enter image description here

결과는 다음과 같습니다. 출력은하지 64,64,64 enter image description here

여기 내 데이터베이스 구조의 75,80,64해야 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 회 호출합니다. grade_id 모든 결과 집합에서 오는이 쿼리에서

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

기본적으로

모든 기록을 3 업데이 트를 선택 CSV 2- 라인의 마지막 값을 얻을이 1을하고있다 모두 1의 가치 - 4- 다음 라인

SELECT를위한 모든 mysql 데이터베이스를 루핑하는 대신 필요한 레코드 만 선택할 수 있어야합니다. CSV가 가득 찼는지 모르지만 한 학년에 grade_id가 있습니까? 그렇지 않으면 CSV 행을 데이터베이스의 레코드와 어떻게 일치시킬 수 있습니까?

편집

은 협의 후 당신은 당신이 절 용어 및 주제 (당신은 당신의 데이터베이스에 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

에 고유 키가 말했다 모든 행에는 grade_id 선생님이 있습니다. 나는 그것을 위해 grade_id를 어떻게 사용할 지 모른다. – nethken

+0

모든 기록이 필요합니다. 모든 .csv에는 학생 섹션이 포함되어 있습니다. 나는 그것을 한 번에 업데이트하는 방법을 모른다. – nethken

+0

csv에 grade_id가 있음을 확인 했습니까? – Sylwit