2012-11-26 2 views
1

아래에는 "Course"드롭 다운 메뉴와 "Module"드롭 다운 메뉴가 표시되는 PHP 스크립트가 있습니다. 사용자가 "코스"드롭 다운 메뉴에서 코스를 먼저 선택하면 선택한 코스에 속한 모듈 목록이 "모듈"드롭 다운 메뉴에 나타납니다. 그래서 나는 "과정"의 과정 INFO101 - Information Communication Technology을 선택 말할 수

메뉴 드롭 다운 , 그것은 아래 모듈 드롭에 다음과 같은 모듈을 표시

$sql = "SELECT CourseId, CourseNo, CourseName FROM Course"; 
$sqlstmt=$mysqli->prepare($sql); 
$sqlstmt->execute(); 
$sqlstmt->bind_result($dbCourseId, $dbCourseNo, $dbCourseName); 
$courses = array(); // easier if you don't use generic names for data 

$courseHTML = ""; 
$courseHTML .= '<select name="courses" id="coursesDrop">'.PHP_EOL; 
$courseHTML .= '<option value="">Please Select</option>'.PHP_EOL; 

while($sqlstmt->fetch()) 
{ 
    $courseno = $dbCourseNo; 
    $course = $dbCourseId; 
    $coursename = $dbCourseName; 
    $courseHTML .= "<option value='".$course."'>" . $courseno . " - " . $coursename . "</option>".PHP_EOL; 
} 

$courseHTML .= '</select>'; 

?> 

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> 
    <table> 
     <tr> 
      <th>Course: <?php echo $courseHTML; ?> 
       <input id="courseSubmit" type="submit" value="Submit" name="submit" /> 
      </th> 
     </tr> 
    </table> 
</form> 

