• ベストアンサー

PHPでajaxを利用してデータ更新の方法

PHPでAJAX操作をしてデータ更新をしたいです。 たとえば削除ボタンが10個あって削除ボタンを押すとデータベースを更新して画像名をnoimage.jpg(デフォルト値)にします。 そして削除ボタンを無効化したいです。 こういうことってできるでしょうか? ボタンに割り振っているidはimage1からimage10としています。 JS側でどういうふうに受け取ってDBに渡せばいいか分かりません。 教えて下さい。 よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

(1)ajaxでdel.php?id=xxxとかでよぶ (2)削除が成功したら1、失敗したら0を返すようにしておく (3)戻りをみてidを指定してimgを更新、ボタンをdisabledに ということでわかりますか?

eccschool
質問者

補足

ご返答有難うございます。 AJAXはあまり詳しくなくて。。。 すみません。 いろいろ調べてみてはいるんですが。 今回codeigniterというフレームワークの勉強をかねて練習しています。 もう少し詳しく教えていただけるでしょうか?

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>JS側でどういうふうに受け取ってDBに渡せばいいか分かりません。 そもそもDBで管理しているの? DBなら画像の表示と削除はどうやって管理しているのかかかないと 回答が大きくぶれますね イメージとしては、こんな流れでしょうか・・・ 削除情報を流す→削除された情報が返ってくる→imgタグを書きかえる→ ボタンの属性をdisabledにする

eccschool
質問者

補足

ご返答有難うございます。 DBで画像名を管理しています。 表示はDBから画像名を受け取って表示します。 削除の場合はDBのカラムのデフォルト値のnoimage.jpgに書き換えます。 削除情報(image1とかimage3というID値)を渡してDBのそのカラムをnoimage.jpgに更新する。 成功すればimgタグを書き換えてボタンの属性を変更したいです。 すみませんでした。 言葉足らずでした。

