ホームページ >バックエンド開発 >PHPチュートリアル >更新せずにファイルをアップロードする

更新せずにファイルをアップロードする

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-23 13:55:14985ブラウズ

php を使用して、ほとんどのフォーラムのように投稿時に画像を挿入できる機能を作成したいと考えています。オンラインで調べたところ、

フォームに input type='file' と書かれていることが分かりました。フォームが送信されると、ターゲットを非表示の iframe に指定すると、ファイル
をアップロードすることができます。爽やかな。ファイルは正常にアップロードできますが、バックグラウンドで生成されたファイル保存パスを現在のページに同期して更新できないという問題が発生します。そのため、

はcsdnのように画像をアップロードした後に編集ボックスに対応するパスを書き込むことができません。

この問題を解決する良い方法がわかりません。今は書けないことが分かりました。助けを求める。


ディスカッションに返信 (解決策)

編集ボックスに対応するパスを書き込みますか?

input type=text または他のコントロールにのみ書き込むことができますが、input type=file には書き込むことができません

iframe が必要です 名前付きまたは ID を使用すると、受信プログラムは画像パスをエコーし​​ます
取得するときは、
s = document.iframe name.document.body.innerHTML を使用します
ID は
に似ています

編集ボックスに対応するパスを書き込むことができますか? input type=text または他のコントロールにのみ書き込むことができますが、input type=file には書き込むことはできません


iframe には名前を付けるか ID が必要で、受信プログラムのエコー画像パス

s = document を取得するときに使用されます。 iframe name.document.body.innerHTML
id は

に似ています。これが私がやることです: フォームが送信されると、バックグラウンド ハンドラーはそれを $this->filepath = (に相当) の形式で iframe に送信します。生成されたパス名) (これが当てはまるかどうかはわかりません) 質問) 次に、ページ内の document.getElementById("iframe").innerHTML の形式でバックグラウンドから返されたデータを取得します。しかし、常にデータを取得できるわけではありません。 iframeでは同期ができないようです

quote=quote 1階のxuzuningさんの返信:] エディットボックスに対応するパスを書いてください

input type=textやその他のコントロールにのみ書き込めますが、input type=には書き込めません。ファイル内の

iframe には名前を付けるか ID が必要で、受信プログラムのエコー画像パス

s = document.iframe name.document.body.innerHTML を取得するときに使用されます
id は
に似ています
プログラムは次のようになります

