【问题标题】:Using php to create a form that writes user input to a text file [closed]使用 php 创建将用户输入写入文本文件的表单 [关闭]
【发布时间】:2015-09-27 21:09:42
【问题描述】:

我对 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>

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

【问题讨论】:

  • 看起来,SE domehow 不喜欢像你这样的问题 :-( 这类“概念”问题的主要问题是它们往往有 200 页长而没有可见的结尾。一个简短的概念性问题足以让你继续的答案将是一个很好的答案,但我几乎可以肯定它不会让你开心。我建议在任何地方开始使用谷歌。你肯定会遇到一个新的、更具体的问题,然后回来吧。

标签: php html forms text readfile


【解决方案1】:

这段代码有一个问题:

if (isset($_POST['first_name']) && isset($_POST['last_
name'])) {

您的“last_name”的损坏的 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/>';
}

【讨论】:

  • 谢谢!那成功了。就这样我明白了,我的 if 语句的开放行中的 isset() 不能溢出到第二行吗?我认为php完全忽略了空格?我在这里错过了什么?
  • @DrewTuzson 不客气。不,因为这只是破坏了 POST 数组并且是超全局数组的一部分,而不是标准数组。您可以在拥有 &amp;&amp; 的地方休息,而不是 POST 数组本身。
  • 另一个无法解释的 dv(恶意);很可爱,人们路过时对一个完美的答案说脏话
【解决方案2】:

有几点我可以指出:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2014-02-14
    相关资源
    最近更新 更多