2017-03-17 78 views
0

我做了一个简单的文本和文件更新表单。这是我的代码PHP - 更新文件成功,但更新文本失败

<?php 
require("config.php"); 
$id = $_GET['id']; 

$sql = "SELECT * FROM contracts WHERE id= '$id'"; 
$result = $con->query($sql); 
while ($row = $result->fetch_assoc()) 
{ 

?> 

<html><head><title>test</title></head> 
<body> 

<form method="POST" action="" enctype="multipart/form-data"> 

    ID: <?php echo $id; ?><br> 
    <input type="hidden" name="id" value="<?php echo $id; ?>" /> 

    Contract Title 
    <input type="text" name="contract_title" value="<?php echo $row['contract_title']; ?>" /><br> 

    Upload File: 
    <?php echo $row['filename'] ?> 
    <input type="file" name="upload"/><br> 
    <input type="submit" name="edit" value="Submit"/> 
</form> 
</body> 
</html> 

<?php 
} 

if(isset($_POST['edit']) ) 
{ 

if ($_FILES['upload']['size'] != 0){ 

$contract_title = $con->real_escape_string($_POST['contract_title']); 

$filename = $con->real_escape_string($_FILES['upload']['name']); 
$filedata= $con->real_escape_string(file_get_contents($_FILES['upload']['tmp_name'])); 
$filetype = $con->real_escape_string($_FILES['upload']['type']); 
$filesize = intval($_FILES['upload']['size']); 

$query = "UPDATE `contracts` set `filename` = '$filename',`filedata` = '$filedata', `filetype` = '$filetype',`filesize` = '$filesize' WHERE `id` = '$id' " ; 

if ($con->query($query) == TRUE) { 
echo "<br><br> New record created successfully"; 
} else { 
    echo "Error:<br>" . $con->error; 
} 

} else { 

$contract_title = $con->mysqli_real_escape_string($_POST['contract_title']); 

$filename = $con->real_escape_string($_FILES['upload']['name']); 
$filetype = $con->real_escape_string($_FILES['upload']['type']); 
$filesize = intval($_FILES['upload']['size']); 

$query = "UPDATE `contracts` set `filename` = '$filename', `filetype` = '$filetype',`filesize` = '$filesize' WHERE `id` = '$id' " ; 

if ($con->query($query) == TRUE) { 
echo "<br><br> New record created successfully"; 
} else { 
echo "Error:<br>" . $con->error; 
} 

} 
$con->close(); 
} 

?> 

当我点击提交按钮后,它成功更新了除文本外的文件上传。我不想从发布变为获取方法,因为这会对上传文件进程造成同样的问题。我该如何解决?

+0

你的代码很容易被sql注入,记住这一点; – hassan

+0

如果你回应'$ filedata'你能看到什么打印? – hassan

+0

@hassan它表示在第7行的未定义变量 – MechaMetalHead

回答

0

所有这段时间在代码中查找错误数小时后,这是一个简单的错误,我错过了!

$query = "UPDATE `contracts` set `contract_title` = '$contract_title', `filename` = '$filename',`filedata` = '$filedata', `filetype` = '$filetype',`filesize` = '$filesize' WHERE `id` = '$id' " ; 

我没有在查询中输入contract_title!我的上帝

0

最有可能的是,您没有正确获取$ filename。尝试调试并打印$ _FILES ['upload'] ['name'],看看你得到了什么(你可以json_encode并查看你试图访问的结果)。其余的代码似乎没问题

+0

$ filename已经正确,当我尝试打印$ _FILES ['upload'] ['name']时,它显示未定义的索引上传。 – MechaMetalHead