0

アップロード時に画像名をユーザーIDに変更/名前変更することを望んでいた次のコードがあります。これにより、ファイルの上書きを回避し、名前を変更するコードを追加した後、悲しいことにデータベースに名前を挿入できます。コードは画像をアップロードしたり、データベースを更新したりできませんエラーが表示されますが、名前変更コードを削除すると、すべてが機能していました。それを解決する方法を教えてもらえますか、それとももっと良い方法がありますか?

<?php
$user_id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');
$username = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
require("connection.php");
if(@$_POST ['submit']) {
    $file = $_FILES ['file'];
    $name1 = $file ['name'];
    $type = $file ['type'];
    $size = $file ['size'];
    $tmppath = $file ['tmp_name'];
    if($type == 'jpeg' || $type == 'png' || $type == 'jpg') {
        $name1 = $user_id.$type; // rename image
        if($name1!="") {
            if(move_uploaded_file ($tmppath, 'users/'.$name1)) {
                $sql=("INSERT INTO USERS set photo='$name1' WHERE username='$username'");
                mysql_query ($sql) or die ('could not updated:'.mysql_error());
                echo ("Profile picture updated");
            }
        }
    } 
}
?>
4

4 に答える 4

1

あなたはこれを試すことができます、あなたを助けるかもしれません...

<?php
$user_id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');
$username = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
require("connection.php");
if(@$_POST ['submit']) {
$file = $_FILES ['file'];
$name1 = time().$file ['name']; // rename image
$type = $file ['type'];
$size = $file ['size'];
$tmppath = $file ['tmp_name'];
if($type == 'image/jpeg' || $type == 'image/png' || $type == 'image/jpg') {
    if($name1!="") {
        if(move_uploaded_file ($tmppath, 'users/'.$name1)) {
            $sql=("INSERT INTO USERS set photo='$name1' WHERE username='$username'");
            mysql_query ($sql) or die ('could not updated:'.mysql_error());
            echo ("Profile picture updated");
        }
    }
} 
}}
?>
于 2013-05-15T14:06:15.230 に答える
0

これを試して、$_FILES理解して簡単に操作できる配列に再編成してください。

恥知らずのプラグ

https://gist.github.com/lukeoliff/5531772#file-quickrearrangefiles-php

<?php
  function rearrangeFiles($arr) {
    foreach($arr as $key => $all){
      foreach($all as $i => $val){
        $new[$i][$key] = $val;
      }
    }
    return $new;
  }

次のように使用されます。

<?php
  $user_id = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');
  $username = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');

  require("connection.php");

  if(!empty($_POST) && !empty($_FILES)) {
    $files = rearrangeFiles($_FILES)
    foreach ($files as $key => $file) {
      $name    = $file['name'];
      $type    = $file['type'];
      $size    = $file['size'];
      $tmppath = $file['tmp_name'];
      if($type == 'jpeg' || $type == 'png' || $type == 'jpg') {
        $name = time() . '_' . $user_id.'_'.$name.'.'.$type; // TIMESTAMP, USERID and FILENAME RENAME
        if(!empty($name)) {
          if(move_uploaded_file($tmppath, 'users/'.$name)) {
            $sql = "INSERT INTO users (photo,username) values ('$name','$username')";
            mysql_query($sql) or die('could not updated:'.mysql_error());
            $successes[] = $file['name'] . " picture saved as " . $name;
          }
        }
      } 
    }
    if (!empty($successes)) {
      echo implode('. ',$successes);
    }
  }

単一のクエリでデータベースに挿入することでさらに改善されました:)また、php.net http://www.php.net/manual/en/function.mysqlに従って、mysql_関数からmysqli_またはPDO::関数に移動する必要があります-connect.phpは mysql_ 関数をまもなく廃止します。

于 2013-05-15T14:05:59.557 に答える
-1

その 1 つの概念を使用できますが、要件としてこれを編集します。

<?php
if ($_FILES['imagepath']['name'] != "")
{
    $uploaddir = 'images/';
    $uploadfile = $uploaddir . basename($_FILES['imagepath']['name']);
    if (move_uploaded_file($_FILES['imagepath']['tmp_name'], $uploadfile))
    {
    $rename = $_FILES['imagepath']['name'];
                $rename = rand(0,1500000000).$rename;
                $filename = strtolower(($rename));
                if (file_exists(($uploaddir.$_FILES['imagepath']['name'])))
                    rename(($uploaddir.$_FILES['imagepath']['name']), ($uploaddir.$filename));
    echo $_FILES['imagepath']['name']."&nbsp;with name&nbsp;".$filename."&nbsp;file uploaded successfully";
    }
}
?>
于 2014-06-30T05:44:47.050 に答える