0

ユーザーに画像をアップロードさせたい。ファイルの名前が変更され(現在の名前にtime()が追加されます)、Images/フォルダーに移動されます。次に、データベーステーブルにアップロードされた名前をhtml/phpコードで参照します。表の名前が実際のファイル名と異なるため、画像は表示されません。2人のユーザーが同じ名前のファイルをアップロードした場合に備えて、画像名を変更する必要があります。time()名の変更をテーブル内のファイル名と実際のファイル名の両方に適用して、画像が表示されるようにするにはどうすればよいですか。これが私のコードです:

if (!empty($_FILES['picture'])) 
    {
    $pic= $_FILES['picture']['name'];
    $target= GW_UPLOADPATH . time() . $pic;
        if (move_uploaded_file($_FILES['picture']['tmp_name'], $target))
            {
            $query= "INSERT INTO posts (user_id, story, picture) VALUES     
('$user_id', '$story', '$pic')";
            mysqli_query($connect, $query);
            header( 'Location: profile.php' );
            }
    }

表の画像名はball.jpgだけで、実際のファイルは18292018ball.jpgの場合があります。

4

9 に答える 9

1

これを試して

$query= "INSERT INTO posts (user_id, story, picture)
         VALUES ('$user_id', '$story', '$target')";
于 2012-04-11T05:11:23.773 に答える
1

MySqlクエリで「$pic」の代わりに「$target」を使用するべきではありませんか?

$query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$target')";
于 2012-04-11T05:12:28.470 に答える
1

注:time()プレフィックスとして追加する場合、2つの画像で同じになることはありません

ファイル名を変更したときに、その新しい名前をdbに保存しないのはなぜですか

$changed_name = time().$pic;

$query= "INSERT INTO posts (user_id, story, picture) VALUES     
($user_id, '".$story."', '".$changed_name ."')";

ファイル名を変更するためのヒント

  • 最初に拡張子と名前を取り出します
  • 複数のスペースを1つのスペースで削除する
  • 次に、スペースを次のように置き換えます_
  • 画像名の大文字と小文字を変換します(小文字が好きです)
  • 次に、画像名でtime()を追加します
  • 最後にその拡張子を追加し、画像フォルダに保存します
于 2012-04-11T05:19:25.053 に答える
0

アップロードパスは、時点によって異なる場合を除いて、毎回保存する必要はありません。

$name = time() . $pic;
$target= GW_UPLOADPATH .$name;

$query= "INSERT INTO posts (user_id, story, picture) VALUES
('$user_id', '$story', '$name')";
于 2012-04-11T05:13:54.647 に答える
0

重複がないことを正確に確認するには:

  1. サーバーが画像を取得します(ユーザーが何らかの方法で画像をアップロードします)
  2. サーバーは画像の一意のIDを生成します
  3. サーバーは、そのIDを使用してデータベースに(一意のフィールドに)書き込みを行います
    • 成功したら、ファイルをディスク上の適切な場所に移動します
    • 失敗した場合は、ステップ2で再起動して別のIDを生成します
于 2012-04-11T05:15:01.367 に答える
0

保存しているファイル名とは異なるファイル名をデータベースに保存しています。ファイル名だけを使用する場合は、パスに追加する前に、ファイル名を変数に保存します。つまり、代わりに

$target= GW_UPLOADPATH . time() . $pic;

行う

$fileName = time() . $pic;
$target = GW_UPLOADPATH . $fileName;

SQLクエリで$picの代わりに$fileNameを使用します。

    $query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$fileName')";
于 2012-04-11T05:15:15.020 に答える
0

パスがすべて(例:Images /フォルダー)で同じである場合は、次を使用できます。

if (!empty($_FILES['picture'])) {
    $pic= time() . $_FILES['picture']['name'];
    $target= GW_UPLOADPATH . $pic;

        if (move_uploaded_file($_FILES['picture']['tmp_name'], $target)) {
            $query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$pic')";
            mysqli_query($connect, $query);
            header( 'Location: profile.php' );
        }
}
于 2012-04-11T05:20:05.163 に答える
0

これを試して:

if (!empty($_FILES['picture'])) 
{
$pic= $_FILES['picture']['name'];
$picname = time() . $pic;
$target= GW_UPLOADPATH . $picname;
    if (move_uploaded_file($_FILES['picture']['tmp_name'], $target))
        {
        $query= "INSERT INTO posts (user_id, story, picture) VALUES('$user_id', '$story', '$picname')";
        mysqli_query($connect, $query);
        header( 'Location: profile.php' );
        }
}

$picnameには時間+画像名が含まれます。複数のユーザーが同時にアップロードした場合も同じです。

于 2012-04-11T05:21:24.203 に答える
0

これを使って :

$query= "INSERT INTO posts (user_id, story, picture) VALUES ('$user_id', '$story', '$target')";
于 2012-04-11T05:47:28.933 に答える