-1

MySqlデータベースから取得したJSON文字列を別のphpページにPOSTしようとしています。親ページのコードは次のとおりです。

$ResultLists = array();
$counter = 0;
echo "<form target=\"_blank\" enctype=\"multipart/form-data\" method=\"post\" action=\"_popup.php\" name=\"compare\">";

while($data != NULL and $info = mysql_fetch_array( $data ))
{ 
Print "<tr>";
//..
//I printed some data here, but not relevant to problem
//..
$ResultLists[$counter] = $info['ResultList']; //gets JSON string
echo gettype($ResultLists[$counter]); //prints "string"
//echo $ResultLists[$counter]; //prints the whole list (it is a list of lists <--from python)
$var = json_decode($ResultLists[$counter]); //decode JSON string
echo $var[1][0]; //prints wonderfully (I am only printing one value in "array", but it works).

Print '<td><input type="checkbox" name="data[]" value="'.$ResultLists[$counter].'" /></td>';
Print '</tr>';
$counter++;
}
echo '<tr><td><input type="hidden" name="index" value="'.$counter.'" />';
echo '<input type="submit" value ="Compare Data"> </input></td></tr>';

子ページで、データを取得しようとします。

<?php

$index = $_POST['index'];
echo 'Number of rows: '.$index.'<br>';
$array = $_POST['data'];

$x = 0;

//echo gettype($array);

echo '<b>Type:</b> '.gettype($array[$x]).'<b>  Length:</b> '.strlen($array[$x]).'  <b>Data:</b> '.$array[$x].'<br>';
$var = json_decode($array[$x]);
echo gettype($var).strlen($var);
echo $var[1][0];

?>

これは(たとえば)を生成します

Number of rows: 8
Type: string Length: 2 Data: [[
NULL0

だから、それは動作しません。(これは、送信したデータのすべての行に対して行われます。したがって、$ xを変更すると、選択したチェックボックスの数の範囲内である限り、同じ出力になります。)何かアイデアはありますか?リスト全体ではなく「[[」として表示されるのはなぜですか?リスト全体を親ページに印刷できますが、正常に機能します。

一重引用符「」「」の文字などが原因であると思われます。何か案は?

編集:

したがって、魔法の引用を無効にすることは、私が投稿するのに役立ったようです。

しかし、私は奇妙な問題を抱えています。それはどういうわけか私のすべてのデータを送信します。

したがって、POSTを介してdata []を取得すると、長さはチェックされたチェックボックスの正しい数になりますが、保持されるデータは印刷された最初の行から始まります。何か案は?

4

1 に答える 1

1

おそらく、を使用してjson化された文字列のHTML文字をエスケープすることをお勧めしますhtmlspecialchars。つまり、

Print '<td><input type="checkbox" name="data[]" value="'.htmlspecialchars($ResultLists[$counter]).'" /></td>';
于 2012-09-11T19:12:50.410 に答える