3

事前に助けてくれてありがとう、私のリクエストの説明が理解できることを願っています.

私は、スクリプトやウェブサイトなどを含むさまざまな HTML ページをアップロードするウェブサイトを持っています。これらは、時間の経過とともに役立つことがわかりました... 1) 自分自身の参考資料として、および 2) 見つけたものを他のユーザーと共有するためです。

Web サイトは 2 つのセクションで構成されています。スクリプトを見つけるための検索ページと、それをアップロードするための管理ページ。アップロードされた HTML ファイルはサーバーの "docs/" ディレクトリに配置され、詳細は検索ページの MySQL データベースに追加されます。

フォームは次のようになります。

<form name="upload" enctype="multipart/form-data" action="includes/add.php" 
method="post" onsubmit="return validateForm();"> 

<label for="scriptname">Script Name</label><input class="inputarea" type="text" 
name="scriptname"><br> 
<label for="category">Category</label><input class="inputarea" type="text" 
name="category"><br> 
<label for="keywords">Keywords</label><input class="inputarea" type="text" 
name="keywords"><br>
<label for="content">HTML File</label><input class="inputarea" type="file" 
name="content"><br> 
<input class="submit" type="submit" value="Add"> 
</form>

私の質問はこれです... JavaScriptまたはPHPで次のことを行う方法はありますか:

  1. アップロードされたファイルの自動ファイル名を生成します (いくつかのランダムな数字で十分です)
  2. 「スクリプト名」入力フィールドに、送信時にテキストを追加して、スクリプト名とファイル名をテキストとしてデータベースに追加されるハイパーリンクにします。送信ボタンが押されると、以下がデータベースに追加されます。

    <a href="docs/automatic_file_name.html "> " scriptname_input "</a>

太字部分は生成されたファイル名から取得され、イタリック部分は入力フィールドから取得されます...

これの目的は、検索結果で、スクリプト名を含むデータベース列が表示されたときに、スクリプト名が実際のファイルへのリンクになるようにすることです。検索機能の準備ができており、データベース エントリからリンクを作成できますが、アップロード プロセスを簡素化する必要があるだけです。

これが不可能な場合、これを達成する別の方法はありますか?

- -編集 - -

ご協力ありがとうございました!いくつかの提案を組み合わせて使用​​して解決しました。しかし、彼のソリューションが最も近かったので、Ibere の功績を称えました。

これは、アップロードとデータベースの追加を処理する 'add.php' ファイルに使用した最終的なコードです。

<?php

$filename = md5($_FILES['content']['name']);
$labelForUrl = $_POST['scriptname'];
$url = "<a href=\"docs/$filename\">$labelForUrl</a>";
$target = "../docs/";

//This gets all the other information from the form
$name=$_POST['scriptname'];
$cat=$_POST['category'];
$key=$_POST['keywords'];
$link=$_POST['link'];
$file=($_FILES['content']['scriptname']);

// Connects to your Database
mysql_connect("localhost", "username", "password") or
die(mysql_error()) ;
mysql_select_db("scripts") or die(mysql_error()) ;

//Writes the information to the database
mysql_query("INSERT INTO scripttable (scriptname,category,keywords,link,content)
VALUES ('$url', '$cat', '$key', '$link', '$file')") ;

if(move_uploaded_file($_FILES['content']['tmp_name'], $target . $filename)) {
echo "The file ".  $labelForUrl. 
" has been uploaded";
}
else {
    echo "There was an error uploading the file, please try again!";
    }

?>
4

4 に答える 4

1

ファイル名に対してこのようなことを行うことができます。

$filename = md5($_FILES['content']['name']);

$labelForUrl = $_POST['scriptname'];

md5はランダムではありませんが、ファイル名に読み取り不可能な文字列を生成するには十分です。
次に、このようなURLを作成できます

<a href="docs/<?php echo $filename; ?>" ><?php echo $labelForUrl; ?></a>

お役に立てれば。

編集:filnameに拡張子を追加するのを忘れました。したがって、正しいコードは次のようになります。

$filename = md5($_FILES['content']['name']).$_FILES['content']['type']
于 2012-09-14T14:07:48.490 に答える
1

アップロードには uploadify を使用することをお勧めします。しかし、あなたが求めたことをするために:

$randomFileName = rand(1000, 9999);
if (file_exists("upload/" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
else
  {
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "upload/" . $randomFileName . $_FILES["file"]["type"]);
  // update your db with the location
  $loc = "upload/" . $randomFileName . $_FILES["file"]["type"];    
  mysqli_query("insert into `myTable` (`loc`) values ('$loc')");
  echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  }
}

ファイルのアップロードのヘルプについては、http://www.w3schools.com/php/php_file_upload.aspをご覧ください。

于 2012-09-14T14:04:26.487 に答える
0

codeigniter(PHP Framework)を知っていれば、これは非常に簡単です。

アップロードクラスを使用できます

フォームを簡単に作成して送信し、表示することもできます。

私はそのようにします。MVCに精通している場合は、10〜15分でそれを行うことができます。

于 2012-09-14T14:01:17.617 に答える
0
  1. ランダムなファイル名を生成するには、通常、これが非常にうまく機能することがわかります: md5( rand( 0, 100000 ) );. ファイル名のサイズを制限したい場合は、substr関数を使用できます。
  2. (MySQL データベースを想定)、接続を確立し、 INSERT コマンドを使用してデータベースにクエリを実行します。このリンクは、これらすべてを行う方法を示しています。
于 2012-09-14T14:13:56.443 に答える