<?php 

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

    $submittedCourseId = $_POST['courses']; 

    $query = "SELECT cm.CourseId, cm.ModuleId, c.CourseNo, m.ModuleNo, 
      c.CourseName, 
      m.ModuleName 
      FROM Course c 
      INNER JOIN Course_Module cm ON c.CourseId = cm.CourseId 
      JOIN Module m ON cm.ModuleId = m.ModuleId 
      WHERE 
      (c.CourseId = ?) 
      ORDER BY c.CourseName, m.ModuleId"; 

    $qrystmt=$mysqli->prepare($query); 

    // You only need to call bind_param once 
    $qrystmt->bind_param("s",$submittedCourseId); 
    // get result and assign variables (prefix with db) 

    $qrystmt->execute(); 
    $qrystmt->bind_result($dbCourseId,$dbModuleId,$dbCourseNo,$dbModuleNo,$dbCourseName,$dbModuleName); 

    $qrystmt->store_result(); 

    $num = $qrystmt->num_rows(); 

    if($num ==0){ 
     echo "<p style='color: red'>Please Select a Course</p>"; 
    } else { 

     $dataArray = array(); 

     while ($qrystmt->fetch()) { 
      // data array 
      $dataArray[$dbCourseId]['CourseName'] = $dbCourseName; 
      $dataArray[$dbCourseId]['CourseNo'] = $dbCourseNo; 
      $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleName'] = $dbModuleName; 
      $dataArray[$dbCourseId]['Modules'][$dbModuleId]['ModuleNo'] = $dbModuleNo; 

      } 

     foreach ($dataArray as $foundCourse => $courseData) { 

      $output = ""; 

      $output .= "<p><strong>Course:</strong> " . $courseData['CourseNo'] . " - " . $courseData['CourseName'] . "</p>"; 

      $moduleHTML = ""; 
      $moduleHTML .= '<select name="module" id="modulesDrop">'.PHP_EOL; 
      $moduleHTML .= '<option value="">Please Select</option>'.PHP_EOL;  
      foreach ($courseData['Modules'] as $moduleId => $moduleData) {   

       $moduleHTML .= "<option value='$moduleId'>" . $moduleData['ModuleNo'] . " - " . $moduleData['ModuleName'] ."</option>".PHP_EOL;   
      } 
     } 
    $moduleHTML .= '</select>'; 

    echo $output; 

?> 

<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post"> 
    <table> 
     <tr> 
      <th>Course: <?php echo $moduleHTML; ?> 
       <input id="courseSubmit" type="submit" value="Submit" name="submit" /> 
      </th> 
     </tr> 
    </table> 
</form> 

create_session.php : 다음은이에 대한 코드는 제가하고 싶은 것은 나는 사용자가로 이동합니다 아래의 양식을 드롭 다운 메뉴에서 모듈 중 하나를 선택하고 제출하려는 지금

CHI2520 - Advanced Web Programming 
CHI2220 - Systems Strategy 
CHI2350 - Interactive Systems 

: 아래의 메뉴는 코스에 해당 QandATable.php 페이지. 하지만 드롭 다운 메뉴에서 모듈 번호와 이름을 검색하고 QandATable.php 페이지에 표시하는 방법을 알고 싶습니다. 나는 $ _SESSION 변수를 어떻게 사용해야 하는지를 알고 있고, 두 페이지에 $ _SESSION 변수를 어디에 써야합니까? 또한 정의되지 않은 변수가 없도록 isset을 사용해야합니까? 질문에 대한 대답에서

<form action="QandATable.php" method="post" id="sessionForm"> 
      <table><tr><th>6: Module:</th> 
      <td><?php echo $moduleHTML; ?></td> 
      </tr> 
      </table> 
      <p><strong>11: </strong><input class="questionBtn" type="submit" value="Prepare Questions" name="prequestion" /></p> 


     </form> 

답변

0

: 아래

는 QandATable.php로 이동 형태이다. 예, 게시 된 변수에 대해 isset 또는 is_null을 사용하여 유효한 값을 갖도록하는 것이 좋습니다. 그것은 중요하지 않지만 세션 변수에 쓰는 상황. 세션 변수에 널값을 할당 할 수 있지만 나중에 유효한 값을 기대하는 세션 변수를 사용하려고하면 의도하지 않은 결과가 발생할 수 있습니다.

세션 변수를 설정하려면 다음을 수행하십시오. 변수를 업데이트하기 위해 필요할 때마다이 값을 설정할 수 있습니다. 나는 보통 사용자로부터 데이터를 수집 한 후 어딘가에 포스트 페이지에 이들을 할당합니다.

$_SESSION['variableName'] = $_POST['postedVariable']; 

당신은 또한 세션을 사용하거나 설립 세션 변수로 타격을받을 수있는 모든 페이지의 맨 위에 다음 코드를 필요로 기억하십시오. 페이지에이 코드 세트가없고 사용자가 방문한 경우 세션 추적을 잃게됩니다. 내가 제대로 질문을 이해

echo $_SESSION['variableName']; 

희망 :

session_start(); 

나중에이 같은 할 수있는 저장된 세션 변수를 참조하십시오.

+0

답변을 주셔서 감사합니다. 내가 알아야 할 것은 게시 된 변수가'$ _POST [ 'postedVariable']'에있는 모듈 번호와 모듈 이름에 맞아야한다는 것입니다. – user1819709

+0

postedVariable은 폼에서 변수를 호출 한 값으로 바꿀 수 있습니다. CourseName 또는 위의 코드를 기반으로 비슷한. – Jammin411

+0

당신이'$ _POST [ 'Modules']'를 할 경우, 드롭 다운 메뉴에있는 옵션의 값이'$ dbModuleId'이기 때문에 name 속성을 $ _POST해야한다는 것을 의미합니다. 이제이 $ _POST가 페이지에 필요하지만 QandATable.php에 게시하려면'$ dbModuleNo' 및'$ dbModuleName'을 게시하고 싶습니다. 어떻게 두 변수를 게시 할 수 있습니까? 실제로'$ _POST [ '$ dbModuleNo'];와'$ _POST [ '$ dbModuleName'];'을 할 수 있습니까? – user1819709

0

그러나 드롭 다운 메뉴에서 모듈 번호와 이름을 검색하고 QandATable.php 페이지에 표시하려면 어떻게해야합니까? 나는 $ _SESSION 변수를 어떻게 사용해야 하는지를 알고 있고, 두 페이지에 $ _SESSION 변수를 어디에 써야합니까?

이 PHP 코드의 끝 부분에서 $ dataArray의 전부 또는 일부를 저장할 수 있습니다.

if (!isset($_SESSION)) { 
    session_start(); 
} 
    $_SESSION['dataArray'] = $dataArray; 

QandATable을로드 할 때.PHP 페이지, 당신은 전화 :

if (!isset($_SESSION)) { 
    session_start(); 
} 
if (isset($_SESSION['dataArray'])){ 
    $dataArray = $_SESSION['dataArray']; 
} 

당신은 당신이 원하는 정보를 얻기 위해 배열에 인덱스로 ($ _POST)에서 선택한 옵션을 사용할 수 있습니다.

관련 문제