将Form with Post方法提交给PHP会将其中一个变量作为NULL传递,而它应该是字符串



我正在使用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"(好吧,如果您可以编辑数据库(。

最新更新