0

私はこれについてインターネット全体を検索しました。しかし、私は答えを得ることができません。私はまだ初心者で、php+Mysql についてまだ勉強中です。

写真と人名で構成されるフォームを作成しました。「送信」ボタンをクリックすると、php および mysql スクリプトによって、ローカル フォルダー (public_html/images/$name/) に新しいディレクトリが作成されます。images フォルダー内に新しく作成されたフォルダーには、個人名 (スペースなし) の名前を付ける必要があります。次に、フォルダー アドレスが取得され、phpMyAdmin テーブルの列に配置されます。たとえば、ビルという名前の男がフォームにデータを入力しました。彼は自分の写真 (rockstar.jpg) をアップロードし、フォーム名フィールドに「Bill Fish」という名前を入力しました。次に、彼がそれを送信すると、スクリプトは新しいフォルダー (/images/Bill_Fish/) を作成し、彼の写真 (rockstar.jpg) をそこに置きます。その後、フォルダ アドレス (/images/Bill_Fish/rockstar.jpg) が phpMyAdmin テーブルの列のテキスト フィールドに入力されます。

form_post.php コード

            $name= $_POST["name"];


            $file= "images/$name/";

            **I'm stuck here**

form.php コード

            <tr>
              <td colspan="2"><input name="pic" type="file" id="pic" /></td>
            </tr>
            <tr>
              <td width="132"><span class="order">Name: </span></td>
              <td><span class="order">
                <input type="text" name="name" id="name" />
              </span></td>
            </tr>

このスクリプトを手伝ってくれる人はいますか? スクリプトを求めて申し訳ありませんが、ウェブ全体を検索しましたが、答えが得られませんでした。

どうもありがとうございました。あなたの助けに本当に感謝します:D

4

3 に答える 3

1

私が与えたい2つの考え:

  1. ユーザーが名前として多かれ少なかれ何でも入力できる場合、スペースをアンダースコアに置き換えるだけでは不十分な場合があります。パスは URL に近い動作をするため、代わりに適切なエンコーディングを使用することをお勧めurl_encode()します。url_decode()「Jon O'Hara」や「Nguy§/../äßt*+''s」などの名前が入力されていることを考えてみてください...
  2. 通常、タスクは別の方法で解決されます。ユーザーのデータベース エントリを作成すると、そのエントリに対して ID が生成されます。通常、これは自動インクリメントされた数値インデックスです。これにより、2 つのアカウントが同じ名前を共有する (起こる...) および「エキゾチックなキャラクター」の問題を回避できます。あなたはそれを取る作成するディレクトリの名前として id を指定します。そうすれば、後でそのフォルダーを簡単に見つけることができます。データベース内の適切なエントリを特定すると、フォルダ パスを保存しなくても構築できます。これには、段階的に生成するフォルダー構造がハードコーディングされていないという利点もあります。代わりに、それを再編成したいという結論に達するかもしれません。パスの再構築では、再構築アルゴリズムを変更するだけで済みますが、最終的なパスを保存するときは、データベース内のすべてのパスを変更する必要があります。
于 2012-11-14T10:47:01.940 に答える
0
$name= $_POST["name"];
$name = str_replace(' ', '_', $name); // replace space with underscore

$file= "images/".$name."/";
mkdir($file);

$filename = $_FILES['pic']['name']; // getting name of file being uploaded. Eg - rockstar
$ext = pathinfo($filename,PATHINFO_EXTENSION); // getting extension of file being uploaded
$destination = $file.$filename.'.'.$ext; // this will be images/Bill/rockstar.jpg

if(move_uploaded_file($_FILES['pic']['tmp_name'], $destination))
{
   echo 'File uploaded successfully';
}
else
{
   echo $_FILES['pic']['error'];
}

これは、ファイルのアップロードに関する一般的な考え方を示していることに注意してください。もちろん、写真のみがアップロードされるようにするための手順、ファイルサイズの制限などを実行する必要があります。

忘れmkdirた。それを提起してくれたTiitに感謝します

于 2012-11-14T10:42:30.450 に答える
0

まず第一に、フォームにはenctypeファイルをアップロードする権利が必要です。

<form enctype="multipart/form-data" action="form_post.php" method="POST">
<input name="name" type="text"><br />
<input name="pic" type="file" /><br />
<input type="submit" value="Upload File" />
</form>

次に、PHP 側を見てみましょう。ファイル データを取得するには、$_FILES 配列を確認する必要があります。画像に関するすべての情報は$_FILES['pic']. その配列には、'name' (ファイルの名前) や 'tmp_name' (アップロードされたファイルの一時的な名前) などの要素があります。

やりたいことは次のとおりです。フォルダーを作成します。

$name = str_replace(" ","_",$_POST['name']); // replace space with an underscore
$dir = "images/".$name;
mkdir($dir);

一時ファイルを適切なフォルダーに移動します。

$tmp_name = $_FILES['pic']['tmp_name'];
$name = $_FILES['pic']['name'];
move_uploaded_file($tmp_name, $dir."/".$name); 

説明した解決策を自分で用意する必要があります。

于 2012-11-14T10:46:43.360 に答える