php - 上传文件到服务器,但文件名没有保存到数据库

标签 php mysql

这里是问题所在:文件名没有保存到数据库中。文件正在上传到服务器,但文件名根本不会保存。文件上传成功后,我可以回显文件名,但无论出于何种原因,它确实想将文件名保存到数据库中。我确信这是一个简单的修复,我只是遗漏了一些东西(我希望如此)。

提前致谢。

(附:是的,我知道我应该使用 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.";
        }
    }
?>

最佳答案

需要考虑的几件事:

  1. mysql_* 函数已弃用。请改用 mysqliPDO
  2. 如果变量 $theloa 中有单引号,您的查询可能会中断。使用准备好的语句来防止此类错误并防止(警笛声和红灯闪烁)SQL 注入(inject)。

考虑做一个 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.";
        }
    }
?>

关于php - 上传文件到服务器,但文件名没有保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036104/

相关文章:

mysql - sql中两个表的列求和

PHP: session 变量

php - 我需要在 Controller 中创建一个函数来显示特定 View ,其文件名由数据库确定。 - 拉拉维尔

PHPMailer - 无法验证

mysql - 如果第二列和第三列相同,GROUP BY 子句将忽略第一列值

PHP Mysql 从一天中的两个日期时间计算每天的总飞行小时数

php - 从 php 列表中隐藏已使用的类别

php - 执行创建 "MySQL server has gone away"错误

PHP 与命名空间和 Smarty 错误 : unknown tag "cycle"

php - 无法在zend数据库中插入记录?