使用php创建一个表单,将用户输入写入文本文件

时间:2015-09-27 21:09:43

标签: php html forms text readfile

我是非常新的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>

我真的想在这里学习这些概念。如果您愿意提供帮助,请解释我出错的地方。我非常感谢任何帮助!

2 个答案:

答案 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>";