尽管我只执行了一次脚本(一个mysql_query),但由于某种原因,我在mySQL表中得到了重复的条目。
这些条目是不一样的--“重复”条目对于列时间戳和图片总是有相同的字段,但是其余的列是空的。
这是我的剧本:
<?php
session_start();
$con = mysql_connect("Fruity.mysql.anyhost.com", "apples", "password");
mysql_select_db("IAN_1");
$username = $_SESSION['username'];
$image = $_POST['image'];
$post = $_POST['postdescription'];
$idcolor = $_POST['idcolor'];
$idbgcolor = $_POST['idbgcolor'];
$timestamp = date("jS \of F Y h:i:s A P");
$user_uploadposts =
"INSERT INTO $username (Timestamp, Image, Description, ID_color, ID_backgroundcolor)
VALUES ('$timestamp','$image', '$post','$idcolor','$idbgcolor')";
mysql_query($user_uploadposts);
mysql_close($con)
?> 问题的屏幕截图 http://i.imgur.com/DaPiRYm.jpg
发布于 2015-08-09 11:43:43
这太长了,不能发表评论。
首先,$_POST['image']建议我们处理文件,如果是这样的话,您的表单需要一个有效的容器类型,一个POST方法,如果是这样的话,您还需要使用$_FILES而不是$_POST。
我们也不知道是否设置了会话数组(不知道为什么在这里使用它),以及表单元素是否包含匹配的名称属性。
即:<input type="text" name="postdescription">
您的表单应该包含method="post" enctype="multipart/form-data"。
如果表单和PHP/MySQL位于同一个文件中,则需要对变量使用isset()或!empty()。您可能收到了未定义的索引通知,但没有显示它们。
if(!empty($_POST['postdescription'])){...}对其他人来说是一样的。
您还需要做的是拥有一个主键,这通常可以解决一些问题。
对于mysql_close($con),还缺少一个分号,添加它为mysql_close($con);。
将当前代码替换为:
mysql_query($user_uploadposts) or die(mysql_error());以查找错误和错误报告。
另外,您还在使用MySQL保留字 Timestamp,它应该用滴答来包装。
INSERT INTO $username (`Timestamp`, Image, ...如果这仍然不起作用,那么传入的数据可能包含MySQL会抱怨的字符。
$post = mysql_real_escape_string($_POST['postdescription']);将错误报告添加到文件的顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your codeSidenote:显示错误只应在暂存过程中进行,而不应在生产中执行。
您现在的代码对SQL注入开放。
使用有准备好的陈述或有准备陈述的PDO。
https://stackoverflow.com/questions/31902371
复制相似问题