我是非常新的php(3.5周),我正在研究一个我正在学习的PHP课程的项目。我已经在这个PHP文件上工作了好几天,我正处在我的突破点。这是我想要实现的目标:
"创建一个带有表格的文件,该表格可以为保龄球锦标赛登记保龄球。使用单个文本文件,在单独的行中保存每个投球手的信息。包括投球手的姓名,年龄和平均值,以逗号分隔。确保Projects目录对每个人都具有读写权限。"
我已经成功创建了表单,我认为我的变量设置正确。我想我将需要使用数组来存储基于用户输入的每个变量。我试过写这个,我打破了一切。以下是我目前使用的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>List of Bowlers</title>
<meta http-equiv="content-type"
content="text/html; charset=iso-8859-1" />
</head>
<body>
<h1 style="text-transform: uppercase; color: #666666; font-weight: 400; font-size: 1.5em; letter-spacing: 5px;">Register for the upcoming bowling tournament</h1>
<?php
if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {
$BowlerFirstName = addslashes($_POST['first_name']);
$BowlerLastName = addslashes($_POST['last_name']);
$BowlerAge = addslashes($_POST['bowler_age']);
$BowlerAverage = addslashes($_POST['bowler_average']);
$NewBowler = "$BowlerLastName, $BowlerFirstName, $BowlerAge, $BowlerAverage\r\n";
$BowlersFile = "bowlers.txt";
if (file_put_contents($BowlersFile, $NewBowler,
FILE_APPEND) > 0)
echo "<p>" . stripslashes($_POST['first_name']) .
" " . stripslashes($_POST['last_name']) .
" has been registered for the upcoming bowling tournament.</p>\n";
else
echo "<p>An error has occurred in your registration. Please try again.</p>";
} else
echo "<p>To successfully enter the upcoming bowling tournament, enter
your first and last name and click the Register
button.</p>";
?>
<form action="bowling_names.php" method="POST">
<p>First Name: <input type="text" name="first_name"
size="30" /></p>
<p>Last Name: <input type="text" name="last_name"
size="30" /></p>
<p>Age: <input type="text" name="bowler_age"
size="30" /></p>
<p>Average: <input type="text" name="bowler_average"
size="30" /></p>
<p><input type="submit" value="Register" /></p>
</form>
<?php
$BowlersList = readfile("bowlers.txt");
echo $BowlersList;
?>
</body>
</html>
我真的想在这里学习这些概念。如果您愿意提供帮助,请解释我出错的地方。我非常感谢任何帮助!
答案 0 :(得分:1)
这段代码有一个问题:
if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {
你的&#34; last_name&#34;破坏的POST数组将阻止它写入您的文件。
它需要在一起:
if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
然后,确保文本文件存在,否则您将收到警告,例如:(如果您的系统设置为捕获/显示错误,警告,通知)
警告:readfile(bowlers.txt):无法打开流:没有这样的文件或目录......
还要确保它具有适当的写入权限(如果它已经存在)。
通常,644就足够了。作为最后的手段,您可以使用777,但这不是一个安全的设置。
文件夹本身也需要适当的权限才能写入。 755是推荐的设置。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
此时,您的文件内容将在一行中回显。
如果您希望它们在单独的行上,您可以使用以下内容:
$file = fopen("bowlers.txt", "r");
$i = 0;
while (!feof($file)) {
$lines[] = fgets($file);
}
fclose($file);
foreach (lines as $x){
echo $x.'<br/>';
}
答案 1 :(得分:0)
我可以指出一些事情:
1)你不能在这一行上换行:
if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {
不知道您的原始代码是否有此代码,或者只知道此处发布的代码。如果是,请将其删除,使其显示为:
if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
2)函数readfile()
将文件内容直接输出到输出缓冲区,它不返回其内容,它返回读取的字节数。因此,要将整个文件读取到变量,您可以使用file_put_contents()
代替。
3)我想你希望$BowlersList
成为一个数组。要实现这一点,您需要逐行读取文件,然后使用explode()
将每行拆分为一个数组。像这样:
$fileName = "bowlers.txt";
$BowlersList = array();
if (file_exists($fileName)) {
$file = fopen($fileName, "r");
while(!feof($file)){
$line = fgets($file);
if ($line != "") {
$BowlersList[] = explode(", ", $line);
}
}
fclose($file);
} else {
echo "Bowlers file doesn't exist.";
}
echo "<pre>";print_r($BowlersList);echo "</pre>";