向数据库添加记录的php代码
我正在为一个网站的控制面板(管理页面)工作。所有页面都有相同的代码,数据库表名和列几乎没有变化。所有这些都很好,但一页不起作用 这是它的代码向数据库添加记录的php代码,php,mysql,Php,Mysql,我正在为一个网站的控制面板(管理页面)工作。所有页面都有相同的代码,数据库表名和列几乎没有变化。所有这些都很好,但一页不起作用 这是它的代码 <?php include('connect.php'); // read the input data $KTitle = $_POST['Title']; $Kcontent = $_POST['content']; $ImgName = $_FILES["file"]["name"]; //get img extension $Img
<?php
include('connect.php');
// read the input data
$KTitle = $_POST['Title'];
$Kcontent = $_POST['content'];
$ImgName = $_FILES["file"]["name"];
//get img extension
$ImgExtension = substr($ImgName, (strlen($ImgName) - 4), strlen($ImgName));
//check if it Gif, Bng, Jpg
if ($ImgExtension == ".gif" || $ImgExtension == ".jpg" || $ImgExtension == ".png")
{ //get img name to rename it then readd the extinsion
$ImgName = substr($ImgName, 0, (strlen($ImgName) - 4));
$storyImgName = $ImgName . "_" . $Title;
$target = "../CharacterImgs/" . $storyImgName . $ImgExtension;
$target = str_replace(" ", "_", $target);
move_uploaded_file($_FILES['file']['tmp_name'], $target);
mysql_query("INSERT INTO CharactersN (name,desc,img) VALUES ('$KTitle', '$Kcontent','$target')");
echo "<meta http-equiv=\"refresh\" content=\"3;URL=AddCharacterForm.php\">";
}
?>
如果在MySQL中使用desc
作为列名,则必须将其用倒勾括起来,因为它是一个字符串
您在这里遇到了一个问题:
INSERT INTO CharactersN (name,desc,img)
desc
是一个保留字,因此必须使用`符号,如下所示:
INSERT INTO CharactersN (`name`,`desc`,`img`)
每次对字段名使用这种表示法是一种很好的做法(或者在数据库设计中不要对字段名使用保留字)
另外,请阅读,因为您的代码表明您没有意识到这一点。您正在向查询中插入来自外部的值(本例中为POST)
您应该首先使用或更好地使用数据库交互来转义这些值
从中,您可以发布您得到的错误吗?我希望您知道您的代码中有SQL注入?请使用过时的mysql.*
函数,学习如何使用和准备语句。这是一个小问题,但是$KTitle=$\u POST['Title']
可能应该是$KTitle=$\u POST['title']代码>(除非您以&title=
而不是标准的&title=
发送标题)。不起作用?什么是不起作用的?有人可能会反驳说,“停止使用reserver works作为字段名”是一种更好的做法。@tereško我不想就此展开评论战,但对于一个可能碰巧不知道所有保留字的无经验用户来说,使用正确的符号似乎更好。不过,我还是把你的评论编辑成了我的答案。同意。另一方面:mysql\u escape\u string()
已被弃用。他们现在有了mysql\u real\u escape\u string()
。。这只是mysql有多老的另一个标志。你应该编辑一下答案。@tereško谢谢,那实际上是一个打字错误。在使用PDO之前,我更习惯于键入它:)。
INSERT INTO CharactersN (`name`,`desc`,`img`)
VALUES ('$KTitle', '$Kcontent','$target')")