関連するQ&A

  • Ajaxで画像の削除

    tableで一覧に画像が20個あります。 画像の横に「削除」ボタンがあります。 それぞれにidが振ってあり、そのボタンを押すと該当の画像が削除されて、 noimage.jpgに切り替えたいです。 PHPの部分で画像の削除の処理はできているのですが、 Ajaxの部分がよくわかりません。(パラメータの受け渡し、画像の戻し方) 詳しい方、教えていただけるでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • Ajaxで画像の削除

    Ajaxで画像を削除しようといろいろ試行錯誤しているのですが、 最終的なところで詰まっています。 $(function(){ $("input:button").click(function(){ //クリックされた画像のidを取得 var id = $(this).attr("id");   alert(id); //削除ボタンの無効化 $(this).attr("disabled",true); //idをサーバに送信(PHP側で削除処理)して結果を受け取る $.ajax({ url : "/test/delete_image", dataType : "json", data : {id:id}, type : "post", success : function(data){ if(data.id){ alert(data.id); $("#tblh img#image"+data.id).attr("src","/images/noimage.gif"); } }, error : function(){ alert("通信に失敗しました。"); } }); }); }); codeigniterというフレームワークを利用しPHP側では画像をディレクトリから削除しています。(こちらの動作は問題なし) <?php class Delete_image extends CI_Controller { function __construct(){ // Model クラスのコンストラクタを呼び出す parent::__construct(); $this->load->model('array_constant'); $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); $this->load->library('form_ex'); } function index(){ if(!$this->input->post("id")){ return false; }else{            //画像の削除とDBの画像名称を更新 $arr = array('id' => $this->input->post("id")); } echo json_encode($arr); } } としています。 画像の削除とDBの画像名称は更新されてるのでPHP側は問題ないようです。 jsonの値を受け取って画像を置き換えようとしているのですが、エラー側のほうに 判断されてしまいます。「alert("通信に失敗しました。");」となります。 なぜか分からず困っています。 教えてください。

    • ベストアンサー
    • AJAX
  • ajaxとphpでapiのデータ取得

    上手にお伝えできるか不安ですが、以下の事象の原因で考えられるものがありましたら、アドバイスいただきたいです。 [処理内容] js(ajax)でphpをたたいて、GAのapiに接続、ページビューを取得して その取得内容もとにphpで静的ファイルを生成(jsonやhtml)して、任意の箇所で表示させています。 アクセスランキングのようなものになります。 ---------------------------------------------------- jsでphp呼び出し→phpでGAにアクセス→GA→phpで受け取る→jsonやhtml生成 ---------------------------------------------------- [気になる事象] GAからのデータの取得やjsonの生成は概ねうまくいっているのですが、時にデータが取得できない時があります。 何故かphpファイルを更新する(ソースに改行を加えただけ)と正しいデータが取得できたりします。 そんなことが動作に影響するのかわからないのですが、また1日後とかにデータを取得して表示させようとすると、 phpファイルを更新しない限り前回取得した状態から更新されなくなります。 キャッシュみたいなものが介在するのかわからないのですが、ajaxの部分の記述でcashはfalseとしています。 ちなみにGAの管理画面ではページビューが取れているので、apiとphpの間が怪しいといえば怪しそうな気もしています。 尚、静的ファイル(jsonやhtml)のタイプスタンプの更新は、js(ajax)にアクセスする度に正しく行われている為、 それらのファイルの生成そのものは問題ないと思われます。 拙い説明で恐縮ですが、 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • Ajax以外で、JavaScriptからPHPへ渡

    Ajax通信以外で、JavaScriptからPHPへ変数(配列)を渡したいのですが、 可能でしょうか? 下記のような状態の時、js変数dataを、Ajax通信を利用せずにPHP変数として取得したいのですが、どうすればよいでしょうか? JavaScript関数の中で、PHPフォームの送信ボタンをクリックさせる(ような)ことは出来ないのでしょうか? <button type="button" onclick="testsubmit();">送信</button> <script> function testsubmit(){  js処理;  var data = ★★; } </script> ■最終的にやりたいこと ・ボタンをクリックしたら、js処理で取得したjs変数(配列)を、Ajax通信を利用せずに、PHP変数として受け取りたい ・それを出来れば1クリックで処理したい

  • PHPのフォームとAjaxを組み合わせたいのですが

    簡潔にコードを書かせて頂きますが、PHPとjQueryによるAjaxを連携させたいと考えています。 まずform.phpのフォームをsubmitし、その内容をpost.phpへ送り、リダイレクトにてres.phpへ送るという、PHPの基本的な動きをさせますが、 その結果はres.phpという新しいページではなく、Ajaxにてform.phpの<div id="text1">部に元々書かれている<form>ではなく、res.phpの出力内容を出力したいと考えております。 この場合、どのようにjQueryコードを記述すればいいのでしょうか? 色々考えて試してみたのですが、上手くいきませんでした。 自分はform.php、post.php、res.phpという3つのファイルを用意していますが、もしかしたらori.phpという出力用のファイルを用意し、その<div>空間内にform.phpのフォームやres.phpの結果をAjaxによって出力するのかなとも思いましたが、良く分かりませんでした。 アドバイス頂けないでしょうか? 宜しくお願い致しします。 (( form.php )) <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text1"> <h2>その1</h2> <form action="post.php" method="POST" id="form" name="form" > <input type="checkbox" id="news" name="news" value="news" /> ニュース <br /> <input type="submit" name="submit" value="submit" /> <input type="reset" name="reset" value="reset" /> </form> </div> </body> </html> (( post.php )) <?php session_start(); session_regenerate_id(TRUE); $_SESSION["news"] = "news 表示"; $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = 'res.php'; header("Location: http://$host$uri/$extra"); (( res.php )) <?php session_start(); session_regenerate_id(TRUE); ?> <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text2"> <h2>その2</h2> <?php $_SESSION["news"]; ?> </div> </body> </html> <?php session_destroy(); $_SESSION = ''; ?>

    • ベストアンサー
    • PHP
  • Node.jsでajaxがうまくいかない

    nodejs初心者なのでよくわからずやっていて恐縮ですが、うまくいきません。 https://phpotameshi-hoto345.c9users.io/node-ajax/hello_ajax.html なのですがもともとはphpで送信ボタンを押したときにphpが実行されるものでしたが、これを少し改良してNode.jsでやってみようと思ったのですが、phpと違って <script src="scripts/hello.js"></script> のようにnodejsを読み込んでやれば同じ結果になると思ったのですがうまくいきません。 その前にローカルでもNode.jsは使えるようなので >node test.js Server running at http://localhost:8124/ のようにしてローカルでやってもhttp://localhost:8124/自体は問題なく立ち上がりtest.jsの中身は実行されたのですが、ajaxの方がうまくいきません。 ローカルでのNode.jsもServer running at http://localhost:8124/ となっていればNode.jsのサーバは起動しているので、 ローカルでhello_ajax.htmlを起動して、buttonを押せばajaxもnodejsも実行されるのではないでしょうか?

  • SQLite3にPHPでデータの更新・追加する方法

    PHP初心者です。 すみません、どなたか教えてください。 SQLite3 のデータベース内にあるテーブルに、同一データがすでにある場合はそのデータを更新、無い場合はデータを追加したいのですが、PHPではどのように書けばよいのでしょうか? 具体的には、hoge.dbの中のテーブル prime_ministers があり、 id 1, name 伊藤博文, origin 長州 id 2, name 黒田清隆, origin 薩摩 上記の2データはすでに保存されているものとします。 そこにデータを追加するのですが、 name 伊藤博文, origin 長州 の場合は、もうすでにテーブル内に伊藤博文のデータがあるので、上書き更新、 name 大隈重信, origin 肥前 の場合は、nameのカラムに大隈重信が無いので、データを追加。 データベースがSQLite3の場合、どのように書けば良いのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • AjaxのOnFailureについて

    Ajax(prototype.js)を使用しているのですが、OnFailureが呼び出されてしまいます。 プログラムの流れです。 ボタン押下(html) ↓ 前処理(js) ↓ サーバのファイル情報取得(ajax非同期通信→php→戻ってきて情報取得) ↓ 取得したファイル数ループ(js) ↓ ↑ 別のサーバにコピー(ajax非同期通信→php→戻り値判定) ↓ ループ抜けたら終了処理 大量のファイルを処理した場合、4~5経過したあたりで 「別のサーバにコピー(ajax非同期通信→php→戻り値判定)」 が正常に行われず、後処理として記述してあるOnFailureを呼び出してしまいます。 OnFailureについて調べてみたのですが、MSDNのAjaxOptions クラスに 「ページの更新が失敗した場合に呼び出される JavaScript 関数。 この関数は、応答ステータス 200 の範囲内にない場合に呼び出されます。」 と記述されていました。 応答ステータスとは何を指しているのでしょうか。 回避方法があれば教えてください。 よろしくお願い致します。

  • 【php】画像アップローダのセキュリティ

    マイページのプロフィール画像等、 画像をアップロードできる機能があるサイトを作成した場合 とあるディレクトリに、そのすべてのデータが入っていくとします。 image_22_00001.jpg image_02_00002.jpg image_45_00005.jpg というような感じで、あるルールにそってファイル名がついていくとして 削除ボタンのようなフォームで削除する場合、 「IDが02の 00002番目の画像をを削除しろ」  ↓ image_02_00002.jpg 削除 というプログラムを書くとします。 しかし、もし、POSTやGETでIDや番号を送ってしまうと、 POSTやGET値を改ざんするだけで ディレクトリに入ってる他の人がアップロードした画像データ等 どんな画像データでも消せてしまうことになります。 データベースに image_02_00002_XXXXXX(ハッシュ値) で登録するにしても、 データベースを呼び出すとき、どのレコードに入ってるデータを削除するか という指定をする時にデータベースのクエリで使うID等を改ざんすることで 好きなレコードの画像を削除することができます。 このようにPOST、GETの改ざんをされても 本人がアップしたもののみしか削除できないような ロジックはどのようにして組み立てたらよいものなのでしょうか?

    • ベストアンサー
    • PHP
  • Ajaxで書き換えた要素内でLightbox

    Ajaxの勉強がてらいろいろ試しています。 そこで、質問なのですが、 例えば、<div id="xxx"></div>の中をAjax.Updaterで <a href="image_l.jpg" rel="lightbox[roadtrip]" title="image"> <img src="image_s.jpg" alt="image"> </a> と書き換えた場合、lightboxの機能が使えません。 とりあえず、Lightboxはinitializeでいろいろやってるために、Ajaxで後から追加した要素には適用されない、ということは判りました。 Ajaxで後から追加した要素内で行いたい場合、IFRAMEを使うしか方法はないのでしょうか? よろしくお願いします。

専門家に質問してみよう