4

PHPについてあまり知らない人に自分自身を証明するために、おそらくこれ以上プログラミングを許可されるべきではない人々によって設計および構築された、厄介なハッキングされたシステムを使用する必要があります。基本的に、ユーザーが実際に登録を完了する前に、ユーザーが自分のプロファイルの画像をアップロードできるようにする必要があることが決定されています。ちょうどそこに、登録フォームの真ん中に、ファイルアップロードフィールド、別の送信ボタン、および画像表示領域を備えた完全に別のフォーム(機能的には同じように見える必要があります)があります。どうやら、顧客は別のサイトにAJAX画像がアップロードされているのを見て、「かっこいい、それが欲しい!」と決めたようです。フォームがどのように機能するかを実際に知らずに、または未登録のユーザーが最初に物事をアップロードする必要がある理由を考慮せずに

私の最初のアイデアは、他の場所に非表示のフォームを作成し、ボタンがクリックされたときにファイルボックスの値をコピーしてから、AJAXを送信することでした。JavaScriptはファイルボックスの値を編集できないため、これは機能しません。理解できる。

2番目の試みは、ネストされたフォームを作成することでした。いくつかのハッキングで、FireFoxに2つのフォームを表示させることができましたが、内側のフォームを送信すると外側のフォームが送信されます。「未定義動作」という言葉だと思います。理にかなっている、あなたはフォームをネストすることになっていない。

したがって、これがまったく意味をなさないという事実を無視すると、クライアントは本当にそのように言われるべきです-ページ上にファイルアップロードフォームを作成する方法が残っています。これはAJAXを介して送信でき、別のページ内に表示されます形?私は、ページの他の場所にフォームを作成し、それを忌まわしいCSSハックで所定の位置に打ち込むことを避けたいと思っています。

4

2 に答える 2

1

これがあなたにとって十分に独創的であるかどうかはわかりませんがiframe、フォームの中央にを埋め込み、そのウィンドウ内でファイルのアップロードを行うのはどうですか?それは本当に賢くて頭がおかしいほど純粋な悪ではないかもしれませんが、それはうまくいくかもしれません。

親が提出されたときに私が見ることができる唯一の副作用は、埋め込まれたものiframeです。十分注意しiframeて、ファイルのアップロードに使用されていないときは必ず削除してください。大丈夫だと思います。

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form submit="http://www.google.com/search" method="get">
    <div>
        <input type="text" name="q" value="[ Search Google Here ]"/>
    </div>
    <iframe src="http://jfcoder.com/test/embed.php" style="width: 200px; height: 200px;"></iframe>
    <div>
        <button type="submit">Submit this Page's Form</button>
    </div>
</form>
</body>
</html>

埋め込み

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<?php

if ($_GET['q']) {
    echo "<p><strong>GET SUBMITTED</strong></p>";
}

?>
<form submit="embed.php" method="get">
    <div>
        <input type="text" name="q" value="Type whatever"/>
        <button type="submit">Submit this Page's Form</button>
    </div>
</form>
</body>
</html>

http://jfcoder.com/test/parentform.php

于 2012-06-24T04:55:59.510 に答える
0

編集:

これを読んでください:ネストされたhtmlフォームにアクセスできません-複数のフォームの問題

その答えは、フォーム要素に他のフォーム要素を含めることはできないということです。したがって、ブラウザーで機能する場合でも、この手法を使用する必要があるとは限りません。次のように、すべてを1つの形式にまとめてみてください。

<form action="register.php" method="POST" enctype="multipart/formdata">
 <input name="username" type="text" />
 <input name="password" type="password" />
 <input name="avitar" type="file" />
 <input name="image" type="submit" value="Upload" />
 <input name="register" type="submit" value="Register" />
</form>

または、jQuery / AJAXを使用して、ページを離れることなくavitarをアップロードすることをお勧めします。

元の回答:

javascriptを使用してこれを回避できます。簡単な、テストされていない例を次に示します。

<head>
 <script>
  var submitted = false;

  function canSubmit() {
   if(submitted) return false;
   submitted = true;
   return true;
  }
 </script>
</head>
<body>
 <form action="register.php" method="POST" onsubmit="return canSubmit();">
  <input name="username" type="text" />
  <input name="password" type="password" />
  <form action="upload.php" method="POST" onsubmit="return canSubmit();" enctype="multipart/formdata">
   <input name="avatar" type="file" />
   <input type="submit" value="Upload" />
  </form>
  <input type="submit" value="Register" />
 </form>
</body>

もう1つの方法は、フォームに同じアクションを与え、送信ボタンに名前を付けて、どのボタンが送信されたかがわかるようにすることです。これは、ユーザーが送信ボタンをクリックし、テキストボックスの1つが選択されているときにEnterキーを押すだけではなく、ファイルアップロードフォームの場合、ユーザーは送信ボタンをクリックする必要がある場合にのみ機能します。

于 2012-06-24T03:52:31.283 に答える