2012-02-14 4 views
0

私は小さなウェブアプリケーションに取り組んでおり、フォームにデータを入力してボタンをクリックし、そのデータをフォームから削除できるようにしています。テーブルのデータをクリックして同様の機能を実行できるようにしたいと思います。つまり、フォームを作成する代わりにデータをポストするために何とか$。postを使用します。私はそれをやる方法を失っている。私はいくつかのチュートリアルと記事を読んで、フォームのサブミット機能をどのように複製するかを忘れています。ここで

フォーム/ PHP経由で物事の私の現在の方法です:

フォームテンプレート

<form name="DeleteMarker" action="index.php" target="_self" method="post"> 
      <fieldset class="Splice"> 
       <legend>Delete Marker</legend> 
        <label>Employee: </label><select name="DEmployee"> 
        <label>Job Name: </label><select name="DJob"> 
        <label>Customer Name: </label><select name="DCustomer"> 
        <br> 
        <label>Latitude: </label><input name="DLatitude" min="-180" max="180" step="0.00001" required /> 
        <label>Longitude: </label><input name="DLongitude" min="-180" max="180" step="0.00001" required /> 
        <br> 
        <input type="submit" value="Delete" /> 
      </fieldset> 
     </form> 

はPHP

if(isset($_POST['DEmployee'])) { 
     $sql="DELETE FROM Splices WHERE (Employee='$_POST[DEmployee]' AND Job='$_POST[DJob]' AND Customer='$_POST[DCustomer]' AND Latitude=$_POST[DLatitude] AND Longitude=$_POST[DLongitude])"; 
     if (!mysql_query($sql,$Splices)) { 
      die('Error: ' . mysql_error()); 
     } 

私はどこのjavascript機能を持っています表をクリックするとアラートが表示されますが、$ .postを配置する方法を理解する必要がありますまたは$ .ajaxステートメントを使用して、既に持っているフォームの機能を再現することができます。

(間違った)私が持っているのjavascript:私はあなたがそれにタグを付けていなかったにもかかわらず、jQueryのを使用している$ .postの使用から仮定するつもりです

function deleteRecord(e,j,c,l,ln) { 
     confirm("Delete Record ("+e+", "+j+", "+c+", "+l+", "+ln+")?"); 
     if(confirm){ 
      $.post("index.php", {DEmployee:e, DJob:j,DCustomer:c,DLatitude:l,DLongitude:ln});; 
     } 
} 
+0

jQueryを使用していますか? – nickb

+1

これはHTML5ではなく、jQueryです –

+0

何が機能していないのでしょうか?呼び出しは行われていますか?フォームには何が入っていますか?あなたはこれをデバッグしようとしましたか? – Daniel

答えて

1

あなたはjQueryの約言及しなかったが、$ .postは、jQueryの上で利用できる方法です。 jQueryを使用していて、それをあなたのページに含めるなら、それは大丈夫です。あなたはこのようなことを、行うことができるよりも

$('form[name=DeleteMarker]').submit(function() { 
    var dataString = $(this).serialize(); 
    $.post("index.php", dataString); 
    return false; 
}); 


EDIT:

実際にあなたのdeleteRecord()機能は他のいくつかの間違った用法を持っています。

confirm()はブール値(trueまたはfalse)を返します。したがって、この戻り値を使用してコードを継続する必要があります。

if(confirm) {}

if(confirm("do you confirm?")) { 
    //yes it's confirmed. 
} 

、あなたは、のような

var c = confirm("do you confirm?"); 
if(c) { 
    //yes it's confirmed. 
} 

以上便利にそれを使用する必要があり、

それを行うには正しい方法ではありません、あなたは "URLを言いましたまだまだ "index.php"ですが、あなたはどう見ましたか、わかりませんこのメソッドはGETではないため、通常は正常です。したがって、urlは投稿されたデータをクエリ文字列として含めることはありません。それが動作しない場合は、他の問題があるかもしれません。



EDIT-2: 実際には[OK]をここで両者の間に差がないため、完全な例である、あなたが背景に何が起こっているかを参照するには、ブラウザのJavaScript DEV-ツールを見ることができます。

<?php 
    if(isset($_GET['DEmployee'])) { 
     $sql="DELETE FROM Splices WHERE (Employee='$_POST[DEmployee]' AND Job='$_POST[DJob]' AND Customer='$_POST[DCustomer]' AND Latitude=$_POST[DLatitude] AND Longitude=$_POST[DLongitude])"; 
     if (!mysql_query($sql,$Splices)) { 
      echo "Error: ". mysql_error(); 
     } else { 
      echo "employee deleted"; 
     } 
    } else { 
     //you can add something else here 
     //<div>blablabla</div> 
     //and the form for delete 
?> 
     <html> 
     <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
     <script type="text/javascript"> 
     $(document).ready(function() { 
      $("form[name=DeleteMarker]").submit(function() { 
       if(confirm("This will be deleted, are you sure?")) { 
        var dataString = $(this).serialize(); 
        $.get("index.php", dataString , 
         function(data){ 
          alert(data); 
        }); 
       } 
       return false; 
      }); 
     }); 
     </script> 
     </head> 
     <body> 
     <form name="DeleteMarker" method="GET"> 
      <fieldset class="Splice"> 
       <legend>Delete Marker</legend> 
        <label for="DEmployee" >Employee: </label> 
        <select name="DEmployee"> 
         <option value="name1">name1</option> 
        </select> 
        <label for="DJob">Job Name: </label> 
        <select name="DJob"> 
         <option value="job1">job1</option> 
        </select> 
        <label for="DCustomer">Customer Name: </label> 
        <select name="DCustomer"> 
         <option value="cusname1">customer name1</option> 
        </select> 
        <br> 
        <label>Latitude: </label><input name="DLatitude" min="-180" max="180" step="0.00001" required /> 
        <label>Longitude: </label><input name="DLongitude" min="-180" max="180" step="0.00001" required /> 
        <br> 
        <input type="submit" value="Delete" /> 
      </fieldset> 
     </form> 
     </body> 
     </html> 
<?php 
    } 
?> 
+0

新しいアイデアですが、何らかの理由でURLにシリアライズされた文字列が置かれない場合でも、URLはまだ「index.php」です。私はそれが "確認"の中にあれば何もしないのだろうか? – riqitang

+0

@Sean独自のdeleteRecord()を使用している場合は、間違っている可能性があります。私の更新された回答をもう一度見てください。 – ocanal

+0

私は1ページだけしか持っていないので、同じページでそれを起こしたい。もし$ .getがうまくいくなら、どのようにリクエストを構築してPHPで入手するのですか? – riqitang

3

。幸いなことに、jQueryのは、あなたのためのすべての作業を行います。

$.post("index.php", $("form[name=DeleteMarker]").serialize(), function(data) { 
    //Do something with the response here 
}).error(function() { 
    //Do something in the case of an error here 
}) 
+0

したがって、フードの下では、これはフォームデータをボタンを押しますか?その引数 "$("#DeleteMarker ")は何ですか?serialize()"?フォームをまとめて取り除き、jqueryを使用しようとしています。 – riqitang

+0

http://api.jquery.com/serialize/ フォームを保存する必要があります。ユーザーがJavaScriptが無効になっています。 $ .postを使うだけで、あなたはより魅力的になります。 – Dave

+1

@Sean DeleteMarkerはIDではなく、正しいものです$( "form [name = DeleteMarker]") – ocanal