繁体   English   中英

php from向mysql数据库表中插入一行

[英]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注入。 请改用命名参数。 这将解决两个问题。

如何将多个参数绑定到MySQLi查询

您实际上可以从帖子中的突出显示中看到错误。 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提供了PDOMySQLi扩展。 它们将帮助减轻SQL注入带来的漏洞,您当前的脚本会受到这些注入的影响。 关于如何使用准备好的语句以及提到的两个扩展,有很多教程。

编码愉快!

暂无
暂无

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

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