2011-08-04 8 views
-1

先読み入力ボックス(jQuery UIを使用)を持つフォームを作成しています。選択された入力(この場合はバンド)は、Ajaxを介してデータベースに送信され、原告、被告、またはその他のビンの入力ボックスの下に表示されます。quとjQueryでのデータ取得の問題

ケースの90%は、うまく動作し、非同期的に輝かしいです。この問題は、バンドに引用符やアポストロフィがあると発生します。 PHPフォームハンドラでmysql_real_escape_stringという文字をエスケープしていますが、データがAjaxの終了時に発生しているようです。

description=Watts, Michael "5000" becomes description=Watts%2C+Michael+%225000%22. 

は、ここに私のjQueryのコード(空想何も、単にシリアライズ)と私のPHPコードです。 PHPファイルに手動でdescription=Watts, Michael "5000"と入力すれば正常に動作することに注意してください(そうでなければできないデータを取得することができます)。

のjQueryコード:

$('#party_add').live('click', function(){ 
//grab the form 
var thisform=$(this).parents('form'); 
//serialize the data 
var toSend=thisform.serialize(); 
//add the caseID we stored in #caseId 
var storedCaseId=$('#caseId').text(); 
toSend=toSend+'&caseId='+storedCaseId; 
$.ajax({ 
    type : "POST", 
    url  : 'cases_form_handler.php', 
    data : toSend, 
    dataType:'json', 
    success : function(data){ 
     alert(toSend); 
     //conjure the relevant parties into their respective places in the table below with some sexy json action 
     $('.party').empty(); 
      for(var x=0; x < data.length; x++){ 
       if(data[x].partyType==1){ 
        $('.party:first').append('<span class=party_addition id='+data[x].partyId+'>'+data[x].description+'</span><br/>'); 
       }else{ 
        //if defendant, put them in the defendant box 
        if(data[x].partyType==2){ 
         $('.party:first').next('.party').append('<span class=party_addition id='+data[x].partyId+'>'+data[x].description+'</span><br/>'); 
        }else{ 
         //if other, put them in the other box 
         if(data[x].partyType==3){ 
          $('.party:first').next('.party').next('.party').append('<span class=party_addition id='+data[x].partyId+'>'+data[x].description+'</span><br/>'); 
         } 
        } 
       } 
      } 
     } 
    }); 

PHPコードと失敗SQLの呼び出し:

$description=mysql_real_escape_string($_POST['description']); 
    $sql="SELECT id FROM varParties WHERE description='$description'"; 
    $result=mysql_query($sql); 

    while($row=mysql_fetch_assoc($result)){ 
     $partyId=$row['id']; 
    } 

UPDATE:

ここに私のPHPのJSON部分が

$sql = "SELECT varParties.*,relCasesParties.partyType,relCasesParties.active FROM varParties INNER JOIN relCasesParties ON relCasesParties.partyId = varParties.id WHERE relCasesParties.caseId = '$caseId' AND relCasesParties.active='1'"; 
     //build array of results 
     $query=mysql_query($sql); 
     for ($x = 0, $numrows = mysql_num_rows($query); $x < $numrows; $x++) { 
       $row = mysql_fetch_assoc($query); 
       $parties[$x] = array('description'=>$row['description'],'partyId'=>$row['id'],'partyType'=>$row['partyType']); 
     } 
      //send it back 
      echo json_encode($parties); 
です

htmlentitiesはどこで使用しますか?

答えて

0

使用

$description=mysql_real_escape_string(urldecode($_POST['description'])); 

は、それが目に見えるだとき、あなたは出力JSON文字列にしようとしていることを、答えは異なっています。ループ用の

for ($x = 0, $numrows = mysql_num_rows($query); $x < $numrows; $x++) { 
       $row = mysql_fetch_assoc($query); 
       $parties[$x] = array('description'=>addcslashes($row['description'],'"'),'partyId'=>$row['id'],'partyType'=>$row['partyType']); 
     } 
+0

うーん。データを適切に整理するのはすばらしいことでしたが、何らかの理由でそれを見つけて後で箱に入れることができませんでした。彼らは0のidを持っていると言っている。私の引用符/一重引用符は物事を乱している?私がPHPファイルから直接実行するたびに、正しく戻り値を返すことができるようです... – samuel

+1

** htmlentities()**をPHPの出力文字列に適用します – avetarman

+0

私はまだコードを更新できませんそれは働いていて、htmlentititesをどこで叩くべきかを知るのに苦労しています。 – samuel

関連する問題