php - 从表单将项目插入 MySQL 数据库

标签 php html mysql forms

通过我不打算离开我的家庭计算机的网站上的两个页面,我想使用一个表单将项目输入到也托管在我的计算机上的 MySQL 数据库中。我之前已经用几乎相同的东西完成了此操作,但由于某种原因,这个不起作用。我不担心这个或类似的东西的安全性,因为它不会离开我自己的计算机,我只是希望它能够真正工作。

表格:

<form action='addclothes.php' method='post'><table style="font-family:verdana;font-size:14px;color:#004766;"><tr><td>
Type of clothing:</td><td><select name="type">
<option value="0">---</option>
<option value="dresses">Dress</option>
<option value="tops">Top</option>
<option value="bottoms">Bottom</option>
<option value="shoes">Shoes</option>
<option value="accessories">Accessory</option></select></td></tr>
<tr><td>Name:</td><td><input type="text" name="name"></td></tr>
<tr><td>Path to full image:</td><td><input type="text" name="largeimagepath"></td></tr>
<tr><td>Path to thumbnail:</td><td><input type="text" name="smallimagepath"></td></tr>
<tr><td colspan="2"><center><input type="submit" value="Submit" name="submit"></center></td></tr>
</table></form>

发送到 addclothes.php,它看起来像这样,封装在 html 中以保持相同的布局:

<?php

$name = $_POST['name'];
$table = $_POST['type'];
$largepath = $_POST['largeimagepath'];
$thumbpath = $_POST['smallimagepath'];

    $db = mysql_connect("localhost", "root", "******") or die(mysql_error());
    mysql_select_db("Default") or die(mysql_error());

    $query = "INSERT INTO clothes."{$table}" (name, imagepath, thumbimagepath)
 VALUES("{$name}", "{$largepath}", "{$thumbpath}")";
    mysql_query($query) or die(mysql_error()); ?>

<p>Item Added!</p>

无论如何,它都会进入下一页,只显示“已添加项目”。如果我在创建变量后尝试回显查询,该变量也不会显示。

最佳答案

这是错误的:

$query = "INSERT INTO clothes."{$table}" (name, imagepath, thumbimagepath)
            VALUES("{$name}", "{$largepath}", "{$thumbpath}")";

您需要在查询中使用单引号以避免破坏它(您不引用表名;如果它可以是 mysql 中的保留字,您可以使用反引号):

$query = "INSERT INTO clothes.`{$table}` (name, imagepath, thumbimagepath)
            VALUES('{$name}', '{$largepath}', '{$thumbpath}')";

另请注意,安全/sql 注入(inject)不仅仅是为了保护您免受恶意攻击;如果您没有正确准备在 SQL 查询中使用的数据,即使名称包含 ',即使您自己输入的有效数据也可能会破坏查询/应用程序。字符(O'Neill 例如...)。

因此,安全始终很重要,这就是为什么您应该切换到 PDO(或 mysqli)和准备好的语句。除此之外mysql_*函数已弃用。

最后一条评论:如果您向外界开放您的站点,则任何准备或转义都无法保护查询中的表名称;您需要检查允许的表名列表以避免 SQL 注入(inject)。

关于php - 从表单将项目插入 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549587/

相关文章:

php - 验证多级关系依赖关系的最佳方法

html - 让它可以点击导航栏?

jquery - 表比模态体大

mysql - 获取子项的最佳 SQL 语法

PHP : Capturing the command output

php - Mkdir() 设置权限 777

javascript - Laravel 分页表 - 对一列进行排序

php - 如何改变溢出?

MySQL 多列唯一键

替换 WordPress 数据库内容时 MySQL 替换不起作用