0

理解できない2セットのエラーが発生しています。1つは、エラーコンソールのJavaScriptに次のようなエラーがあります。

Syntax Error: missing ; before statement:
Notice: undefined variable courseDatas in ..... line 28

私が得ている他のエラーは、次のようなmysqli/phpエラーです。

Warning: array_push() expects parameter 1 to be array, ... on line 247

これらのエラーを両方とも取り除くにはどうすればよいですか?

Javascript:

<script type="text/javascript">
    $(document).ready( function(){
        var coursedatas = <?php echo json_encode($courseDatas); ?>; //error here
        $('#coursesDrop').change(function()
        {
            var courseId = $(this).val(),
            coursedata;
            for (var i = 0, l = coursedatas.length; i < l; i++)
            {
                if (coursedatas[i].courseId = courseId) { coursedata = coursedatas[i]; }
            }
            var index = $('#newDuration option[value="' + courseData.Duration + '"]').index('#newDuration option');
            $('#newDuration')[0].selectedIndex = index;
        });
    });
</script>

....。

PHP:

$coursequery = "
    SELECT CourseId, CourseNo, CourseName, Duration
    FROM Course
    ORDER BY CourseNo
";

$courseqrystmt=$mysqli->prepare($coursequery);
// You only need to call bind_param once

$courseqrystmt->execute();   
$courseqrystmt->bind_result($dbCourseId,$dbCourseNo,$dbCourseName,$dbDuration);
$courseqrystmt->store_result();
$coursenum = $courseqrystmt->num_rows();     
$courseHTML = '';
$courseHTML = '<select name="courses" id="coursesDrop">'.PHP_EOL;
$courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;           

while ( $courseqrystmt->fetch() ) {
    $courseHTML .= sprintf("<option value='%s'>%s - %s</option>", $dbCourseId,$dbCourseNo,$dbCourseName) . PHP_EOL;  
    $courseData = array();
    $courseData["CourseId"] = $dbCourseId;
    $courseData["CourseNo"] = $dbCourseNo;
    $courseData["CourseName"] = $dbCourseName;
    $courseData["Duration"] = $dbDuration;

    array_push($courseDatas, $courseData); //error here
}    
$courseHTML .= '</select>';
4

1 に答える 1

1

変数は、whileループの$courseDatas外部で配列として定義する必要があります。

編集済み-あなたのスクリプトがどのように見える必要があるかは次のとおりです。

$coursequery = "SELECT CourseId, CourseNo, CourseName, Duration FROM Course
ORDER BY CourseNo";
$courseqrystmt=$mysqli->prepare($coursequery);
// You only need to call bind_param once
$courseqrystmt->execute();
$courseqrystmt->bind_result($dbCourseId,$dbCourseNo,$dbCourseName,$dbDuration);
$courseqrystmt->store_result();
$coursenum = $courseqrystmt->num_rows();
$courseHTML = '';
$courseHTML = '<select name="courses" id="coursesDrop">'.PHP_EOL;
$courseHTML .= '<option value="">Please Select</option>'.PHP_EOL;
$courseDatas = array();
while ( $courseqrystmt->fetch() ) {
    $courseHTML .= sprintf("<option value='%s'>%s - %s</option>",$dbCourseId,$dbCourseNo,$dbCourseName) . PHP_EOL;
    $courseData = array();
    $courseData["CourseId"] = $dbCourseId;
    $courseData["CourseNo"] = $dbCourseNo;
    $courseData["CourseName"] = $dbCourseName;
    $courseData["Duration"] = $dbDuration;
    array_push($courseDatas, $courseData); //error here
}
$courseHTML .= '</select>';

<script type="text/javascript">
    $(document).ready( function(){
        var coursedatas = '<?=json_encode($courseDatas);?>';
        //now we have established some data for the $courseDatas array!
        $('#coursesDrop').change(function()
        {
            var courseId = $(this).val(), coursedata;
            for (var i = 0, l = coursedatas.length; i < l; i++)
            {
                if (coursedatas[i].courseId = courseId) { coursedata = coursedatas[i]; }
            }
            var index = $('#newDuration option[value="' + courseData.Duration + '"]').index('#newDuration option');
            $('#newDuration')[0].selectedIndex = index;
        });
    });
</script>
于 2012-12-02T01:48:26.537 に答える