0

PHPMailer を使用して、静的 Web サイト用の添付ファイル付きのフォームを作成しました。ほぼ完璧に動作しますが、まだいくつか疑問があります。親切にお願いしたいのですが、私がよくわからないことを少し説明して、最後の部分で私を助けてくれませんか. 前もって感謝します

1)私が使用するファイルをアップロードするため

$uploaddir  = './'; 
$uploadfile = $uploaddir . basename($_FILES['attachment']['name']);

if (move_uploaded_file($_FILES['attachment']['tmp_name'], $uploadfile)) {
    echo "Success\n";
} else {
    echo "Failed.\n";

しかし、私はそれを本当に理解していません。最初の行は、ファイルがアップロードされるディレクトリです。わかりました。ファイル自体の 2 回目のアップロード (最初の行で html field name="priloha" から選択したディレクトリへ) ですか? そして、私は 3 行目 (4 行目) を本当に理解していません。これは必要であり、その理由はわかりません。このコードは PHP マニュアルから取得します。 http://www.php.net/manual/en/features.fi...method.php、少し編集しただけです。4 行目 (move_uploaded_file 部分全体) を削除すると、フォームが機能しません。これでできることは、空の {} を残してエコーを削除することだけです。なんで?ファイルを移動するだけの場合、なぜ移動する必要があるのですか? ここ PHPManual でそれについて読みましたが、なぜこの関数を使用する必要があるのか​​わかりません。そして、どうすれば条件を残して、move_uploaded_file(...); だけにすることができますか? ?

2)もう1つは、このコードです

if(!$mail->Send()) {
     echo '<script type="text/javascript">alert("Error sending form!");</script>'; 
     } 
     else 
       {
       echo '<script type="text/javascript">alert("The form has been sent!");</script>';     
       }

echo "string" だけを使用しましたが、フォームを送信した後、メッセージが書かれた新しいページに表示されました。どこにもリダイレクトされたくありません。メッセージがポップアップせず、フォームの上に表示されるだけでも嬉しいです。

だから私は試しました

else 
       {
       echo '<script type="text/javascript">window.location = "./";</script>';
       echo '<script type="text/javascript">alert("The form has been sent!");</script>';     
       }

この場合、成功に関するポップアップは表示されません。順序を入れ替えても、成功を知らせるポップアップが表示され、ポップアップで [OK] をクリックするとリダイレクトされるときに、バックグラウンドに空の Web サイトのページが存在するという問題がまだあります:/

3)最後に、アップロード後にファイルを削除します。私の方法は少し厄介なようですが、うまくいきます。これを「軽く」するにはどうすればよいでしょうか。

if ($mail->AddEmbeddedImage("$uploadfile", "attachment") !="") 
     {
     unlink("$uploadfile"); 
     }

お返事ありがとうございます。お時間を無駄にして申し訳ありません。私は質問せずにフォームを機能させました。ほぼ完璧にしたいだけです。このフォームを作成するのに 2 日かかりました。PHP との最初の「実際の」接触であり、私にとっては簡単ではありませんでした。以前に必要なものをすべて知っていれば、これは 1 時間で完了できることを知っているので、次回は速くするためにこれについて明確にしたいと思います。ありがとうございます

4

1 に答える 1

1

1) move_uploaded_file は、一時ファイルとして最初にアップロードされたファイルを移動するために必要ですが、この場合は bool として使用され、ファイルが正しくアップロードされていない場合は false を返します! フロー制御ステートメントで何か他のものを削除するのを忘れたため、機能しない可能性があります。

次のように編集する必要があります。

   //if (move_uploaded_file($_FILES['attachment']['tmp_name'], //$uploadfile)) {
   //    echo "Success\n";
   //} else {
   //    echo "Failed.\n";

このようにして、不要なものをすべてコメントアウトします。それはうまくいくはずです

2)リダイレクトはヘッダーに依存します(チェックアウト)が、おそらくhtmlフォーム送信(「アクション」値)に設定されています

送信フォームがスクリプト「send.php」に移動する場合、そのスクリプトの最後に次の行を追加できます。

if(!$mail->Send()) {
  echo '<script type="text/javascript">alert("Došlo k chybě při odesílání formuláře!");</script>'; 
  echo '<script type="text/javascript">window.location ="./";</script>';
  header( "refresh:2;url=first_script_name.php" );
}

2秒後にページが強制的に最初のスクリプトに戻るようにします

とにかく、仕事を終わらせるスクリプトは class.phpmailer.php スクリプトです。これを見てください:http://stackover1.comeze.com/1/

3)使用する方法は通常です。添付ファイルがアップロードされたことを制御する場合は、単に使用します

 unlink(path_to_file);

これは、php を使用してファイルを削除する標準的な方法です (多くの人が delete() 関数を探します。また、unlink 関数を探している人をリダイレクトするためのダミーのマニュアル ページも作成しました! ;))

于 2013-05-29T16:55:24.807 に答える