0

データベースに写真をアップロードしようとしていますが、アップロードされたかどうかを確認すると、フィールドが空です。また、アップロードするファイルの形式を jpeg、png、gif に制限したいと考えています。助けてください

HTML

<form enctype="multipart/form-data" action="subePic.php" method="post" name="changer">
   <input name="MAX_FILE_SIZE" value="102400" type="hidden">
   <input name="image" accept="image/jpeg" type="file">
   <input value="Submit" type="submit">
</form>

PHP

<?php
require('conecta.php');
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) { 
    $tmpName  = $_FILES['image']['tmp_name'];  
    $fp      = fopen($tmpName, 'r');
    $data = fread($fp, filesize($tmpName));
    $data = addslashes($data);
    fclose($fp);

    $xSQL = "INSERT INTO FOTOS (PIC) VALUES(?)";
    $stmt = $oConni->prepare($xSQL);
    $stmt->bind_param('s', $data);
    $stmt->execute() or die($oConni->error);
    $stmt->close();

    if(!$xSQL){
        die("Database query failed: ". mysql_error());
    }

    print "Su foto fue subida con éxito";
}
else{
    print "Error: no se subió ninguna imagen a la BD";
}
?>
4

2 に答える 2

2

最大ファイル サイズを超えた場合 (100kb はそれほど大きくありません)、$_FILES にはエラー メッセージ 2 が含まれ、ファイル サイズは 0 として表示されます。

以下を確認できます。

if($_FILES['image']['error'] !== 0) { ... error handling }

エラーコードはこちらにあります: http://php.net/manual/en/features.file-upload.errors.php

于 2013-04-07T11:56:12.833 に答える
1

タイプチェックとサイズについては、次のようにする必要があります。

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 90000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }

画像を挿入するには、次のものが必要です。

if(isset($_FILES['image']) && $_FILES['image']['size'] > 0) {
$tmpName  = $_FILES['image']['tmp_name'];

      $fp   = fopen($tmpName, 'r');
      $data = fread($fp, filesize($tmpName));
      $data = addslashes($data);
      fclose($fp);
      // Create the query and insert
      // into our database.
      $query ="INSERT INTO tbl_images(image)VALUES('".$data."')";
      $results=mysql_query($query) or die(mysql_error());
          // Print results
      print "Thank you, your file has been uploaded.";
        }
else {
   print "No image selected/uploaded";
}

}

mysql_query の代わりに prepare を使用できます。これは、conecta.php に基づいています。

于 2013-04-07T11:57:15.040 に答える