使用php创建将用户输入写入文本文件的表单

使用php创建将用户输入写入文本文件的表单,php,html,forms,text,readfile,Php,Html,Forms,Text,Readfile,我对php非常陌生(3.5周),我正在参加一个php课程的项目。我已经在这个php文件上工作了好几天,我已经到了崩溃的边缘。以下是我努力实现的目标: 使用为保龄球比赛注册保龄球手的表单创建文档。使用一个文本文件将每个保龄球手的信息保存在单独的行中。包括保龄球手的姓名、年龄和平均年龄,用逗号分隔。确保项目目录对每个人都有读写权限 我已经成功地创建了表单,并且我认为我已经正确地设置了变量。我想我需要使用一个数组来存储基于用户输入的每个变量。我试过写这篇文章,但我打破了一切。以下是迄今为止我的代码:

我对php非常陌生(3.5周),我正在参加一个php课程的项目。我已经在这个php文件上工作了好几天,我已经到了崩溃的边缘。以下是我努力实现的目标:

使用为保龄球比赛注册保龄球手的表单创建文档。使用一个文本文件将每个保龄球手的信息保存在单独的行中。包括保龄球手的姓名、年龄和平均年龄,用逗号分隔。确保项目目录对每个人都有读写权限

我已经成功地创建了表单,并且我认为我已经正确地设置了变量。我想我需要使用一个数组来存储基于用户输入的每个变量。我试过写这篇文章,但我打破了一切。以下是迄今为止我的代码:

<!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>

投球手名单
为即将到来的保龄球锦标赛注册
名字:

姓氏:

年龄:

平均值:


我真的在尝试学习这里的概念。如果你愿意提供帮助,请解释我的错误所在。我非常感谢任何帮助

这段代码有一个问题:

if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {
而你的“姓氏”的破帖子数组将阻止它写入你的文件

它需要结合在一起:

if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
然后,确保它的文本文件存在,否则您可能会收到如下警告:(如果您的系统设置为捕获/显示错误、警告、通知)

警告:readfile(bowlers.txt):无法打开流:没有这样的文件或目录

还要确保它具有适当的写入权限(如果它已经存在)

  • 通常,644就足够了。作为最后手段,您可以使用777,但这不是一个安全的设置

  • 文件夹本身也需要适当的权限才能写入。755是建议的设置

添加到文件的顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

这段代码有一个问题:

if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {
而你的“姓氏”的破帖子数组将阻止它写入你的文件

它需要结合在一起:

if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
然后,确保它的文本文件存在,否则您可能会收到如下警告:(如果您的系统设置为捕获/显示错误、警告、通知)

警告:readfile(bowlers.txt):无法打开流:没有这样的文件或目录

还要确保它具有适当的写入权限(如果它已经存在)

  • 通常,644就足够了。作为最后手段,您可以使用777,但这不是一个安全的设置

  • 文件夹本身也需要适当的权限才能写入。755是建议的设置

添加到文件的顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

我可以指出以下几点:

1) 此行不能有换行符:

if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {
不知道你的原始代码是否有它,或者只是发布在这里的代码。如果有,请将其移除,使其显示:

if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
2) 函数将文件内容直接输出到输出缓冲区,它不返回其内容,而是返回读取的字节数。因此,要将整个文件读入一个变量,您可以使用它

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>";
$fileName=“bowlers.txt”;
$BowlersList=array();
如果(文件_存在($fileName)){
$file=fopen($fileName,“r”);
而(!feof($file)){
$line=fgets($file);
如果($line!=“”){
$BowlersList[]=分解(“,”,$line);
}
}
fclose($文件);
}否则{
echo“Bowlers文件不存在。”;
}
回声“;打印(BowlersList);回声“;

我可以指出以下几点:

1) 此行不能有换行符:

if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {
不知道你的原始代码是否有它,或者只是发布在这里的代码。如果有,请将其移除,使其显示:

if (isset($_POST['first_name']) && isset($_POST['last_name'])) {
2) 函数将文件内容直接输出到输出缓冲区,它不返回其内容,而是返回读取的字节数。因此,要将整个文件读入一个变量,您可以使用它

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>";
$fileName=“bowlers.txt”;
$BowlersList=array();
如果(文件_存在($fileName)){
$file=fopen($fileName,“r”);
而(!feof($file)){
$line=fgets($file);
如果($line!=“”){
$BowlersList[]=分解(“,”,$line);
}
}
fclose($文件);
}否则{
echo“Bowlers文件不存在。”;
}
回声“;打印(BowlersList);回声“;

谢谢!这就成功了。我明白了,我不能让if语句的开放行中的isset()溢出到第二行?我以为php完全忽略了空格?我在这里错过了什么?@drewtuzzon不客气。不,因为这只是破坏了POST数组,是超全局数组的一部分,而不是标准数组。你可以在你有
&&
的地方休息,而不是POST数组本身;可爱的人们路过这里,对一个完美的回答说大话谢谢!这就成功了。我明白了,我不能让if语句的开放行中的isset()溢出到第二行?我以为php完全忽略了空格?我在这里错过了什么?@drewtuzzon不客气。不,因为这只是破坏了POST数组,是超全局数组的一部分,而不是标准数组。您可以在有
&
的地方使用中断,而不是POST数组本身。a