接下来,我一直在尝试遵循一些教程并构建基本表单。
<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();
?>
所以我正在连接数据库,因为我从中获取信息,我的问题是新的用户输入没有放到服务器上。
答案 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"]."')";`