如何将 php 表单数据以纯文本文件的形式存储到 Web 服务器?

How to store php form data to a web server in a plain text file?

我的作业要求将 php 表单中的数据条目存储在同一 Web 服务器上的纯文本文件中。我创建了 php 表单页面和纯文本文件,但我不确定如何将两者联系起来。我已经在互联网上搜索并尝试了大约两个小时的多种方法,但没有成功。数据条目也必须累积在纯文本文件中(第一人提交,第二人提交可以看到第一人的提交,依此类推)。

我没有将我尝试过的任何代码添加到纯文本文件中,因为其中 none 可以正常工作,我想(理论上)简化不必尝试和修复代码。我知道纯文本文件需要某种代码来从 php 表单中检索代码,但不确定此时要尝试什么。是的,我为纯文本文件编写了可通过 FileZilla 写入的权限。

这是我的 php 表单代码:

<!DOCTYPE HTML> 
<html>
<head>
<title>Roy Feedback Form Assignment 7</title>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 

<?php
// define variables and set to empty values
$nameErr = $emailErr = $commentErr = $likesErr = $howErr = $rateErr = "";
$name = $email = $comment = $likes = $how = $rate = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
 $nameErr = "Name is required";
} else {
 $name = test_input($_POST["name"]);
}


$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format"; 
}

if (empty($_POST["comment"])) {
 $commentErr = "Comments are required";
} else {
 $comment = test_input($_POST["comment"]);
}

if (empty($_POST["likes"])) {
 $likesErr = "Things you liked is required";
} else {
 $likes = test_input($_POST["likes"]);
}

if (empty($_POST["how"])) {
 $howErr = "How you got to our site is required";
} else {
 $how = test_input($_POST["how"]);
}

 if (empty($_POST["rate"])) {
 $rateErr = "Rating our site is required";
} else {
 $rate = test_input($_POST["rate"]);
}
}

function resetForm($form) {
$form.find('input:text, input:password, input:file, select, textarea').val('');
$form.find('input:radio, input:checkbox')
     .removeAttr('checked').removeAttr('selected');
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?> 

<h2>Roy Feedback Form Assignment 7</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>

E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>

Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<span class="error">* <?php echo $commentErr;?></span>
<br><br>

Things you liked:
<input type="radio" name="likes" value="Site design">Site design
<input type="radio" name="likes" value="Links">Links
<input type="radio" name="likes" value="Ease of use">Ease of use
<input type="radio" name="likes" value="Images">Images
<input type="radio" name="likes" value="Source code">Source code
<span class="error">* <?php echo $likesErr;?></span>
<br><br>

How you got to our site:
<input type="radio" name="how" value="Search engine">Search engine
<input type="radio" name="how" value="Links from another site">Links from another site
<input type="radio" name="how" value="Deitel.com website">Deitel.com website
<input type="radio" name="how" value="Reference from a book">Reference from a book
<input type="radio" name="how" value="Other">Other
<span class="error">* <?php echo $howErr;?></span>
<br><br>

Rate our site:
<select name="rate">
<option value="">- Please Select -</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
<span class="error">* <?php echo $rateErr;?></span>
<br/><br/>

<input type="submit" name="submit" value="Submit"> 
<input type="reset" value="Reset">

</form>

</body>
</html>

这里是纯文本文件代码:

<!DOCTYPE html>
<html>
<head>
    <title>Roy Feedback Results Assignment 7</title>
</head>
<body>



</body>
</html>

更新 1 所以我仍然遇到问题(抱歉,我知道这就像试图教葡萄柚 PHP)。因此,当我使用以下代码时,纯文本页面上没有任何反应(因为数据没有存储在我指定的位置):

function file_write($data, $feedback_results_html_only){
if(is_readable($feedback_results_html_only)){
    if(is_string($data)){
        return file_put_contents($feedback_results_html_only, $data, FILE_APPEND | LOCK_EX);//this appends the new data to the file and locks it while doing so to prevent multiple access to thje file at the same time.
    }//return an error message if the data isnt a string
}//return an error message if the file doesnt exist or isnt readable
}

然而,当我使用以下代码时,它至少将 "John Smith" 名称放入文件中(这是我第一次真正让它发挥作用,编码万岁!):

<?php
$file = 'feedback_results_html_only.php';
// Open the file to get existing content
$current = file_get_contents($file);
// Append a new person to the file
$current .= "John Smith\n";
// Write the contents back to the file
file_put_contents($file, $current);
?>

我还知道我没有在第一个代码示例(更新 1 中)的 "feedback_results_html_only" 上使用“.php”,因为它会产生错误。我可以尝试类似第二个示例(在更新 1 中)的方法来让它工作吗?

$file = 'feedback_results_html_only.php'

使用file_put_contets

$relative_or_absolute_path = '../'; //relative folder up
$ext = '.txt'; //file can be with no extension at all or even *.php
$filename = 'plain_log';

$contents = '';
foreach($users as $user){
   $contents .= $user . '\n'; //a newline  
}

//execute

file_put_contents($relative_or_absolute_path.$filename.$ext, $contents, FILE_APPEND);

//FILE_APPEND is an optional flag // otherwise it will rewrite

您正在寻找 file_put_contents()。只需收集数据并将其写入您的文件即可。精炼代码如下:

PS: 您可以考虑先从 php 代码开始:-)

