我正在使用Ajax提交表单。Form被传递到一个PHP服务器(当前位于localhost上(,该服务器将值输入到MySQL数据库中。问题是它没有传递一个变量,MySQL也不接受NULL。
无论如何,问题是代码的这一部分:
let advM = document.getElementById("advertsM");
var mailme = (advM.checked) ? "Yes":"No";
公平地说,当我用开发工具(F12(查看它时,变量的值要么是"Yes",要么是"No"。
此外,当我使用F12工具查看XHR代码以通过Ajax提交表单时,变量(mailme
(再次为"Yes"或"No"。
xhr3.send (
"HOTSPOT_NAME="+encodeURIComponent(hsname)+
"&HTTP_USER_AGENT="+encodeURIComponent(useragent)+
"&HTTP_ACCEPT_LANGUAGE="+encodeURIComponent(acceptedla)+
"&FIRST_NAME="+encodeURIComponent(firstname)+
"&EMAIL="+encodeURIComponent(useremail)+
"&LANGUAGE="+encodeURIComponent(langua)+
"&LINK_ORIG="+encodeURIComponent(linkorig)+
"&MAILING_LIST"+encodeURIComponent(mailme) //mailme has a value of "Yes"/"No"
);
但是,当没有任何东西提交到MySQL数据库时,我检查了php错误日志,发现了这个错误:
PHP Fatal error: Uncaught mysqli_sql_exception: Column 'MAILING_LIST' cannot be null in C:xampphtdocsHSDBinsert.php:32
Stack trace:
#0 C:xampphtdocsHSDBinsert.php(32): mysqli_stmt->execute()
#1 {main}
thrown in C:xampphtdocsHSDBinsert.php on line 32
PHP代码:
$stmt = $DB->prepare("INSERT INTO users
(HOTSPOT_NAME, HTTP_USER_AGENT, HTTP_ACCEPT_LANGUAGE,
FIRST_NAME, EMAIL, LANGUAGE,
LINK_ORIG, MAILING_LIST) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssssss", $_POST['HOTSPOT_NAME'],
$_POST['HTTP_USER_AGENT'], $_POST['HTTP_ACCEPT_LANGUAGE'],
$cleaner_fname, $cleaner_email,
$_POST['LANGUAGE'], $_POST['LINK_ORIG'], $_POST['MAILING_LIST']);
$stmt->execute(); //line 32
$stmt->close();
我不明白的是,当它应该是一个字符串时,为什么它会传递NULL(正如我在断点中所做的那样,并验证了该值是字符串…(
任何帮助都是受欢迎的,因为我不知道如何解决这个问题。
谢谢
我想您可能忘记了xhr代码中&MAILING_LIST
之后的=
符号:
xhr3.send (
...
"&MAILING_LIST"+encodeURIComponent(mailme)
);
此外,如果您的字段只接受"yes"one_answers"no",则可以将字段默认值设置为"no"(好吧,如果您可以编辑数据库(。