0

ID と姓を入力として受け取るフォームを持つ課題があります。ID と姓の両方を取得して、テキスト ファイルと照合したいと考えています。一致する場合は、その生徒を表に表示します。一致しない場合は、生徒が見つからないことをエコーし​​ます。これまでのところ、ほとんどすべてが完了していますが、存在する生徒を検索するたびに、見つからない生徒がエコーされます。

ここに私のフォームへのリンクがあります: http://hills.ccsf.edu/~ryan/a7p1.php

IDと姓を取得できる生徒のクラスは次のとおりです。最初の列は学生 ID で、2 番目の列は姓です: http://fog.ccsf.edu/~tboegel/showclass.php

コードは次のとおりです。

<?php                                                                                                                      

$lname = $_REQUEST['lname'];                                                                                               
$id = $_REQUEST['id'];

function DisplayRow($ID) {                                                                                                 
    print "<tr>\n";
    $parts = split(":", $ID);                                                                                              
    for($i=0; $i <=7; $i++) {                                                                                              
    print "<td>$parts[$i]</td>\n";                                                                                     
    }
    print "</tr>\n";                                                                                                       
}

$handle = fopen("class.txt", "r");                                                                                         
$line = fgets($handle);
while(!feof($handle)) {                                                                                                    
    $part = explode(":", $line);                                                                                           
    if($id == $part[0] && $lname == $part[1]) {                                                                            
        echo "<table border='1' width='95%'>                  
        <tr>                                                                                                               
          <th>Student ID</th>                                                                                                
          <th>Student Last Name</th>                                                                                         
          <th>Student First Name</th>
          <th>Midterm 1</th>                                                                                                 
          <th>Midterm 2</th>
          <th>Midterm 3</th>
          <th>Final Exam</th>                                                                                                
          <th>Letter Grade</th>
        </tr>";
        DisplayRow($line);
    } else {
        print "The person you are trying to search for does not exist";
        die;
    }
    $line = fgets($handle);
}
fclose($handle);
print "</table>\n";
?>
4

2 に答える 2

1

while は何かを見つけるまで検索し、その後中断します... eof に到達するとエラーが発生します

<?php                                                                                                                      

$lname = $_REQUEST['lname'];
$id = $_REQUEST['id'];

function DisplayRow($ID) {
    print "<tr>\n";
    $parts = split(":", $ID);
    for($i=0; $i <=7; $i++) {
        print "<td>$parts[$i]</td>\n";
    }
    print "</tr>\n";
}
$found = false;
$handle = fopen("class.txt", "r");
$line = fgets($handle);
while(!feof($handle)) {
    $part = explode(":", $line);
    if($id == $part[0] AND $lname == $part[1]) {
     echo "<table border='1' width='95%'>
        <tr>
            <th>Student ID</th>
            <th>Student Last Name</th>
            <th>Student First Name</th>
            <th>Midterm 1</th>
            <th>Midterm 2</th>
            <th>Midterm 3</th>
            <th>Final Exam</th>
            <th>Letter Grade</th>
        </tr>";

        DisplayRow($line);

        echo "</table>";
        $found = true;
        break; //no need to go further already found the data
    }
    $line = fgets($handle);
}
if($found == false) {
    echo "The person you are trying to search for does not exist";
}
fclose($handle);

?>
于 2012-10-21T19:16:33.270 に答える
1

あなたの問題は単純です.....ループを途中で終了しています

else {
        print "The person you are trying to search for does not exist"; //??
        die;
    }    ^--------------- This your issue (Remove)

SQLiteまたはのようなデータベースを使用することをお勧めしますMySQL

splitまた、減価償却されていることに注意してください。explode代わりに使用することをお勧めします

$parts = split(":", $ID);  
           ^-------------  Change to explode 
于 2012-10-21T19:07:30.363 に答える