将数据从html格式发布到mysqli数据库

时间:2016-06-20 17:42:04

标签: php mysql forms mysqli

我创建了一个html表单,我一直在尝试将用户要填写表单的数据发送到我创建的mysqli数据库。 我创建了数据库,并为我的表单中的6个字段创建了6列。 我写了下面的PHP代码来执行这项工作,但它似乎不起作用......

    <?php 
    //get the form elements and store them in variables
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $postal = $_POST['postal'];
    $acceptance = $_POST['acceptance'];

    //establish connection
    $con = mysqli_connect('localhost', 'db_user', 'db_password' , 'db_name', 'db_socket'); 
    //on connection failure, throw an error
    if(!$con) {  
    die('Could not connect: '.mysql_error()); 
    } 

    $sql = 'INSERT INTO db_table1 ( firstname, lastname, email, postal, phone, acceptance ) 
VALUES ( $_POST[firstname], $_POST[lastname], $_POST[email], $_POST[postal], $_POST[phone], $_POST[acceptance] )' ; 

    if ($sql) {
        echo 'Success';
    }
    else {
        die ('Error');
    }

    $mysqli->close();

    //Redirects to the specified page
    header("Location: http://www.example.com/success");
    ?>
你可以帮帮我吗?问题出在哪里,没有任何东西进入数据库?

4 个答案:

答案 0 :(得分:1)

试用此代码

    $sql = 'INSERT INTO db_table1 ( firstname, lastname, email, postal, phone,acceptance ) VALUES ( "'.$firstname.'","'.$lastname.'","'.$email.'","'.$postal.'","'.$phone.'","'.$acceptance.'", )' ;
    $response= mysqli_query($con,$query);

这会添加mysqli_query。简而言之,您构建了用于查询的字符串,但没有进行实际查询。

答案 1 :(得分:0)

这里存在很多问题,但最明显的是你将SQL查询定义为一个字符串,测试这个字符串是否存在,显然会这样,然后每天调用它。他们说这是重要的思想,但是当谈到编程时,你必须更明确。

您需要实际执行查询。使用mysqli这是一个多步骤过程:准备,绑定,执行。之后,如果需要,您可以进行提取。与往常一样,have the documentation open if you're unfamiliar with how to do all of this。这是理解某事的重要一步。

将其更新为使用面向对象的表示法使事情更清晰:

$con = new mysqli('localhost', 'db_user', 'db_password' , 'db_name', 'db_socket');

$stmt = $con->prepare('INSERT INTO db_table1 (firstname, lastname, email, postal, phone, acceptance) VALUES (?,?,?,?,?,?)');

$stmt->bind_param('ssssss',
  $_POST[firstname], $_POST[lastname],
  $_POST[email], $_POST[postal],
  $_POST[phone], $_POST[acceptance]
);

$stmt->execute();

不要忘记在使用'$this'等单引号的PHP字符串中,不要插入变量,而是使用"$this"之类的双引号。这是您原始代码中的另一个问题。

答案 2 :(得分:-1)

您的查询字符串中存在问题 请注意,在php中,如果一个字符串被单引号包围(正如你所做的那样),它就会被视为没有插入任何变量

如果字符串包含变量,则应使用双引号

将其包围

所以用双引号替换单引号,这将在查询中包含post变量,并测试它可以打印$ sql变量。

现在虽然代码可以工作,但它不是使用mysqli的最佳方式。使用prepossessed查询标准的三个步骤来执行mysqli中的查询以实际获取mysqli的好处,因为直接将变量用于查询字符串会使您的代码容易受到Sql注入攻击

答案 3 :(得分:-2)

您也可以尝试

$sql = "INSERT INTO user (username, email, password, avater) "
     . "VALUES ('$username', '$email', '$password', '$avater_path')";