将文件上传到服务器,但文件名不保存到数据库
这是问题:文件名未被保存到数据库中。文件正在上传到服务器上,但文件名不会保存。一旦文件上传成功,我可以回显文件名,但是无论出于何种原因,它都希望将文件名保存到数据库中。我确信这是一个简单的解决方案,我只是缺少一些东西(我希望)。将文件上传到服务器,但文件名不保存到数据库
在此先感谢。
(PS是的,我知道我应该使用的mysqli)
HTML:
<form action="" name="loa" method="post" enctype="multipart/form-data">
<input type="hidden" name="size" value="350000">
<input type="file" name="loa">
<input type="submit" name="loasub" value="Upload Letter of Authorization">
</form>
PHP:
<?php
if (!empty($_POST['loasub'])) {
$target = "loa/";
$target = $target . basename($_FILES['loa']['name']);
$theloa = ($_FILES['loa']['name']);
mysql_connect("localhost", "user", "pass") or die(mysql_error()) ;
mysql_select_db("mydb") or die(mysql_error()) ;
//Writes the information to the database
mysql_query("UPDATE customers SET loa='$theloa' WHERE id='30'") ;
if(move_uploaded_file($_FILES['loa']['tmp_name'], $target))
{
echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded";
echo $theloa;
}
else {
echo "Sorry, there was a problem uploading your file.";
}
}
?>
一对夫妇的事情要考虑:
-
mysql_*
功能已被弃用。改为使用mysqli
或PDO
。 - 如果变量
$theloa
中包含单引号,则可以中断查询。使用预准备语句来防止此类错误,并防止(警笛声和红灯闪烁)SQL注入。
考虑做一个var_dump($_FILES['loa']['name'])
并粘贴它与您的问题,以更清晰。
尝试使用以下修改后的mysqli
版本的文件(您需要在PHP安装中启用mysqli
扩展)。它应该(理想情况下)工作。
<?php
if (!empty($_POST['loasub'])) {
$theloa = ($_FILES['loa']['name']);
$target = "loa/";
$target = $target . basename($theloa);
$mysqli = new mysqli("localhost", "user", "password", "mydb");
if (mysqli_connect_errno()) {
die(mysqli_connect_error());
}
//Writes the information to the database
if ($preparedStatement = $mysqli->prepare("UPDATE customers SET loa=? WHERE id=30")) {
$preparedStatement->bind_param("s", $theloa);
$executionResult = $preparedStatement->execute();
if (!$executionResult) {
die("Query execution failed!");
}
//$preparedStatement->bind_result($sqlOutput); // bind mysql output to an output variable
//$preparedStatement->fetch(); // fetch mysql output
//var_dump($sqlOutput); // dump the sql output
$preparedStatement->close();
}
$mysqli->close();
if(move_uploaded_file($_FILES['loa']['tmp_name'], $target))
{
echo "The file ". basename($_FILES['uploadedfile']['name']). " has been uploaded";
echo $theloa;
}
else {
echo "Sorry, there was a problem uploading your file.";
}
}
?>
尝试像这个 - 运行qurety(删除单引号ID = '30')
mysql_query("UPDATE customers SET loa='$theloa' WHERE id=30") ;
试过了,但是没有运气:( – Alex
Alex:你的表单名称(attr)和文件名(属性)是一样的,试着去改变它,它会起作用 –
PHP的值不能成quotes-(删除从$ LOA单引号)
尝试这种情况:
mysql_query("UPDATE customers SET loa=$theloa WHERE id='30'") ;
调试
$conn = mysql_connect($dbhost, $dbuser, $dbpass); $sql = mysql_query("UPDATE customers SET loa=$theloa WHERE id='30'") ; mysql_select_db('customers '); $retval = mysql_query($sql, $conn); if(! $retval) { die('Could not update data: ' . mysql_error()); } echo "Updated data successfully\n"; mysql_close($conn); ?>
看起来还是不行,奇数 – Alex
mysql_query("UPDATE customers SET loa='$theloa' WHERE id='30'") ;
运行或死亡(mysql_error());
mysql_query("UPDATE customers SET loa='$theloa' WHERE id='30'") or die(mysql_error()) ;
也许有在查询时出现错误,即使没有语法错误,它可能是错的字段名。除此之外,只要变量$ theloa被填充,似乎就没有问题。 mysql_error会告诉如果查询甚至被执行?
明白了!文件名有一个特殊的字符,只需要使用mysql_real_escape_string。谢谢! – Alex
hehe那么其他答案如何被接受,因为即使它是一个完美的答案,它不会回答你所需要的设计: ) –
** WARNING **你的代码中包含[SQL注入漏洞(http://en.wikipedia.org/wiki/SQL_injection) - !你逝去的原始的,未经过滤,未经验证的用户直接输入到一个以字符串形式存在的SQL字符串......是的,文件名,*是*它很重要。请[切换到PDO](http://php.net/book.pdo)或[mysqli](http://php.net/book.mysqli),以便您可以使用[带有参数化查询的预准备语句](http: //en.wikipedia.org/wiki/Prepared_statement)。 – Charles