我正在开发一个项目,我的脚本需要允许工作人员在表单中输入表演者/乐队名称,并在提交表单时看到正确的相应电话号码。
我得到的文本文件如下:
Spiders 0392848271
TheBESTband 0482947291
Lauren 0382718319
Queen 0482827183
KateIsland 0373829420
Reposessed 0472478292
HighRollers 0289428372
Mindstorm 0347287492
WhirlyBirds 0272729193
Traceylyly 0303828294
我已经编写了代码来解析文本文件并将值存储到关联数组中,但我需要知道如何从表单获取输入并将其与关联数组匹配并打印相应的电话号码。
<?php
$filename = "performers.txt";
$myfile = fopen($filename, "r") or die("Unable to open file!");
$content = array();
while(!feof($myfile)) {
$content[] = fgets($myfile);
}
fclose($myfile);
$data = array();
foreach($content as $line) {
$pieces = explode(' ', $line);
$data[trim($pieces[0])] = trim($pieces[1]);
}
foreach ($data as $name => $phoneno) {
if (isset($_POST['performer']))
{
$performer = $_POST['performer'];
foreach ($data as $name => $phoneno)
{
if ($name == $performer)
{
echo $phoneno;
}
}
}
}
我的html编码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<h1>Melbourne Performance Hall <br> Performer Phonebook </h1>
<p> Enter the performer or band name with no spaces <br> If found, the phone number will be displayed.</p>
<form action="findPerformerD.php" method="get">
<fieldset>
<p align="left">
<label> Performer/ band name: </label>
<input type="text" name="performer" size="50"> <br>
<input type="submit" name="submit" value="Submit performer name"> </p>
</fieldset>
</form>
</body>
</html>
这就是我所做的,但是当我尝试 html 表单时,它所做的只是给我一个白色页面。
首先,您的表单通过 GET 而非 POST 提交,因此
$_POST
中不会填充任何内容。
你可以改变
<form action="findPerformerD.php" method="get">
到
<form action="findPerformerD.php" method="post">
解决这个问题。
其次,您无缘无故地循环访问
$data
数组两次。这不能帮助您找到匹配的数据。
事实上,尽管你根本没有循环来进行测试: 。相反,您可以尝试直接访问表演者记录 - 这就是使用以表演者姓名作为索引的关联数组的有用之处。
在 PHP 中,将整个
foreach ($data as $name => $phoneno) { ... }
部分替换为:
if (isset($_POST['performer']))
{
if (isset($data[$_POST['performer']])
{
echo "Phone number is: ".$data[$_POST['performer']];
}
else
{
echo "No matching performer found";
}
}
因此,例如,如果您要在表单中输入
Lauren
,您会期望它输出“电话号码是:0382718319”
fscanf()
看起来非常适合这项任务;这将消除额外的循环并更直接地生成所需的查找数组。
$filename = "performers.txt";
$handle = fopen($filename , "r");
while ([$name, $lookup[$name] = fscanf($handle, "%s %s"));
fclose($handle);
作为一般规则,当您向要“写入”服务器(影响数据库或文件系统)的脚本提交数据时,请使用
POST
。仅从服务器“读取”时,使用 GET
。
就您而言,
GET
对我来说似乎合适。
if (!isset($_GET['performer'])) {
echo "Missing/Invalid performer submitted";
} elseif (empty($lookup)) {
echo "Failed to populate lookup";
} elseif (!isset($lookup[$_GET['performer']])) {
echo "Performer not found";
} else {
echo $lookup[$_GET['performer']];
}
使用查找和搜索键总是比在 PHP 中进行值搜索更快。
如果
isset($_GET['performer'])
实际上是 true
,你可能只会费心去读取和解析你的文件。