2017-11-23 1 views
0

2 차원 배열에서 데이터를 게시하고 에코하는 데 몇 가지 문제가 있습니다.가변 길이 2 차원 배열에서 데이터 게시

다차원 배열에 대한 여러 주제와 자습서를 읽었지 만, 대부분 고정 길이의 배열을 예제로 사용했습니다. 필자의 경우 배열의 크기는 모두 가변적이다. 제가 함께 일하는 프로젝트는 여러 해에 걸친 학생들에게 상을 제공하는 것입니다.

예 : Year-level 3은 5 개의 상을 수여 할 수 있으며 각상은 다양한 학생에게 수여됩니다. 보너스 A는 5 명, 보너스 B는 2 명 등입니다. 마찬가지로, 6 학년은 15 개의 상을받을 수 있습니다.

매년 모든 수상 경력과 수상 내역이 매년 할당되는 기록이있는 표가 있습니다.

올해의 레벨과 각 상을 하나의 양식 (html/php)으로 표시 할 수있었습니다. 하지만 필자는 필사적으로 2 차원 배열에서 데이터를 게시하고이를 에코하는 방법을 찾아 내려고 노력하고 있습니다. 아이디어는 그 데이터를 반향시킬 수있는 경우 표에 삽입하는 것입니다. 학생들의 목록은 테이블에서 오는

위의 설명이 명확하지 않은 경우

<?php 
    include 'db_connect.php'; 
    $query = mysqli_query($conn, "SELECT a.awardcode, a.year_grp, a.awardqty, b.awardname FROM awardallocation AS a INNER JOIN award AS b 
     ON a.awardcode = b.awardcode 
     WHERE a.year_grp = '$level' AND b.awardstatus != '0' ORDER BY b.awardname ASC "); 

    $row = mysqli_num_rows($query); 

    if($row > 0) { 

     while ($result = mysqli_fetch_assoc($query)){ 
      $awardname = trim($result['awardname']); 
      $awardcode = trim($result['awardcode']); 
      $awardqty = trim($result['awardqty']); 
?> 
      <table> 
       <tr> 
       <th>Award Name: <?php echo $awardname; ?></th>   
       </tr> 

       <tr style="background-color:#FFF9C4"> 
        <?php 
        for($i = 0; $i < $awardqty; $i++){ 
         ?> 
        <td>     
         <select name="stud_code[$awardcode][$i]"> 
          <option disabled selected value> -- Select Student -- </option> 
          <?php 
//       include 'db_connect.php'; 
          $sql = mysqli_query($conn, "SELECT stud_code, surname, preferred_name FROM student WHERE year_grp = '$level' ORDER BY surname ASC "); 
          while ($row1 = mysqli_fetch_assoc($sql)){ 
           $name = trim($row1['surname']).', '.trim($row1['preferred_name']); 
           echo '<option value = " '.$row1['stud_code'].'"> '.$name.' </option>'; 
          } 
          ?> 
         </select> 
        </td> 
        <?php } ?> 
       </tr> 

      </table> 
<?php   
     } 
    } 
?>  
     <table> 
      <tr> 
       <td><lable>Lock data to prevent changes in future?</lable><input type="checkbox" name="lock" value="1"/></td> 
      </tr> 
     </table>  
      <div class="button-section">    
       <input id="save_button" type="submit" name="submit" value="Save Selection"> 
       <input id="exit_button" type="submit" name="exit" value="Exit" onclick="window.history.go(-1); return false;"> 
      </div> 
    </form> 
    </div> 
</body> 

<?php 

if(isset($_POST['submit'])) { 

for ($row=1; $row<=count($_POST ['stud_code["awardcode"]']); $row++){ 
    echo $_POST["awardcode"]; 
     for ($col = 0; $col < 3; $col++){ 
//  echo("<li>".$_POST['stud_code']['awardcode'][$i]."</li>"); 
//$student = $_POST['stud_code[$awardcode][$i]']; 

} 
} 
$lock = (isset($_POST['$lock']) ? $_POST['$lock'] : '0');  
$next_year = date("Y")+1; 

} 

저를 용서해주세요 (학생의 이름을 표시하지만, 학생 코드를 선택). 필자가 작성한 코드가 포함되어 있습니다.

어떤 제안과 도움

이 높은 난이 후 숙면을 가질 수 있습니다으로 이해할 수있을 것이다 .. :)

+0

당신은 우리에게 배열이 어떻게 생겼는지 예를 보여줄 필요가 예상되는 결과가 무엇인지, 어떤 당신에게 '(A'위해서 var_dump ($ _ POST)를'할) 시도했다. 문제와 직접 관련이없는 코드는 모두 제거하십시오. –

+0

학생 코드 값에 선행 공백을 넣습니다. 이것이 왜 다듬은거야? – Progrock

답변

1

당신은 당신의 이름 속성 키 내에서 반향하는 것을 잊었다 : 나는 '

<select name="stud_code[<?=$awardcode?>][<?=$i?>]"> 

이름을 award_allocations와 같은 것으로 변경하는 것이 좋습니다.

<select name="award_allocations[<?=$awardcode?>][<?=$i?>]"> 

덤프 $ _POST는 원하는대로 확인하십시오. 당신은 당신의 할당 이런 일을 반복 할 수 있습니다

if(isset($_POST['submit'])) 
{ 
    foreach($_POST['award_allocations'] as $award_code => $student_codes) { 
     printf("Award code: %s allocated to Student codes: %s\n", 
      $award_code, 
      implode(', ', $student_codes) 
     ); 
    } 
    $lock = isset($_POST['lock']) ? true : false; 
} 
+0

안녕하세요, Progrock, 완벽하게 작동합니다. 고마워. 이 경우 foreach 루프 내에서 printf를 대체하는 INSERT 쿼리를 사용할 수 있습니까? $ query = mysqli_query ($ conn, "INSERT INTO awardwinner (awardcode, stud_code) VALUES ('$ award_code', '$ student_codes'"); – sansam

+0

데이터베이스의 형식을 알지 못합니다. student_codes를 배열 형식으로 처리하려면 안녕 – Progrock

+0

안녕하세요 Progrock, 데이터를 테이블에 삽입 할 수있었습니다. 실마리를 가져 주셔서 감사합니다. 3 차원 배열 인 경우 메서드를 보여 주시겠습니까? – sansam

관련 문제