表单输入数据库不会发送

时间:2016-09-26 22:09:18

标签: php mysqli

接下来,我一直在尝试遵循一些教程并构建基本表单。

<form name="ContactInformation" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" class="uk-form blcform">

        <fieldset data-uk-margin>
            <legend>For enquires please leave your contact information below</legend>

            <div class="uk-form-row blcinput">
                <input type="text" name="firstname" placeholder="First name">
            </div>

            <div class="uk-form-row blcinput">
                <input type="text" name="secondname" placeholder="Second name">
            </div>

            <div class="uk-form-row blcinput">
                <input type="text" name="urcompany" placeholder="Company">
            </div>

            <div class="uk-form-row blcinput">
                <input type="text" name="email" placeholder="Email address">
            </div>

            <div class="uk-form-row blcinput">
                <input type="text" name="telephone" placeholder="+tel">
            </div>

            <div class="uk-form-row blcinput">
                <textarea name="comment" placeholder="Information about your enquiry" rows="6" ></textarea>
            </div>

            <div class="uk-form-row blcinput"><input type="submit" name="submit" value="Submit"></div>

        </fieldset>

    </form>

其次是php段

    <?php


$conn = new mysqli($servername, $username, $password, $mydb);

// Check connection

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

echo "Connected successfully";


 if(isset($_POST["submit"])){

 //insert into database


 $sql = "INSERT INTO ContactInformation (fname, sname, email, comment, telephone, company)
        VALUES ('".$_POST["fname"]."','".$_POST["sname"]."','".$_POST["email"]."','".$_POST["comment"]."','".$_POST["telephone"]."','".$_POST["company"]."')";
     }   

//fetch from database
$sql = "SELECT email, fname, sname FROM ContactInformation";
$result = $conn->query($sql);


//Test pre existing database entries


if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["email"]. " - Name: " . $row["fname"]. " " . $row["sname"]. "<br>";
    }
} else {
    echo "0 results";
}

                 $conn->close();

?>  

所以我正在连接数据库,因为我从中获取信息,我的问题是新的用户输入没有放到服务器上。

2 个答案:

答案 0 :(得分:5)

查看代码的这一部分?

 if(isset($_POST["submit"])){

 //insert into database


 $sql = "INSERT INTO ContactInformation (fname, sname, email, comment, telephone, company)
        VALUES ('".$_POST["fname"]."','".$_POST["sname"]."','".$_POST["email"]."','".$_POST["comment"]."','".$_POST["telephone"]."','".$_POST["company"]."')";
     } 

仅在您点击提交按钮时执行,但您没有像SELECT查询那样query()。另外,您为两者使用相同的$sql变量。

  • 使用其他变量;它有助于区分它们。

您没有从错误报告中获取未定义的索引通知,因为该查询永远不会被执行;这就是原因。

您有2个输入带有错误的名称属性。

  • name="firstname"
  • name="secondname"

分别属于:

  • $_POST["fname"]
  • $_POST["sname"]

您需要在此处使用预准备语句,因为您的代码很容易进行SQL注入。

参考文献:

调试工具:

并将其应用于您的代码。

答案 1 :(得分:0)

嗯,您的代码没有任何问题,它完美无缺,但有两件事您错过了忘记:

正如Proger_Cbsk所写,你永远不会打电话给$conn->query($sql)

另外,如果您的表单的名称为$_POST["fname"],那么您使用的是name="firstname"错误。

问题转发您使用了错误的帖子名称

$sql = "INSERT INTO ContactInformation 
                (fname, sname, email, comment, telephone, company)
        VALUES ('".$_POST["fname"]."','".$_POST["sname"].
                "','".$_POST["email"]."','".$_POST["comment"].
                "','".$_POST["telephone"]."','".$_POST["company"]."')";`

应该是:

$sql = "INSERT INTO ContactInformation 
                (fname, sname, email, comment, telephone, company)
        VALUES ('".$_POST["firstname"]."','".$_POST["secondname"].
              "','".$_POST["email"]."','".$_POST["comment"].
              "','".$_POST["telephone"]."','".$_POST["urcompany"]."')";`