<?php
  // define variables and set to empty values
  $nameErr = '';
  $emailErr = '';
  $commentErr = '';
  $likesErr = '';
  $howErr = '';
  $rateErr = '';
  $name = '';
  $email = '';
  $comment = '';
  $likes = '';
  $how = '';
  $rate = '';

if ($_SERVER["REQUEST_METHOD"] == "POST"){
   if (empty($_POST["name"])) {
     $nameErr = "Name is required";
   } else {
     $name = test_input($_POST["name"]);
   }


  $email = test_input($_POST["email"]);
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $emailErr = "Invalid email format"; 
  }

  if (empty($_POST["comment"])) {
    $commentErr = "Comments are required";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["likes"])) {
    $likesErr = "Things you liked is required";
  } else {
    $likes = test_input($_POST["likes"]);
  }

  if (empty($_POST["how"])) {
    $howErr = "How you got to our site is required";
  } else {
    $how = test_input($_POST["how"]);
  }

  if (empty($_POST["rate"])) {
    $rateErr = "Rating our site is required";
  } else {
    $rate = test_input($_POST["rate"]);
  }
}

function resetForm($form) {
$form.find('input:text, input:password, input:file, select, textarea').val('');
$form.find('input:radio, input:checkbox')
     .removeAttr('checked').removeAttr('selected');
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}



 //concatenate the data, then format and validate it then use this function to write it to your plain text file

function file_write($data, $pathtoplaintxtfile){
        if(is_string($data)){
            return file_put_contents($pathtoplaintxtfile, $data, FILE_APPEND | LOCK_EX);//this appends the new data to the file and locks it while doing so to prevent multiple access to thje file at the same time.
        }//return an error message if the data isnt a string
}
    ?>


    <!DOCTYPE HTML> 
    <html>
        <head>
            <title>Roy Feedback Form Assignment 7</title>
            <style>
                .error {color: #FF0000;}
            </style>
        </head>
       <body>
<h2>Roy Feedback Form Assignment 7</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>

E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>

Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<span class="error">* <?php echo $commentErr;?></span>
<br><br>

Things you liked:
<input type="radio" name="likes" value="Site design">Site design
<input type="radio" name="likes" value="Links">Links
<input type="radio" name="likes" value="Ease of use">Ease of use
<input type="radio" name="likes" value="Images">Images
<input type="radio" name="likes" value="Source code">Source code
<span class="error">* <?php echo $likesErr;?></span>
<br><br>

How you got to our site:
<input type="radio" name="how" value="Search engine">Search engine
<input type="radio" name="how" value="Links from another site">Links from another site
<input type="radio" name="how" value="Deitel.com website">Deitel.com website
<input type="radio" name="how" value="Reference from a book">Reference from a book
<input type="radio" name="how" value="Other">Other
<span class="error">* <?php echo $howErr;?></span>
<br><br>

Rate our site:
<select name="rate">
<option value="">- Please Select -</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
<span class="error">* <?php echo $rateErr;?></span>
<br/><br/>

<input type="submit" name="submit" value="Submit"> 
<input type="reset" value="Reset">

</form>

</body>
</html>

编辑:file_put_contents() 自动创建一个文件,如果它不存在,删除 is_readable 文件检查。

编辑:用法 -

$data = $name.$email.$comment.$likes.$how.$rate.
'This is just test data. If no other data is visible, then you didnt fill them out';
file_write($data, 'feedback_results_html_only.php')