[英]Javascript PHP/MySQL - Insert row value from database into textfield
[英]php from to insert a row to mysql database table
我试图获取用户输入以在表中添加一行,但是$ _post似乎在第二页上不再起作用,我该怎么做? 我希望用户能够自己添加,删除,更新值。 非常感谢大家的帮助
这是我的第一页:
<?php
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM entree";
$result = $conn->query($sql);
echo "<table border='1'>
<tr>
<th>entree id</th>
<th>entree name</th>
<th>price</th>
<th>spicy</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['e_id'] . "</td>";
echo "<td>" . $row['ename'] . "</td>";
echo "<td>" . $row['price'] . "</td>";
echo "<td>" . $row['spicy'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
<form action="addrow.php" method="post">
to make any change of this table, please fill in parts you needs.<br><br>
To add a new row: please enter:<br>
Entree ID: <input type="input" name="e_id">
Entree Name: <input type="input" name="ename">
Price: <input type="input" name="price">
Spicy: <input type="input" name="spicy">
<br>
<input type="submit" value="add">
</form>
这是我的第二页:
<?php
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO entree (e_id, ename, price, spicy)
VALUES ('$_POST["e_id"]', '$_POST["ename"]', '$_POST["price"]', '$_POST["spicy"]')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
您应该使用准备好的语句,但是在当前状态下,您的报价是混杂的。 解决此问题的一种方法是使用串联:
$sql = "INSERT INTO entree (e_id, ename, price, spicy) VALUES ('" . $_POST["e_id"] . "', '" . $_POST["ename"] ."', '". $_POST["price"] ."', '" .$_POST["spicy"] ."')";
您正在将“”嵌套在
$sql = "INSERT INTO entree (e_id, ename, price, spicy) VALUES ('$_POST["e_id"]', '$_POST["ename"]', '$_POST["price"]', '$_POST["spicy"]')";
这也引入了一个很大的安全漏洞-sql注入。 请改用命名参数。 这将解决两个问题。
您实际上可以从帖子中的突出显示中看到错误。 SQL查询中使用的引号之间不匹配。
在构造SQL查询之前,我将重写脚本以提取所需的信息。
$id = $_POST['e_id'];
$name = $_POST['ename'];
$price = $_POST['price'];
// Or even better. Filter incoming data to increase security just a little more.
$spicy = filter_input(INPUT_POST, 'spicy', FILTER_SANITIZE_STRING);
$sql = "
INSERT INTO `entree` (`e_id`, `ename`, `price`, `spicy`)
VALUES
('{$id}', '{$name}', '{$price}', '{$spicy}')
";
使用双引号时,您可以直接在字符串内编写变量。 此外,我还在变量周围添加了大括号,以帮助PHP解释器(您自己)和某些IDE识别它们。
我还在SQL中的表名和列名两边加上了引号,以改善哪些单词是关键字以及哪些单词是表/列名称的可视化。
重要!
请考虑使用准备好的语句 。 PHP提供了PDO和MySQLi扩展。 它们将帮助减轻SQL注入带来的漏洞,您当前的脚本会受到这些注入的影响。 关于如何使用准备好的语句以及提到的两个扩展,有很多教程。
编码愉快!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.