繁体   English   中英

在PHP表单上,下拉列表显示.txt文件中的错误数据

[英]On PHP form, drop down list displays wrong data from .txt file

我查看了与此相关的帖子,发现其中一个让我以为自己做错了。 我对PHP非常新手,但愿意学习。

我需要有一个index.php表单,其中有一个用于学生姓名的输入框,一个用于学生编号的输入框以及课程的下拉列表。

我的PHP脚本不允许包含数据-必须从非可选的.txt文件中检索数据。

我有courses.txt,其中有四个课程名称,每个名称都有自己独特的课程代码和可注册的最大人数。 course.txt的内容:动画电影设计:AFD-250:6数字雕塑:DS-410:4动画历史:HA-240:6视觉效果:VE-298:4

我的coursesfinal.txt已转换为逗号分隔文件。 coursefinal.txt的内容:动画电影设计,AFD-250、6数字雕塑,DS-410、4动画历史,HA-240、6视觉效果,VE-298、4

目前,两个输入框可以正常工作。 我的问题是在下拉列表中。 我希望它显示课程名称,然后显示一个空格,然后显示课程代码。 目前,它仅显示课程代码。 我也不明白为什么它显示第二个数据字段。

谢谢。

index.php代码...

 <?php // Convert courses.txt file to comma delimited file coursesfinal.txt $in = "courses.txt"; $out = "coursesfinal.txt"; $IN = fopen ($in, 'r') or die ("$in cannot be opened for reading."); $OUT = fopen ($out, 'w') or die ("$out cannot be opened for writing."); if (flock($OUT, LOCK_EX)) { while ($inline = fgets ($IN) ) { $splitarray = explode (":", $inline); $outline = implode(",", $splitarray); fputs ($OUT, $outline); } flock($OUT, LOCK_UN); } fclose ($IN); fclose ($OUT); // Search coursesfinal.txt file for course to match user input $datafile = "coursesfinal.txt"; // If selection has been made, find a match if (isset ($_POST['courses'])) { $courses = strip_tags ($_POST['']); $DB = fopen ($datafile, 'r') or die ("$datafile cannot be opened for reading."); $found = FALSE; while ($record = fgets ($DB) and ! $found) { $field = explode (",", htmlentities (trim ($record))); $found = $courses === $field[0]; } fclose ($DB); if ($found) { echo "<p>You have selected: $field[0] $field[1]</p>\\n"; } } ?> <html> <head> <title>Registration Form</title> <style> body{background-color: #ffffe6; width:610px;} h1 {color: #29a3a3;} .inputbox {padding: 7px; border: #F0F0F0 2px solid; border-radius: 4px;} .btn {padding: 10px;background-color: #29a3a3; border: solid thin #000000; color: #FFF; font-weight: bolder; cursor: pointer;} </style> </head> <body> <h1>Course Registration</h1> <form method="post" action="index.php"> <fieldset><legend><strong>Student Information</strong></legend> <dl> <dt>Student Name:</dt> <dd><input class="inputbox" name="studentname" type="text" id="studentname" required autofocus placeholder="Please enter your first and last name" tabindex="10" size="50"></dd> <br> <br> <dt for="number">Student Number:</dt> <dd><input class="inputbox" name="studentnumber" type="text" required id="studentnumber" placeholder="Please enter using the following format: PX-03-046" tabindex="20" size="50"></dd> </dl> <br> </fieldset> <br> <fieldset><legend><strong>Available Courses</strong></legend> <br> Select a Course: <select name="course"> <option value="-1" selected>Select From...</option> <?php // Generate the form $DB = fopen ($datafile, 'r') or die ("$datafile cannot be opened for reading."); while ($record = fgets ($DB) ) { $field = explode (",", htmlentities (trim ($record))); echo " <option value=\\"$field[0]\\">$field[1]</option>\\n"; } fclose ($DB); echo " </select>\\n"; ?> <br> <br> <br> <br> <br> <br> </fieldset> <div> <p> <input name="reset" type="reset" tabindex="40" value="Clear Form" class="btn"> <input name="submit" type="submit" tabindex="50" value="Submit Form" class="btn"> </p> </div> </form> </body> </html> 

请参阅以下代码:

while ($record = fgets ($DB) ) { 
   $field = explode (",", htmlentities (trim ($record))); 
   echo " <option value=\"$field[0]\">$field[1]</option>\n"; 
}

如果使用一个参数调用fgets() ,它将继续读取直到找到换行符或EOF(以先到者为准)。 确保您格式化coursesfinal.txt,例如:

Animation Film Design,AFD-250
6 Digital Sculpture,DS-410
4 History of Animation,HA-240,
6 Visual Effects,VE-298

然后你可以

while ($record = fgets ($DB) ) { 
   $field = explode (",", htmlentities (trim ($record))); 
   echo " <option value=\"$field[1]\">$field[0] $field[1]</option>\n"; 
}

请注意,带有逗号分隔符的explode()会将字符串“ Animation Film Design,AFD-250”拆分为数组

$field[0] == "Animation Film Design"
$field[1] == "AFD-250"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM