我正在为我的学校计算项目创建一个网站。由于学校无法使用mySQL或SQLite,我不得不使用CSV文件。
我的问题是我已经创建了一个CSV文件,其中包含我手动输入的值进行测试,我希望能够将用户输入的详细信息添加到同一CSV文件的末尾。
用户.csv:
ID,Username,Email,DateOfBirth,Password,UserScore
1,Test,Test@Test.com,01/01/2000,Test,10
2,Alfie,Alfie@gmail.com,22/02/1000,1234,0
当前 PHP 代码:
<?php
session_start();
if(isset($_POST['submit'])) {
$submittype = $_POST['submit'];
if($submittype == "register" && (empty($_POST['username']) || empty($_POST['email']) || empty($_POST['dateOfBirth']) || empty($_POST['password']) || empty($_POST['confirmPassword']))) {
die("ERROR|Please fill out all of the fields.");
} else {
$userID = 0; //TODO: Increment
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$dateOfBirth = $_POST['dateOfBirth'];
$confirmPassword = $_POST['confirmPassword'];
$userScore = 0;
$data = $userID.",".$username.",".$email.",".$dateOfBirth.",".$password.",".$userScore;
$file = fopen('Users.csv','a');
fputcsv($file, $data);
fclose($file);
}
}
?>
当你使用fputcsv
时,你需要使用array
而不是string
。我还用这一行递增了$userId
:$userId = count(file($file));
它将文件行读取到数组中,对其进行计数,因此它将始终递增。
我还对您的代码进行了一些改进,清除了未使用的变量。你可以直接使用$_POST["anything"]
,你不需要创建另一个变量,你不操作什么。
检查这个。
<?php
session_start();
if (isset($_POST['submit'])) {
$submittype = $_POST['submit'];
if ($submittype == "register" && (empty($_POST['username']) || empty($_POST['email']) || empty($_POST['dateOfBirth']) || empty($_POST['password']) || empty($_POST['confirmPassword']))) {
die("ERROR|Please fill out all of the fields.");
} else {
$file = 'Users.csv';
$userId = count(file($file));
//$userID = 0; //TODO: Increment
$userScore = 0;
$data = array($userId, $_POST["username"], $_POST["email"], $_POST["password"], $_POST["dateOfBirth"], $_POST["confirmPassword"], 0);
$fh = fopen($file, 'a');
fputcsv($fh, $data, ",");
fclose($fh);
}
}
还有另一种方法,检查MBaas
的答案。
替换
$file = fopen('Users.csv','a');
fputcsv($file, $data);
fclose($file);
有了这个:
file_put_contents('Users.csv' , $data . "'n", FILE_APPEND);