虽然帖子很成功,但是PHP形式采取空白页面

时间:2018-03-19 19:57:47

标签: php forms csv

我是php的新手,只是尝试将我从另一个页面上的表单中获取的这两个变量附加到csv文件。

<?php
$email = $_POST['Email_Address']; 
$full_name = $_POST['Full_Name']; 
$entry = $full_name;
$entry .= ",";
$entry .= $email;
$file = fopen("contacts.csv","w");
fputcsv($file,explode(',',$entry));
fclose($file);
?>

此脚本确实运行并且文件已写入,但有两个问题:

  1. 它似乎会覆盖现有文件而不是追加。

  2. 点击提交将我带到一个空白页面,其中Url =此php的位置 脚本。

  3. 表单位于弹出窗口中,我只想关闭该窗口而不是将其带到其他地方。

    以下是表格:

    <form method="post" action="php-forms/subscribeform.php">
    <input placeholder="Name" type="text" name="Full_Name" id="Full_Name" required />
    <input placeholder="Email" type="email" name="Email_Address" id="Email_Address" required />
    <input class="formBtn" type="submit" />
    <input class="formBtn" type="reset" />
    </form>
    

    我没有看到任何错误(我启用了错误检查)。

    我如何做到这一点?

2 个答案:

答案 0 :(得分:2)

您在'w'中使用的是'a'而不是fopen(),这就是您的文件始终被覆盖的原因。然后你可以使用一个数组来使用fputcsv()而不是创建一个字符串并将其爆炸,因为如果一个字符串包含一个逗号,你将写三个值,而不是两个。

来自fopen()文档:

  

<强>一个
  仅供写作;将文件指针放在文件的末尾。如果该文件不存在,请尝试创建它。在此模式下,fseek()无效,始终附加写入   的瓦特
  仅供写作;将文件指针放在文件的开头,将文件截断为零长度。如果该文件不存在,请尝试创建它。

// first, check the existance of your variables:
if (isset($_POST['Email_Address']) && isset($_POST['Full_Name'])) 
{
    $email = $_POST['Email_Address']; 
    $full_name = $_POST['Full_Name']; 

    // create an array with your values
    $entry = [$full_name, $email];

    // use 'a' to Append.
    $file = fopen('contacts.csv', 'a');
    fputcsv($file, $entry);
    fclose($file);
}

// then redirect
header("Location: /");
exit;

请注意,您应该在发布之前检查发布值的内容,然后使用它们。

答案 1 :(得分:1)

1)要附加使用&#39; a&#39; flag(http://php.net/manual/en/function.fopen.php

$file = fopen("contacts.csv","a");

2)Yout在提交后被重定向到空白页面,因为当你发布到该URL时,你执行php文件中的逻辑。由于它可能不会输出任何HTML,因此它是一个空白页面。为此,您可以使用javascript异步发布。看这里jQuery AJAX submit form