使用MySQL和PHP将数据从用户表单插入/记录到数据库中

使用MySQL和PHP将数据从用户表单插入/记录到数据库中,php,mysql,database,Php,Mysql,Database,我一直在尝试将数据插入我的数据库。我不断收到一个错误,它无法识别设置的内容。它认为这是无效的:if(isset($\u POST['user\u email'])和isset($\u POST['user\u choice']){,因此它跳过并显示通过的值的我的回音。 这是我的HTML文件: <?php require_once("../inc/config.php"); $emailAddress =""; if(isset($_POST["user_email"])) {

我一直在尝试将数据插入我的数据库。我不断收到一个错误,它无法识别设置的内容。它认为这是无效的:
if(isset($\u POST['user\u email'])和isset($\u POST['user\u choice']){
,因此它跳过并显示通过的值的我的回音。 这是我的HTML文件:

<?php 
require_once("../inc/config.php");

$emailAddress ="";
if(isset($_POST["user_email"])) {
    $emailAddress = trim($_POST["user_email"]);
  $newsletter = trim($_POST["emailLetter"]);
  if($emailAddress != "") {
    require_once(ROOT_PATH . "inc/images.php");
    $results = capture_email($emailAddress, $newsletter);
  } 
  var_dump($results);
  exit();
}
?>

  <footer id="footer-class">
  <form id="footer-form" method="post" action="">
    <fieldset>
      <legend id="footer-legend">Sign up for...</legend>
      <input type="radio" name="emailLetter" id="PC" value="PC" checked><label class="footerlabel" for="PC">Computer</label>
      <input type="radio" name="emailLetter" id="Photo" value="Photo"><label class="footerlabel" for="Photo">Photo</label>
      <legend id="footer-legend">Newsletter!</legend>
      <input id="footer-email" type="email" name="user_email" placeholder="Enter your email address here!" required>
      <button type="submit" id="footer-button">Subscribe</button>
    </fieldset>
    <p>I won't spam you. Promise</p>
  </form>
</footer>
</body>
</html>

注册。。。
电脑类
照片
新闻稿
订阅
我不会给你发垃圾邮件的,我保证

以下是我的PHP函数:

<?php
function capture_email($user_email, $user_choice) {
  require(ROOT_PATH . "inc/database.php");
  if (isset($_POST['$user_email']) AND isset($_POST['$user_choice'])) {
    try {
      $newsletter = $_POST["$user_choice"];
      $email_address = $_POST["$user_email"];
      $results = $db->prepare("INSERT INTO userinfo (Email, userOption) VALUES (?, ?)");
      $results->bindparam(1, $email_address);
      $results->bindparam(2, $newsletter);
      $results->execute();
    } catch (Exception $e) {
      var_dump($e);
      exit();
    }
} else {
  echo "Oops, something went wrong. Here is the user Email: " . $user_email . "<br>Here is the user choice: " . $user_choice;
  exit();
}
}

尝试此操作并重新运行代码

if(isset($_POST['user_email']) AND isset($_POST['user_choice'])) { ... }

出现语法错误:

if (isset($_POST['$user_email']) AND isset($_POST['$user_choice'])) {
替换为:

if (isset($_POST['user_email']) AND isset($_POST['user_choice'])) {
同时更新try块:

try {
  $newsletter = $_POST["user_choice"];
  $email_address = $_POST["user_email"];
  $results = $db->prepare("INSERT INTO userinfo (Email, userOption) VALUES (?, ?");
  $results->bindparam(1, $email_address);
  $results->bindparam(2, $newsletter);
  $results->execute();
} catch (Exception $e) {
  var_dump($e);
  exit();
}

您可以这样使用此条件:

if (isset($user_email) AND isset($user_choice)) {
try {
      $newsletter = $user_choice;
      $email_address = $user_email;
      $results = $db->prepare("INSERT INTO userinfo (Email, userOption) VALUES (?, ?");
      $results->bindparam(1, $email_address);
      $results->bindparam(2, $newsletter);
      $results->execute();
    } catch (Exception $e) {
      var_dump($e);
      exit();
    }
}

因为在调用此函数capture\u email()时,您传递了两个修剪的参数。

您不需要发布它。它已作为参数传递

 if (isset($user_email) && isset($user_choice)) {
您还必须更改完整代码

<?php
function capture_email($user_email, $user_choice) {
  require(ROOT_PATH . "inc/database.php");
  if (isset($user_email) AND isset($user_choice) {
    try {
      $newsletter = $user_choice;
      $email_address = $user_email;
      $results = $db->prepare("INSERT INTO userinfo (Email, userOption) VALUES (?, ?)");
      $results->bindparam(1, $email_address);
      $results->bindparam(2, $newsletter);
      $results->execute();
    } catch (Exception $e) {
      var_dump($e);
      exit();
    }
} else {
  echo "Oops, something went wrong. Here is the user Email: " . $user_email . "<br>Here is the user choice: " . $user_choice;
  exit();
}
}

我稍微更改了您的函数。您传递的是post而不是变量,因此会导致错误。但这应该可以工作

function capture_email($user_email, $user_choice) {
  require(ROOT_PATH . "inc/database.php");

/*
*You passing the POST, but your surpose to pass thru the var from your function.
*
**/
  if (isset($user_email) AND isset($user_choice) {
    try {
      $newsletter = $user_choice;
      $email_address = $user_email;

/**
**Also Sorted your issue out with your speech mark's
**
**/

      $results = $db->prepare("INSERT INTO userinfo (Email, userOption) VALUES (?, ?)");
      $results->bindparam(1, $email_address);
      $results->bindparam(2, $newsletter);
      $results->execute();
    } catch (Exception $e) {
      var_dump($e);
      exit();
    }
} else {
  echo "Oops, something went wrong. Here is the user Email: " . $user_email . "<br>Here is the user choice: " . $user_choice;
  exit();
}
function capture\u email($user\u email,$user\u choice){
require(ROOT_PATH.“inc/database.php”);
/*
*您正在传递POST,但是您的SUPPOSE需要从函数中传递var。
*
**/
if(isset($user\u email)和isset($user\u choice){
试一试{
$newsletter=$user\u choice;
$email\u address=$user\u email;
/**
**还用你的语言标记解决了你的问题
**
**/
$results=$db->prepare(“插入到userinfo(电子邮件,userOption)值(?,)”;
$results->bindparam(1,$email\u地址);
$results->bindparam(2$newsletter);
$results->execute();
}捕获(例外$e){
var_dump($e);
退出();
}
}否则{
echo“哎呀,出了点问题。这是用户电子邮件:.$user\u Email。”
这是用户选择:.$user\u choice; 退出(); }
将其更改为此,会出现另一个错误注意:未定义索引:C:\xampp\htdocs\inc\images.php中的PC,第130行注意:未定义索引:nick@nick在C:\xampp\htdocs\inc\images.php中的第131行object(PDOException)#3(8){[“message”:protected]=>string(202)“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法中有一个错误;…发生了其他一些错误,所以我100%确定,它进入了if条件。我在StackUser2014更新了它。检查了一次。我也更新了它显示了您的更改,并且它返回了一个SQL语法错误:object(PDOException)#3(8){[“message:protected]=>string(202)”SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在第1行“[”字符串“:“Exception”:private]=>string(0)”“[“code”:protected]=>string(5)“42000”[“file”:protected]=>string(30)附近使用的正确语法你在insert语句中写了错误的代码。我更新了它。检查一下@StackUser2014Ah太好了!这就是问题所在。谢谢你的帮助。尝试了之后,我仍然收到相同的错误,它认为这行,`if(isset($\u POST['user\u email'])和&isset($\u POST['user\u choice']){`是false,所以跳到“echo”“哦,出了点问题。这是用户电子邮件…”错误在您的html代码中没有“用户选择”的输入。因此,您需要在此处添加输入,或者可以从if条件中删除。我已更新了上面的内容,以显示在何处进行了更改。