【问题标题】:Using PHP to upload an image and store data in MSSQL使用 PHP 上传图片并在 MSSQL 中存储数据
【发布时间】:2009-10-09 13:48:04
【问题描述】:

我正在尝试上传图片并添加详细信息,例如:标题、描述和文件路径到数据库表中。

我正在使用以下代码,但它没有向数据库添加任何数据;

(session.php 包含数据库连接。)

<?php include('includes/session.php');

$uploadDir = 'submitted/pictures/';

if(isset($_POST['submit']))
{
$fileName = $_FILES['file']['name'];
$tmpName  = $_FILES['file']['tmp_name'];
$fileSize = $_FILES['file']['size'];
$fileType = $_FILES['file']['type'];

$filePath = $uploadDir . $fileName;

$result = move_uploaded_file($tmpName, $filePath);
if (!$result) {
echo "Error uploading <strong>file</strong>";
exit;
}

if(!get_magic_quotes_gpc())
{
    $fileName = addslashes($fileName);
    $filePath = addslashes($filePath);
}

$title = $_POST['title'];
$description = $_POST['description'];

$query = "INSERT INTO $user_pictures (file, title, description) VALUES ('$filePath', '$title', '$description')";

mssql_query($query); 

}

?>

表格代码;

<form name="Image" enctype="multipart/form-data" action="upload-pics2.php" method="POST">
 Title <input type="text" name="title" maxlength="100" class="textbox" value="<?php echo $form->value("title"); ?>" />
 Description <textarea name="description" rows="8" cols="40" class="textbox" value="<?php echo $form->value("description"); ?>"></textarea>
 File <input type="file" name="file" accept="image/gif, image/jpeg, image/x-ms-bmp, image/x-png" size="26" class="textbox" />
 <input type="submit" name="submit" value="Upload" class="button" />
</form>

我想知道是否有人可以告诉我可能出了什么问题?

谢谢。

【问题讨论】:

  • 您是要将文件存储在数据库中还是仅存储路径?您的问题表明您想将数据存储在数据库中,但您的代码说您只是存储路径

标签: php sql file file-upload


【解决方案1】:

由于几个问题,此代码无法正常工作。

首先,您应该在检查上传时重命名一个 html 字段或更改字段名称:

<input type="submit" name="Upload" value="Upload" class="button" />

if(isset($_POST['submit']))

第二个,此脚本不会将任何数据存储到数据库中。 您应该获取、清理数据并将其写入相应的字段,例如:

$title = mysql_real_escape_string($_POST['title']);
$description = mysql_real_escape_string($_POST['description']);
$query = "INSERT INTO $user_pictures (file, title, description) VALUES ('$filePath', '$title', '$description')";

您应该确保这些字段存在于 DB 中,如果没有 - 您应该创建它们:

ALTER table user_pictures ADD column description text, add column title varchar(255);

【讨论】:

  • 嘿 Max,有没有一个 MSSQL 相当于 mysql_real_escape_string ?
  • 现在似乎出现了这个错误;警告:mssql_query() [function.mssql-query]:消息:第 31 行的 upload-pics2.php 中的“(”。(严重性 15)附近的语法不正确
  • 不,没有等效于转义 mssql,但您可以使用简单的转义函数: function mssql_escape_string($string_to_escape) { $replaced_string = str_replace("'","''",$string_to_escape) ;返回 $replaced_string; } 然后调用 $title = mssql_escape_string($_POST['title']); $description = mssql_escape_string($_POST['description']);
  • 我对那个警告一无所知,抱歉。 :( 只能建议检查查询的语法。
  • 不用担心,Max。现在可以工作了,只需要进行一些验证以检查正确的文件类型、文件大小并显示成功/错误消息。
【解决方案2】:

你在这行有错误if(isset($_POST['Upload']))

将此更改为if(isset($_POST['submit']))

【讨论】:

    【解决方案3】:

    'submitted/pictures/' 是可写的吗?您也可能需要运行 is_uploaded_file() 以获得额外的安全性。

    另外你的查询似乎是错误的

    "INSERT INTO $user_pictures ( file ) VALUES ('$filePath')"
    

    $user_pictures 需要是一个表格

    试试

    "INSERT INTO `user_pictures` ( `file` ) VALUES ('$filePath')"
    

    【讨论】:

    • @dotty 谢谢你。显然文件是一个关键字,所以我将不得不改变它。
    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 2014-05-19
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    相关资源
    最近更新 更多