html里面<script>  function upload(){    $("#formUploadpic").submit() ;   }     function getPath(){    document.getElementById("ifram").innerHTML ; }</script><form id="formUploadpic" name="formUploadpic" enctype="multipart/form-data" method="post" action="" target="ifram">   <input type="file"><input type="button" value="上传" OnClick="upload.call(this)"></form><iframe style="width:0; height:0" name="ifram"><{$path}></iframe>后台程序function newTopic(){   if (//有文件){      //上传文件返回文件路径       $this->path = 文件保存路径              echo "<script>window.parent.getPath() ;</script>" //就是在这里显示路径为空的,好像没有更新上去一样。   }}


function getPath(){

document.getElementById("ifram").innerHTML ;

}
f4a922347b703f591c5cc84d020e806d3e4fe4d9712aa1b07d9c643f07cb5661891af37500392f05ebb1c8a2a6aafd55

id='ifram' はどこから来たのか
さらに、iframe で呼び出される関数は依然として iframe に基づいています

そして、カーソル位置を取得する問題は以下では解決できませんいえ。 Webkitブラウザ下でのみ正常に動作します。 csdnをテストしましたが、同じことが起こりました。

そして、カーソル位置を取得する問題は IE では解決できません。 Webkitブラウザ下でのみ正常に動作します。 csdnをテストしましたが、同じことが起こりました。

カーソル位置を取得するための情報はどこから来ますか?

6階のxjl756425616さんからの返信を引用: また、カーソル位置の取得の問題はIEでは解決できません。 Webkitブラウザ下でのみ正常に動作します。 csdnをテストしましたが、同じことが起こりました。カーソル位置を取得する情報はどこから来ますか?

モデレーターは編集者ではなかったみたいです~

非表示のドメインに送信した後、画像はアップロードされて処理されます。プロセス全体は更新されません、はい
ただし、画像のアドレスをテキストエリアに返さなければなりません。例:
11111111
// ここにカーソルを合わせてクリックし、画像をアップロードします。これは Webkit で行うことができ、画像はこの位置に表示されます
// ただし、IE では画像を処理するときに、カーソルのフォーカスが失われ、この位置に画像を表示できません。ここに表示されます
2222222


無知な人は恐れを知らないと言えます

//img.my.csdn.net/uploads/201303/16 /1363434181_6561.jpg][/img]


function getPath(){
document.getElementById("ifram").innerHTML

}
b06ff03f15d3bc804237a4c2def1ff191bda8bbeba0cf909c9f946908b315dcd065276f04003e4622c4fe6b64f465b88

どこから来たのか id='ifram'
さらに、iframe で呼び出される関数は依然として ifram で始まります...

それがありません。 .. もう一度試して、うまくいくか確認してみます

而且关于获取光标位置的问题,在IE下是无解的。只能在webkit浏览器下正常。我测试了一下csdn也是这样的。



这个问题我考虑过,但是没有写到那个地方,卡在了上传这个部分。
现在我做的确实是把图片的地址返回到textarea中,还有其它的办法没。

真可谓:无知者无畏


没经过考察,别那么快下定论~你可以看看
C:\Documents and Settings\Administrator\桌面\YouYaX_V12_UTF8\ORG\UBB\ORG\UBB\UploadForEditor.class.php
第41行开始,ie下我只能把图片放在最后
试过用cookie之类的,只能越来越混乱,网上找了很多资料~包括也有人提到的类似问题~
IE下光标消失,
不信么你用IE浏览器试试csdn的图片上传功能~
看我所言是否属实~

只要你不是闭门造车,认真提取别人的意见。怎么会有这样的结论呢?
http://www.baidu.com/baidu?word=%E5%85%89%E6%A0%87%E5%A4%84%E6%8F%92%E5%85%A5&ie=utf-8

这是我以前希望的代码(IE专用)

<SCRIPT>  function storeCaret (textEl) { if (textEl.createTextRange)  textEl.caretPos = document.selection.createRange().duplicate();  } function insertAtCaret (textEl, text) { if (textEl.createTextRange && textEl.caretPos) { var caretPos = textEl.caretPos; caretPos.text =caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?text + ' ' : text;  }  else  textEl.value = text; }  </SCRIPT>  <FORM NAME="aForm"> <TEXTAREA NAME="aTextArea" ROWS="5" COLS="80" WRAP="soft" ONSELECT="storeCaret(this);" ONCLICK="storeCaret(this);" ONKEYUP="storeCaret(this);"> 这是例子,你可以在这里添加文字、插入文字。 </TEXTAREA>  <BR>  <INPUT TYPE="text" NAME="aText" SIZE="80" VALUE="我要在光标处插入这些文字"><BR> <INPUT TYPE="button" VALUE="我要在光标处插入上面文本框里输入的文字!" ONCLICK="insertAtCaret(this.form.aTextArea, this.form.aText.value);"> </FORM>

本帖最后由 xuzuning 于 2013-03-16 21:13:41 编辑
            只要你不是闭门造车,认真提取别人的意见。怎么会有这样的结论呢?
http://www.baidu.com/baidu?word=%E5%85%89%E6%A0%87%E5%A4%84%E6%8F%92%E5%85%A5&ie=utf-8

这是我以……



因为你没有做过web编辑器,所以我和楼主想的可能版主你不大理解~
你的代码的确可以,因为在IE浏览器下,你的光标位置没有消失。
所谓光标的消失,其实指的是文本选中对象的消失。
一个光标点击在一个地方,或是选中某段文本,就会产生一个对象
IE下为 document.selection.createRange()
webkit下则显示的是位置信息 selectionStart 和 selectionEnd
当弹出上传对话框082c4a2216c6f13134b86ca11916f653时,提交到隐藏域,图片经过php文件处理后,
IE浏览器下的parent.document.selection.createRange()为空,意味着光标消失了。
而webkit下,selectionStart 和 selectionEnd仍然保持有值,所以能够插入到鼠标所点击的位置
你只要做一下就能体会了~或者你试试IE下访问CSDN,上传图片看看有没有问题~

至于为什么会消失,可能浏览器机制问题吧,弹出对话框的时候,这时不是鼠标不能点击任何地方吗?就和弹出alert类似~

我也不能特别肯定是不是这个原因,如果有人能做出来就最好了~

引用 13 楼 xuzuning 的回复:
本帖最后由 xuzuning 于 2013-03-16 21:13:41 编辑
            只要你不是闭门造车,认真提取别人的意见。怎么会有这样的结论呢?
http://www.baidu.com/baidu?word=%E5%85%89%E6%A0%87%E5%A4%84%E6%8F%92%E5%85%A5&amp;ie=ut……



做到这里了,确实是这样,在后台程序跑起来的时候确实会失去焦点,如果不是重新上传的话定位没有问题

快点出个 可用的方案

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。