繁体   English   中英

使用PDO和PHP将数据从表单插入MySQL数据库

[英]Using PDO and PHP to insert data from form into MySQL database

我目前正在从表单“ form.php”中获取数据,并将其发送到“ index.php”中,在这里我正在使用PDO语句将这些值插入MySQL数据库。 在MySQL中,我进行了设置,其中firstname和lastname不能为null,因为数据将被提交回网站,其中名字+姓氏=全名,并且该全名在支持者列表中弹出。

我的问题是

如果我不想将MySQL设置为接受NULL值,那么我应该在PHP中进行哪些更改以接受来自表单的值,然后将其提交给数据库,并将该值附加到该特定用户的实例上? 我尝试了php.net/docs,其他StackOverflow问题并未完全解决我的难题,我们将不胜感激任何帮助

形成

表格

<form action="../index.php" method="post">
      <fieldset class="form-group">
      <label for="firstname">First Name</label>
      <input type="text" name="firstname" class="form-control" id="firstname" placeholder="First Name">
    </fieldset>


    <fieldset class="form-group">
      <label for="lastname">Last Name</label>
      <input type="text" name="lastname" class="form-control" id="lastname" placeholder="Last Name">
    </fieldset>


        <fieldset class="form-group">
          <label for="exampleInputEmail1">Email address</label>
          <input type="text" name="email" class="form-control" id="email" placeholder="Enter email">
          <small class="text-muted">We'll never share your email with anyone else.</small>
      </fieldset>

      <button type="submit" id="form-button" class="btn btn-primary">Submit</button>

    </form>

我将其发送到index.php,这是我收到错误的地方!

“与数据库SQLSTATE [23000]有关的错误:违反完整性约束:1048列'名字'不能为空”

这是我的index.php代码

$form = $_POST;
$id = $form['id'];
$firstname = $form['firstname'];
$lastname = $form['lastname'];
$email = $form['email'];


try {
$db = new PDO("mysql:host=" . DB_HOST. ";dbname=" .DB_NAME .";port=".DB_PORT,DB_USER,DB_PASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$add_supporter = $db->prepare("INSERT INTO supporters (id, firstname, lastname, email) 
                             VALUES (:id, :firstname, :lastname, :email)");

$add_supporter->bindParam(":id", $id);
$add_supporter->bindParam(":firstname", $firstname);
$add_supporter->bindParam(":lastname", $lastname);
$add_supporter->bindParam(":email", $email);
$add_supporter->execute();



} catch (Exception $e) {
echo "Error in connection to database" . $e->getMessage() . "</br>";
die();
}

正如我在评论中所说,对您的POST数组使用条件!empty()

if( !empty($_POST['var1']) || !empty($_POST['var2'])){

// do something

}

else{

// do something else

}

您可以将||- OR更改为&& - AND

“然后将其值附加到该特定用户实例的数据库中提交给数据库?”

对于特定用户,请使用WHERE子句。

如果要查询特定用户,则需要使用SELECT。

有关所有数据处理声明,请参阅:


要将邮件发送给特定用户:

从此问答中获取如果表单已提交则将php邮件发送给用户 ,例如:

$results = $db->prepare("select $user_email from table where ID=$user_ID");

try{

/*YOUR INSERT STATEMENT FROM ABOVE*/

$to=$results;
$subject="Whatever you want your subject to be";
$headers = "From: WHATEVER@WHATEVER.COM\r\n";
$headers .= "Reply-To: WHATEVER@WHATEVER.COM \r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

$message= "WHATEVER MESSAGE";
mail ($to , $subject , $message, $headers);
echo "Your message has been sent";
}
Catch($error){
Do whatever you want here. Add another mail function to let you know that  the post was not accepted, etc.
}

您也可以在堆栈上查询以下问答:

如果您不熟悉PHP(或一般编程),那么这里是更好的提示之一,我可以针对这个(和类似的)问题给出答案:

您已经制定了问题说明。 那不是(伪)代码,而是重要的第一步:

如果我验证“名字”和“姓氏”不为空,那会是什么样?

这个问题实际上包含解决方案:您将添加对这些值的验证 现在,您不验证输入值,而是将它们直接传递到数据库查询中。 在当前情况下,数据库将验证这些值。 从您的问题中我读到,您对这种验证水平不满意。 您可能会将已经用您自己的话完成的验证视为一条错误消息。 但是从技术上讲,数据库服务器会保护数据库中的数据结构,以使定义的值不会输入。

那么我能给您的实际提示是什么? 在进行编程时,如果您有问题陈述(例如在进行数据库交互之前验证输入值),您就假装自己已经解决了问题。 这样一来,您就可以将问题移到解决方案的视线之外,而只需编写软件的主要部分,就好像它已经在工作一样。 这可以帮助您将控制流问题与数据处理问题区分开。 例如,您的程序始终需要具有经过验证的值才能起作用,但是代表经过验证的值的内容可能会随时间而变化。

因此,在您的代码中,所有与表单相关的数据都以数组的$form组合在$form变量中。 这是示例代码,将$form变量映射到SQL查询的参数:

$id = $form['id'];
$firstname = $form['firstname'];
$lastname = $form['lastname'];
$email = $form['email'];

因此,在执行此类与数据库相关的操作之前,您可以例如确定该表单是否有效:

$formIsValid = validate_form($form);
if (false === $formIsValid) {
    // do what needs to be done with an invalid form
} elseif(true === $formIsValid) {
    // do what needs to be done with a valid form (database interaction)
} else {
    throw new UnexpectedValueException('Should never come here');
}

因此,这是你的代码可能看起来怎么样,如果你做表单数据的验证。 但是,它仍然没有显示如何验证表单。 当然,您需要验证$form每个字段,因此需要将其写下(定义)表单验证。 例如,一些不应该为null,为此我使用了isset语句:

function validate_form(array $form) 
{
   if (!isset($form['firstname']) {
       return false;
   }

   if (!isset($form['lastname']) {
       return false;
   }

   return true;
}

我希望这为您提供了继续执行脚本所需的指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM