将带有 Post 方法的表单提交给 PHP 将其中一个变量作为 NULL 传递,而它应该是一个字符串

我正在使用 Ajax 提交表单。表单被传递到 PHP 服务器(当前位于 localhost),该服务器将值输入 MySQL 数据库。问题是它没有传递一个变量,并且 MySQL 不接受 NULL。


无论如何,问题在于这部分代码:


let advM = document.getElementById("advertsM");

var mailme = (advM.checked) ? "Yes":"No"; 

好吧,公平地说,当我用开发工具(F12)查看它时,变量的值要么是“是”,要么是“否”。


此外,当我使用 F12 工具查看通过 Ajax 提交表单的 XHR 代码时,变量 ( mailme) 又是“是”或“否”。


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:\xampp\htdocs\HS\DBinsert.php:32

Stack trace:

#0 C:\xampp\htdocs\HS\DBinsert.php(32): mysqli_stmt->execute()

#1 {main}

  thrown in C:\xampp\htdocs\HS\DBinsert.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 (正如我在断点中放置并验证该值是一个字符串......)


欢迎任何帮助,因为我不知道如何解决这个问题。


白板的微信
浏览 115回答 1
1回答

喵喵时光机

我想你可能在你的 xhr 代码中忘记了一个=符号:&MAILING_LISTxhr3.send   (     ...     "&MAILING_LIST"+encodeURIComponent(mailme));此外,如果您的字段只接受“是”和“否”,例如,您可以将字段默认值设置为“否”(好吧,如果您可以编辑数据库)。
打开App,查看更多内容
随时随地看视频慕课网APP