我有一个php表单,将结果发送到电子邮件,并写入我下载以在openoffice calc中使用的服务器上的csv文件。
邮件工作正常,除了一个方面外,写作也是如此: 当人们使用"输入" key(回车,对吗?)新行被视为openoffice calc中的另一个单元格,或者如果我使用notepad ++打开文件,我会看到不同行上相同字段的行。
如何清理它以便文本区域的内容显示在其单个单元格中?
当人们在字段中使用逗号时我遇到了问题,所以我用管道更改逗号,这似乎修复了那部分。
以下是写入我正在使用的csv文件的代码,如果您需要更多代码,请告诉我。
$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . '|' . PHP_EOL);
fclose($fp);
更新一个
@Marco 谢谢你的代码,我认为它没有关系,但在完整的代码我有修剪功能,它似乎没有做到这一点,以下是一个更完整的处理文件代码,文件结束使用代码将电子邮件发送给用户和管理员 - 我删除了许多字段,但它们与发布的字段基本相同,正如您所猜测的那样。
$required = array('name','lastname','address','city'); // more fields here
$all_okay = TRUE;
$clean_post = array();
$error = '';
foreach($required as $key) {
if (empty($_POST[$key])){
$error .= "<br/>$key is a required field\n";
$all_okay = FALSE;
}else{
$clean_post[$key] = $_POST[$key];
$_SESSION[$key] = $_POST[$key];
}
}
//Name
}elseif(!preg_match("/^[a-zA-Z' -]{2,}/", trim($_POST['name']))){
$error .= "<br /><strong>Name does not pass validation</strong>\n";
//Lastname
}elseif(!preg_match("/^[a-zA-Z' -]{2,}/", trim($_POST['lastname']))){
$error .= "<br /><strong>Lastname does not pass validation</strong>\n";
//Address
}elseif(!preg_match("/^[a-zA-Z0-9' -]{2,}/", trim($_POST['address']))){
$error .= "<br /><strong>Address does not pass validation</strong>\n";
//Continue if no error
}elseif(empty($error)){
// PREPARE THE DATA
$name = Trim(stripslashes($_POST['name']));
$lastname = Trim(stripslashes($_POST['lastname']));
$address = Trim(stripslashes($_POST['address']));
$city = Trim(stripslashes($_POST['city']));
// write to csv file
$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . '|' . PHP_EOL);
fclose($fp);
// PREPARE EMAIL BODY TEXT
$body = '';
$Admin_body = '';
更新两次
@Marco 谢谢,调试器以相同的方式显示,&#34;错误&#34;。 我可能找到了罪魁祸首,虽然我不知道如何解决它,但你可能会。 问题是除了字段分隔符之外没有文本分隔符。
我尝试添加此功能,但是当电子邮件通过文件时没有写入。
fwrite($fp, '"' . $name . '"|"' . $lastname . '"|"' . $address . '"|"' . $city . '"|"' . $country . '"|"'
我剪切了代码,但是到了最后一个字段(评论)。 而且我也没有把所有修剪过的田地都放好,但它们都被整理了。
文本分隔符的概念来自这里: https://forum.openoffice.org/en/forum/viewtopic.php?f=9&t=76545&p=348709#p348709
更新三
好的,如果遇到同样的问题,这是其他人的解决方案 最后一个片段是在正确的轨道上,但我在其中有一个错误,最后是管道和引号,我添加了EOL。
fwrite($fp, '"' . $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . '"' . PHP_EOL);
谢谢Marco,您的帮助和耐心,非常感谢。
答案 0 :(得分:0)
要删除换行符,额外空格等,请使用trim()
函数。
在行尾删除逗号,圆点和其他东西也很有用。
==这是代码==
$name = trim($name);
$lastname = trim($lastname);
$address = trim($address);
$city = trim($city);
$country = trim($country);
$email = trim($email);
$messageone = trim($messageone);
$messagetwo = trim($messagetwo);
$comment = trim($comment);
$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment);
fclose($fp);
许多用户,没有看到额外的空间,认为他们不存在......所以我们程序员必须考虑他们: - )
==更新==
为了更好的调试,您可以将这些行添加到代码中:
// write to csv file
$fp = fopen('/path-to-file/data.csv', 'a');
fwrite($fp, $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment);
fclose($fp);
// your code ends here
echo "<pre>";
echo "[" . $name . '|' . $lastname . '|' . $address . '|' . $city . '|' . $country . '|' . $email . '|' . $phone . '|' . $messageone . '|' . $messagetwo . '|' . $comment . "]";
echo "</pre";
die ("Debugging - the script stops here");
该脚本将显示在文件中写入的相同字符串,并且&#34; die&#34; (停止)。
如果您在上一个]
之前看到回车符,那么它就在$comment
的末尾:我注意到您的代码中只修剪了一些变量。