0

我的页面允许用户从 .php 脚本打开的列表中选择他们希望参加的课程列表。用户选择的选项被设置为名为 courses[] 的复选框数组。一个 Result.php,选择的选项通过 RegEx 发送,以提取课程名称和每门课程所需的时间。课程名称仅在小时数相加时输出,以显示每周所需的总小时数。

我的问题是,我已经修复了所有语法,但是当我调用我的 printf 格式时没有返回任何内容。我尝试了 var_dump($courses) 和 ($courseLine),结果显示为 NULL 和 NULL。我想我在 Registration.php 上有一个逻辑错误,但我找不到在哪里。 下面是我的 Result.php,我将包含课程列表文本文件的示例

<table><tr><th>Courses</th><th>hours per Week</th></tr>
<?php
                $courses = $_GET['courses'];
                $courseHoursRegEx = "/\s[0-9]{1,2}\shrs/w/";//needs work
                $courseNameRegEx = "/[a-zA-Z]{3}[0-9]{4}[A-Z]{0,1}\s?/[a-zA-Z]{3,40}/";

    function GetCourseHours($couseLine)
    {
        if(!preg_match($courseHoursRegEx, $courseLine))
            {
                return $courseHour;
            }
        $totalHours += $courseHour;
    }
    function GetCourseName($courseLine)
    {
        if(!preg_match($courseNameRegEx, $courseLine))
            {
                return $courseInfo;
            }
    }
                foreach($courses as $course)
                        {
                            $theCourse = GetCourseName($course);
                            $theHours = GetCourseHours($course);
                        }
                for($i = 1; $i <= $courses; ++$i)
                {
                    printf("<tr><td>\%</td><td>\%</td></tr>", $theCourse, $theHours);
                }
?>
                <tr>
                <th>Total Hours</th><td><?php echo $totalHours ?>        </td></tr>
                </table>

这是我的起始页面,因此您知道使用了哪些值(由于脚本的长度,我没有包括验证函数。)

    </table>
<?php 
    $courseFile = fopen("CourseList.txt", "r");
    $courseHoursRegEx = "/\s[0-9]{1,2}\shrs/w/";
    $courseNameRegEx = "/[a-zA-Z]{3}[0-9]{4}[A-Z]{0,1}\s?/[a-zA-Z]{3,40}/";

    while(!feof($courseFile))
        {
            $courseLine = fgets($courseFile);
            echo "<input type='checkbox' name='courses[]' value='$courseLine'/> $courseLine <br />";
        }
        fclose($courseFile);
    function GetCourseHours($courseLine)
    {
        if(!preg_match($courseHoursRegEx, $courseLine))
            {
                return $courseLine;
            }
    }
    function GetCourseName($courseLine)
    {
        if(!preg_match($courseNameRegEx, $courseLine))
            {
                return $courseLine;
            }
    }
?>

这是带有课程信息的文本文件的示例

CON8101 Residential Building/Estimating 16 hrs/w 
CON8411 Construction Materials I 4 hrs/w 
CON8430 Computers and You 4 hrs/w 
MAT8050 Geometry and Trigonometry 4 hrs/w 
SAF8408 Health and Safety 5 hrs/w 
4

2 回答 2

0

=+不是有效的 php 运算符尝试+=如果您使用数字,请尝试+=如果字符串使用.=. 希望有效。

于 2012-09-29T02:11:16.727 回答
0

虽然没有具体回答您的问题,但请尝试在文件的每一行上使用以下正则表达式;

preg_match('/(?P<courseid>[A-Z0-9]+) (?P<coursename>.*) (?P<coursehours>\d+) hrs/',$text,$matches);

这将在这种情况下创建一个数组$matches,然后您可以更随意地引用元素

Array
(
    [0] => CON8101 Residential Building/Estimating 16 hrs
    [courseid] => CON8101
    [1] => CON8101
    [coursename] => Residential Building/Estimating
    [2] => Residential Building/Estimating
    [coursehours] => 16
    [3] => 16
)

这将极大地简化您的代码和附加功能。

于 2012-09-28T20:38:55.103 回答