【发布时间】:2021-10-27 12:39:15
【问题描述】:
除了使用 general_api 将潜在客户发送到网络之外,我还想要表单,以将数据保存在工作表上。 在不写入工作表数据的情况下,wf_general_api 表单操作可以正常工作。如果我在表单上添加“name =”,它会正确保存工作表数据,但 wf_general_api 文件不再有效。
<form method="post" accept-charset="utf-8" role="form" name="gsheet" action="general_api.php">
这是general_api.php,用于向网络发送线索:
<?php
function clean_phone_number($value){
if(substr($value,0,4) == '0039')
$value = substr($value,4);
$value = preg_replace('~\D~', '', $value);
$value = preg_replace('/\s+/', '', $value);
if(strlen($value)>10 && substr($value, 0, 2) == '39' && substr($value, 2, 1) == '3')
$value = substr($value,2);
return $value;
}
function clean_zipcode($value){
$value = preg_replace('~\D~', '', $value);
$value = preg_replace('/\s+/', '', $value);
return $value;
}
$post_data = [
'source_id' => SOURCE_ID,
'aff_sub1' => '',
'aff_sub2' => '',
'name' => $_POST['name'],
'phone' => clean_phone_number($_POST['phone']),
'quantity' => $_POST['quantity'],
'address' => $_POST['address'],
'city' => $_POST['city'],
'zipcode' => clean_zipcode($_POST['zipcode']),
'notes' => $_POST['notes'],
'doubleCheck' => 1
];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => SEND_URL,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => http_build_query($post_data),
CURLOPT_HTTPHEADER => array(
'Content-Type: application/x-www-form-urlencoded'
)
));
$response = curl_exec($curl);
curl_close($curl);
$json = json_decode($response,true);
$status = $json['status'];
if($status == 'double')
$redirection_url = $json['check_url'];
else
$redirection_url = THANKYOU_URL;
//header('Location: '.$redirection_url);
echo "<script>top.location.href='$redirection_url';</script>";
这是保存数据的gsheet:
const scriptURL = 'https://script.google.com/macros/s/xxxxx/exec'
const form = document.forms['gsheet']
form.addEventListener('submit', e => {
e.preventDefault()
fetch(scriptURL, { method: 'POST', body: new FormData(form)})
})
如果我添加 name 属性,表单操作将不再起作用。如果我删除它,它会恢复工作,但不会将数据保存在工作表上。我该如何解决?
【问题讨论】:
-
问题不在于名称,而在于
e.preventDefault()。当 javascript 工作时,它会提交给 Google,但它会阻止默认操作。您可以保留该行以确保提取工作正常,但您需要告诉它之后提交表单。 -
非常感谢您让我知道错误在哪里,但是之后我该如何提交表单呢?
标签: javascript php forms google-sheets action